SSM整合


学习过程代码已上传Github ,供参考

SSM整合-mybatis

新建maven 项目

导入依赖、解决静态资源导出问题

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

    4.0.0

    com.lee
    ssmbuild
    1.0-SNAPSHOT

    
        8
        8
    
    
    
    

        
        
            mysql
            mysql-connector-java
            8.0.28
        
        
        
            com.mchange
            c3p0
            0.9.5.5
        


        
        
            javax.servlet
            servlet-api
            2.5
        
        
        
            javax.servlet.jsp
            jsp-api
            2.2
        
        
        
            javax.servlet
            jstl
            1.2
        


        
        
            org.mybatis
            mybatis
            3.5.7
        
        
        
            org.mybatis
            mybatis-spring
            2.0.6
        


        
        
            org.springframework
            spring-webmvc
            5.3.13
        
        
        
            org.springframework
            spring-jdbc
            5.3.18
        


        
        
            junit
            junit
            4.12
            test
        
        
        
        
            org.projectlombok
            lombok
            1.18.22
        
        
    

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

连接数据库

create database ssmbuild;
use ssmbuild;

create table books (
    bookID int(50) 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, '从进门到进牢');

? ...

新建配置文件 (spring/mybatis/db)

applicationContext.xml(Spring)

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


    
    
    
    

mybatis-config.xml(mybatis)

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




    

    
        
    



database.properties (连接数据库信息)

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssmbuild?useSSL=true&useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8
jdbc.username=root
jdbc.password=ll546546

pojo

新建实体类 Book

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Book {
    private int bookID;
    private String bookName;
    private int bookCounts;
    private String detail;
}

dao (mapper)

BookMapper.java

import com.lee.pojo.Book;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface BookMapper {

    // 增加一本书
    int addBook(Book book);

    // 删除一本书
    int deleteBook(@Param("bookId") int id);

    // 更新一本书
    int updateBook(Book book);

    // 查询一本书
    Book getBookById(@Param("bookId") int id);

    // 查询全部的书
    List getAllBooks();

}

