[SpringMVC 04] SSM图书管理系统整合


SSM_整合


1. 背景搭建

1.1 数据库:

books(bookID, bookName, bookCounts, detail), bookID是自增的

CREATE DATABASE `ssmbuild`;

USE `ssmbuild`;

CREATE TABLE `books`(
`bookID` INT(10) NOT NULL AUTO_INCREMENT COMMENT '书id',
`bookName` VARCHAR(100) NOT NULL COMMENT '书名',
`bookCounts` INT(11) NOT NULL COMMENT '数量',
`detail` VARCHAR(200) NOT NULL COMMENT '描述',
KEY `bookID`(`bookID`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO `books`(`bookID`,`bookName`,`bookCounts`,`detail`) VALUES
(1,'Java',1,'从入门到放弃'),
(2,'MySQL',10,'从删库到跑路'),
(3,'Linux',5,'从进门到进牢');

1.2.项目配置

新建和Mybatis层的配置,包括pojo、dao、service

1.2.1配置pom.xml

新建maven普通项目, 配置pom.xml文件(导入依赖、静态资源导出问题配置)


    
        
            junit
            junit
            4.11
        
        
            mysql
            mysql-connector-java
            5.1.35
        
        
            com.mchange
            c3p0
            0.9.5.2
        
        
            javax.servlet
            servlet-api
            2.5
        
        
            javax.servlet.jsp
            jsp-api
            2.2
        
        
            javax.servlet
            jstl
            1.2
        
        
            org.mybatis
            mybatis
            3.5.6
        
        
            org.mybatis
            mybatis-spring
            2.0.6
        
        
            org.springframework
            spring-webmvc
            5.2.12.RELEASE
        
        
            org.springframework
            spring-jdbc
            5.3.13
        
    

    
        
            
                src/main/java
                
                    **/*.properties
                    **/*.xml
                
                false
            
            
                src/main/resources
                
                    **/*.properties
                    **/*.xml
                
                false
            
        
    

1.2.2 测试连接数据库

更换数据库: 在schema中

1.2.3 构建包结构

java:com.roy.pojo, dao, service, controller

resources: 数据库连接信息:database.properties 连接数据库: mybatis-config.xml , spring托管: applicationContext.xml,

database.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssmbuild?useSSL=false&useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=123456

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>


    
    
        
    

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>



1.2.4 Java构建

Pojo层:

pojo.Books

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Books {
    private Integer bookID;
    private String bookName;
    private Integer bookCounts;
    private String detail;
}
dao层:

dao.BooksMapper

public interface BookMapper {
    //add, delete, update, query
    int addBook(Books books);
    int deleteBookById(@Param("bookId")int id);//可以取别名
    int updateBook(Books books);
    Books queryBookById(@Param("bookId")int id);//写param后,在xml中不需要写paramType, alt+/可以自动补充
    List queryAllBook();
}
dao层接口的实现xml:

(不出现提示信息的方法:在settings-->Languages &Frameworks-->SQL Dialects中配置数据库类型,将项目添加进来,配置完成后Apply-OK)

dao.BooksMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>


    
        insert into ssmbuild.books (bookName, bookCounts, detail)
        values (#{bookName},#{bookCounts},#{detail})
    
    
        delete from books where bookID=#{bookID}
    
    
        update ssmbuild.books
        set   bookName=#{bookName},bookCounts=#{bookCounts},detail=#{detail}
        where bookID=#{bookID}
    
    
    

写完去mybatis-config.xml注册

    

Service层

需要调用dao层写好的Mapper, 使用组合思想,并写set方法,方便spring注入

BookService接口

public interface BookService {
    int addBook(Books books);
    int deleteBookById(int id);
    int updateBook(Books books);
    Books queryBookById(int id);
    List queryAllBook();
}

BookServiceImpl

public class BookServiceImpl implements BookService{
    private BookMapper bookMapper;
    public void setBookMapper(BookMapper bookMapper) {//重点,组合思想
        this.bookMapper = bookMapper;
    }
    public int addBook(Books books) {
        return bookMapper.addBook(books);
        
    }
    public int deleteBookById(int id) {
        return bookMapper.deleteBookById(id);
    }
    public int updateBook(Books books) {
        return bookMapper.updateBook(books);
    }
    public Books queryBookById(int id) {
        return bookMapper.queryBookById(id);
    }
    public List queryAllBook() {
        return bookMapper.queryAllBook();
    }
}

1.3. Spring整合

1.3.1 把mybatis整合到Spring中

(同时把dao层整合到spring中,配置第四点)

写spring-dao.xml, 其中:关联数据库、写连接池、获得sqlSessionFactory

<?xml version="1.0" encoding="UTF-8"?>


    

    
        
        
        
        

        
        
        
        
        
        
        
        
        
        
    

    
        
        
    

    

        

        
    

(之前的dao层的Mapper.xml不能被托管到sping中,需要手动写一个Mapper.java的实现类,现在用动态扫描)

1.3.2 整合service层

新建spring-service.xml

<?xml version="1.0" encoding="UTF-8"?>


    

    
        
    

    
        
    


1.3.3 整合SpringMVC

1.给项目添加web支持, 然后修改web.xml文件

2.web.xml:(三件事情: DispatcherServlet, 乱码过滤, session过期时间)

<?xml version="1.0" encoding="UTF-8"?>


    
        springmvc
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            classpath:applicationContext.xml
            
        
        1
    
    
        springmvc
        /
    

    
        encoding
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            utf-8
        
    
    
        encoding
        /*
    
    
    
        15
    

spring-mvc.xml配置:

<?xml version="1.0" encoding="UTF-8"?>

    
    
    
    
    
        
        
    

在applicationContext.xml中添加:




WEB-INF下添加jsp文件夹


整合完成,开始写Controller和jsp文件夹下的前端展示

1.4 Controller和jsp前端

1.4.1 简单测试

写controller.BookController.java做测试:

@Controller
@RequestMapping("/book")
public class BookController {
    @Autowired//写这个注解,可以不用写set方法就可以自动注入(详见之前的笔记)
    @Qualifier(value = "BookServiceImpl")
    private BookServiceImpl bookServiceImpl;
    @RequestMapping("/allbook")
    public String list(Model model){
        List books = bookServiceImpl.queryAllBook();
        model.addAttribute("books", books);
        return "allBook";
    }
}

index.jsp:

跳转到全部书籍页面

jsp/allBook.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


过来了过来了


1.4.2 美化index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

  
    书项目首页
    
  
  
  

跳转到全部书籍页面 <%--跳转到 /book/allbook--%>

1.4.3 allBook.jsp

需要加入依赖:


    taglibs
    standard
    1.1.2

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>



    Title
    


<%-- 从list中遍历--%>
书籍编号 书籍名称 书籍数量 书籍详情 操作
${book.bookID} ${book.bookName} ${book.bookCounts} ${book.detail} 修改  |  删除

1.4.4 addBook.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title
    


1.4.5 updateBook.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title
    


<%-- 缺少id号, 提交的update无法update(修改失败)--%>

1.4.6 BookController.java

@Controller
@RequestMapping("/book")
public class BookController {
    @Autowired
    @Qualifier(value = "BookServiceImpl")
    private BookServiceImpl bookServiceImpl;
    //全部书籍展示
    @RequestMapping("/allbook")
    public String list(Model model){
        List books = bookServiceImpl.queryAllBook();
        model.addAttribute("books", books);
        return "allBook";
    }
    //添加书籍跳转
    @RequestMapping("/toAddBook")
    public String toAddPaper(){
        return "addBook";
    }
    //添加书籍提交
    @RequestMapping("/addBook")
    public String addBook(Books books){
        System.out.println("addBook->"+books);
        bookServiceImpl.addBook(books);
        return "redirect:/book/allbook";
    }
    //更新书籍跳转
    @RequestMapping("/toUpdate")
    public String toUpdatePaper(int id, Model model){
        Books books = bookServiceImpl.queryBookById(id);
        model.addAttribute("Qbooks", books);
        return "updateBook";
    }
    //更新书籍提交
    @RequestMapping("/updateBook")
    public String updateBook(Books books){
        bookServiceImpl.updateBook(books);
        return "redirect:/book/allbook";
    }
    //删除书籍,Restful风格
    @RequestMapping("/deleteBook/{bookId}")
    public String deleteBook(@PathVariable("bookId") int id){
        bookServiceImpl.deleteBookById(id);
        return "redirect:/book/allbook";
    }
}

1.5 SSM项目配置思路总结:

1.5.1 项目建立

  • 数据库建立

  • 新建项目,配置pom.xml:maven依赖, 资源过滤关闭

  • 构建基础包结构: pojo, dao, service, controller

  • resources添加: database.properties(连接数据库), mybatis-config.xml(空), applicationContext.xml(空)

  • 写完dao的Mapper.xml后,去mybatis-config.xml映射

  • 写service层, 组合的方式调用dao层


1.5.2 项目整合:

  • mybatis(整合到spring中):spring-dao.xml:配置dataSource, 连接池, sqlSessionFactory, 使用MapperScanner把Mapper.xml类扫描到Spring中,不用新建.java文件
  • service层整合: spring-service.xml: 扫描service的包, 把dao注入到service层中, 声明事务,和AOP织入
  • MVC层整合1: web.xml : 配置DispatcherService, 配置乱码过滤, 配置session过期时间
  • MVC层整合2:spring-mvc.xml: 配置注解驱动,静态资源过滤, 扫描包,视图解析器
  • application.xml中整合spring*.xml文件进去,并将application配置到web.xml的DispatcherService中。

(controller层被spring-mvc扫描到而被spring托管)