BookMapper.xml

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





    
    
        insert into ssmbuild.books (bookName, bookCounts, detail)
        VALUES (#{bookName}, #{bookCounts}, #{detail});
    

    
    
        delete from ssmbuild.books where bookID = #{bookId};
    
    
    
    
        update ssmbuild.books set bookName = #{bookName}, bookCounts = #{bookCounts}, detail = #{detail}
        where bookID = #{bookId};
    

    
    


    
    



mybatis-config.xml 新增mapper映射


	

增加后:

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




    

    
        
    

    
        	
    


service

BookService.java

package com.lee.service;

import com.lee.pojo.Book;

import java.util.List;

public interface BookService {

    // 增加一本书
    int addBook(Book book);

    // 删除一本书
    int deleteBook(int id);

    // 更新一本书
    int updateBook(Book book);

    // 查询一本书
    Book getBookById(int id);

    // 查询全部的书
    List getAllBooks();
}

BookServiceImpl.java

package com.lee.service;

import com.lee.dao.BookMapper;
import com.lee.pojo.Book;

import java.util.List;

// BookServiceImpl 添加 @Service 就可以被 spring-service 扫描到  
public class BookServiceImpl implements BookService{

    // service 调用 dao
    private BookMapper bookMapper;

    public void setBookMapper(BookMapper bookMapper) {
        this.bookMapper = bookMapper;
    }

    @Override
    public int addBook(Book book) {
        return bookMapper.addBook(book);
    }

    @Override
    public int deleteBook(int id) {
        return bookMapper.deleteBook(id);
    }

    @Override
    public int updateBook(Book book) {
        return bookMapper.updateBook(book);
    }

    @Override
    public Book getBookById(int id) {
        return bookMapper.getBookById(id);
    }

    @Override
    public List getAllBooks() {
        return bookMapper.getAllBooks();
    }

}

SSM整合-Spring

新建 spring-dao.xml

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



    









    
    
    
    
        
        
        
        

        
        
        
        
        
        
        
        
        

    


    
    
        
        
        
    


    
    
        
        
        
              
    


spring-service.xml

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



    
        

    
    
        
    

    
    
        
        
    

    


SSM整合-SpringMVC

添加 web 支持

配置web.xml

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


    
    
        springmvc
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            classpath:springmvc-servlet.xml
        
           
        
        1
    
    
        springmvc
        /
    
    
    
        encoding
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            utf-8
        
    
    
        encoding
        /*
    
    
    
        15
    


新建 springmvc-servlet.xml

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


    
    

    
    

    
    

    
    
        
        
    


在WEB-INF目录下新建文件夹 jsp

controller

新建 BookController.java

package com.lee.controller;

import com.lee.pojo.Book;
import com.lee.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;

@Controller
@RequestMapping("/book")
public class BookController {
    // controller 调用 service
    @Autowired
    @Qualifier("bookServiceImpl")
    private BookService bookService;

    // 查询全部的书 并返回到一个数据展示页面
    @RequestMapping("/allBooks")
    public String listBook(Model model) {

        List bookList = bookService.getAllBooks();

        model.addAttribute("list", bookList);

        return "allBooks";
    }


}

WEB/jsp/ 下新建 allBooks.jsp

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


    书籍展示




书籍展示

修改欢迎页 index.jsp

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

  
    首页
  
  
  进入书籍页面
  

Test

package com.lee;

import com.lee.pojo.Book;
import com.lee.service.BookService;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.List;

public class MyTest {

    @Test
    public void test01() {

        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        BookService service = context.getBean("bookServiceImpl",BookService.class);
        List bookList = service.getAllBooks();

        for (Book book : bookList) {
            System.out.println(book);
        }
    }
}

修改 web.xml classpath:applicationContext.xml



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


    springmvc
    /

至此配置基本完成

美化

美化 index.jsp

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

  
    首页
    
  
  
  

进入书籍页面

美化 allBooks.jsp 并添加 新增书籍 请求

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


    书籍展示
    <%--  BootStrap 美化界面  --%>
    



书籍编号 书籍名称 书籍数量 书籍详情
${book.bookID} ${book.bookName} ${book.bookCounts} ${book.detail}

image-20220501214146725插入功能

在 WEB-INF/jsp下新建 addBook.jsp

<%--
  Created by IntelliJ IDEA.
  User: KITE
  Date: 22/05/01
  Time: 20:51
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    新增书籍
    <%--  BootStrap 美化界面  --%>
    



跳转至新增页面、新增书籍 BookController

// 跳转至新增书籍页面
@RequestMapping("/toAddBook")
public String toAddBookPage() {
    return "addBook";
}

// 新增书籍
@RequestMapping("/addBook")
public String addBook(Book book, Model model) {
    bookService.addBook(book);
    return "redirect:/book/allBooks";
}

image-20220501214219259

修改删除功能

allBooks.jsp增加 修改删除 请求

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


    书籍展示
    <%--  BootStrap 美化界面  --%>
    



书籍编号 书籍名称 书籍数量 书籍详情 操作
${book.bookID} ${book.bookName} ${book.bookCounts} ${book.detail} 修改   |   删除

image-20220501231318908

新建 updateBook.jsp

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


    修改书籍
    <%--  BootStrap 美化界面  --%>
    



image-20220501231334362

BookController

// 跳转至修改书籍页面
@RequestMapping("/toUpdateBook")
public String toUpdateBookPage(int id, Model model) {
    // System.out.println("toUpdateBook");
    Book book = bookService.getBookById(id);

    model.addAttribute("GotBook", book);
    return "updateBook";
}

// 修改书籍
@RequestMapping("/updateBook")
public String updateBook(Book book) {
    bookService.updateBook(book);
    return "redirect:/book/allBooks";
}


// 删除书籍
@RequestMapping("/deleteBook/{bookId}")
public String updateBook(@PathVariable("bookId") int id) {
    bookService.deleteBook(id);
    return "redirect:/book/allBooks";
}

查询功能

BookMapper.java 添加查询方法接口

// 查询
List getBookByName(String bookName);

BookMapper.xml 编写sql



BookService.java 添加查询方法接口

// 根据书名查询
List getBookByName(String bookName);

BookServiceImpl.java 实现查询方法接口

@Override
public List getBookByName(String bookName) {
    return bookMapper.getBookByName(bookName);
}

BookController 实现页面跳转及结果反馈

// 查询书籍
@RequestMapping("/getBookByName")
public String getBook(String bookName, Model model) {
    System.out.println("--------------------" + bookName);
    List bookList = bookService.getBookByName(bookName);
    if (bookList.isEmpty()) {
        model.addAttribute("error", "true");
    } else {
        model.addAttribute("list", bookList);
    }
    return "allBooks";
}

allBooks.jsp 添加 查询请求以及查询为空时的提醒

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


    书籍展示
    <%--  BootStrap 美化界面  --%>
    



<%-- 搜索为空时的三种解决方案 --%> <%-- 提示窗口 --%>

注意! 查询内容为空!请返回书籍目录

<%-- alert 弹窗 --%> <%out.print("<script>alert('查找内容为空');</script>");%> <%-- 重定向首页 --%> <%response.sendRedirect(request.getContextPath()+"/book/allBooks");%>
书籍编号 书籍名称 书籍数量 书籍详情 操作
${book.bookID} ${book.bookName} ${book.bookCounts} ${book.detail} 修改   |   删除

增加日志功能

mybatis-config.xml



    

SSM