SSM框架|[超详细]SSM框架整合教程--入门级(图书增删改查)

Spring+SpringMVC+MyBatis 框架整合

文章目录

  • 一、环境准备
    • 1.1、环境要求
    • 1.2、搭建数据据库环境
  • 二、基本环境搭建
    • 2.1、新建普通Maven项目,添加web的支持
    • 2.2、导入依赖
    • 2.3、Maven资源过滤问题设置
    • 2.4、maven扫描xml文件编码问题
    • 2.5、建立基本结构和配置框架
  • 三、Mybatis层编写
    • 3.1、编写数据库配置文件 db.properties
    • 3.2、编写MyBatis的核心配置文件
    • 3.3、编写实体类
    • 3.4、编写Dao层
      • 3.4.1、编写Dao层的Mapper接口
      • 3.4.2、编写Mapper接口对应的Mapper.xml
    • 3.5、编写Service层
      • 3.5.1、编写Service层的接口
      • 3.5.1、编写Service层的接口实现类
  • 四、Spring层编写
    • 4.1、Spring整合Dao层
    • 4.2、Spring整合service层
    • 4.3、对底层Dao进行测试
  • 五、SpringMVC层编写
    • 5.1、配置web.xml
    • 5.2、编写spring-mvc.xml配置文件
    • 5.3、Spring整合配置文件
    • 5.4、编写Controller
    • 5.5、编写视图层
      • 5.5.1、编写首页 index.jsp
      • 5.5.2、书籍列表页面 allbook.jsp
      • 5.5.3、添加书籍页面addBook.jsp
      • 5.5.4、修改书籍页面 updateBook.jsp

一、环境准备 1.1、环境要求
  • IDEA 2020.1 + MySQL 8.0.21+Tomcat 9.0.53 + Maven 3.8.2
  • 前端:jsp+css+bootstrap
【SSM框架|[超详细]SSM框架整合教程--入门级(图书增删改查)】项目架构图: SSM框架|[超详细]SSM框架整合教程--入门级(图书增删改查)
文章图片

1.2、搭建数据据库环境 创建一个存放书籍数据的数据库表
CREATE DATABASE `ssmbuild`; USE `ssmbuild`; DROP TABLE IF EXISTS `books`; 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=utf8INSERT INTO `books` VALUES (1, 'Java从入门到精通', 13, '从入门到放弃'), (2, 'MySQL', 12, '从删库到跑路'), (3, 'Linux', 23, '从进门到进牢'), (4, 'C++程序设计基础', 13, '从开门到锁门'), (5, '网页设计基础', 11, '从好看到难看');

数据库表如图:
SSM框架|[超详细]SSM框架整合教程--入门级(图书增删改查)
文章图片

二、基本环境搭建 2.1、新建普通Maven项目,添加web的支持 SSM框架|[超详细]SSM框架整合教程--入门级(图书增删改查)
文章图片

依赖:
junit 数据库驱动 连接池 servlet jsp jstl mybatis mybatis-spring springMVC spring-jdbc lombok
2.2、导入依赖
junit junit 4.12 mysql mysql-connector-java 8.0.21 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.2 org.mybatis mybatis-spring 2.0.6 org.springframework spring-webmvc 5.3.14 org.springframework spring-jdbc 5.3.14 org.projectlombok lombok 1.18.10

2.3、Maven资源过滤问题设置
src/main/resources **/*.properties **/*.xml false src/main/java **/*.properties **/*.xml false

2.4、maven扫描xml文件编码问题
少数人会遇这个问题
java 解决异常 2 字节的 UTF-8 序列的字节2 无效的问题
UTF-8

2.5、建立基本结构和配置框架 SSM框架|[超详细]SSM框架整合教程--入门级(图书增删改查)
文章图片

  • 在resource目录下新建mybatis-config.xml

  • 在resource目录下新建applicationContext.xml

三、Mybatis层编写 3.1、编写数据库配置文件 db.properties
  • 注意MySQL8.0以上要设置时区,最后加上serverTimezone=Asia/Shanghai
jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/ssmbuild?useSSL=true&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai jdbc.username=root jdbc.password=123456

数据库时区解决办法:https://blog.csdn.net/weixin_53168000/article/details/117260079
3.2、编写MyBatis的核心配置文件
>name="logImpl" value="https://www.it610.com/article/STDOUT_LOGGING"/>

3.3、编写实体类 包名:com.seig.pojo.Books 这里使用了lombok插件
@Data @AllArgsConstructor @NoArgsConstructor public class Books {private int bookID; private String bookName; private int bookCounts; private String detail; }

没有安装Lombok插件的小伙伴们可以自己写Getter and SetterConstructor(无参和有参构造方法)
3.4、编写Dao层 3.4.1、编写Dao层的Mapper接口
public interface BookMapper {//增加一本书 int addBook(Books books); //删除一本书 int deleteBookById(@Param("bookId") int id); //更新一本书 int updateBook(Books books); //查询一本书 Books queryBookById(@Param("bookId") int id); //查询所有书 List queryAllBook(); //根据书籍名称模糊查询 List queryBookName(@Param("keyword") String keyword); }

3.4.2、编写Mapper接口对应的Mapper.xml
一个Mapper.xml对应一个Mapper接口,要用namespace绑定上述接口 需要导入MyBatis的包!
insert into books (bookName,bookCounts,detail) values (#{bookName},#{bookCounts},#{detail}) delete from books where bookID = #{bookId} update books set bookName=#{bookName},bookCounts=#{bookCounts},detail=#{detail} where bookID=#{bookID} ; id="queryBookById" resultType="Books"> select * from books where bookID = #{bookId} id="queryAllBook" resultType="Books"> select * from books id="queryBookName" resultType="Books"> select * from books where bookName like "%"#{keyword}"%"

3.5、编写Service层 3.5.1、编写Service层的接口
public interface BookService {//增加一本书 int addBook(Books books); //删除一本书 int deleteBookById(int id); //更新一本书 int updateBook(Books books); //查询一本书 Books queryBookById(int id); //查询所有书 List queryAllBook(); //根据书籍名称模糊查询 List queryBookName(String keyword); }

3.5.1、编写Service层的接口实现类
public class BookServiceImpl implements BookService{//service 调dao层:组合Dao 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(); }public List queryBookName(String keyword) { return bookMapper.queryBookName(keyword); } }

OK,到此,底层需求操作编写完毕!
四、Spring层编写 4.1、Spring整合Dao层
在resource目录下新建spring-dao.xml

1、关联数据库配置文件db.properties,要引入context约束
2、配置MyBatis数据源,这里使用第三方的c3p0,还可以附加一些私有属性
SSM框架|[超详细]SSM框架整合教程--入门级(图书增删改查)
文章图片

3、创建sqlSessionFactory,在 MyBatis-Spring 中,则使用 SqlSessionFactoryBean来创建,要配置两个重要属性
? configLocation绑定MyBatis核心配置文件
? dataSource指定数据源(必要)
4、配置自动扫描包dao,动态实现了dao层接口可以注入到Spring容器中
? (在原来我们是创建sqlSessionTemplate对象,然后再创建一个Mapper接口实现类,其中内置sqlSessionTemplate私有对象,通过该对象进行操作)
4.2、Spring整合service层
在resource目录下新建spring-service.xml

Spring层搞定!
4.3、对底层Dao进行测试 首先将配置文件整合到applicationContext.xml

在test包下的java包下新建一个类MyTest.java 这里使用Junit单元测试框架
public class MyTest {@Test public void test1(){ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); BookService bookServiceImpl = (BookService) context.getBean("BookServiceImpl"); for (Books books : bookServiceImpl.queryAllBook()) { System.out.println(books); } } }

测试结果:
SSM框架|[超详细]SSM框架整合教程--入门级(图书增删改查)
文章图片

证明我们的底层代码没有问题! 我们开始SpringMVC层的编写吧~
五、SpringMVC层编写 5.1、配置web.xml
> >DispatcherServlet >org.springframework.web.servlet.DispatcherServlet contextConfigLocationclasspath:applicationContext.xml 1 > >DispatcherServlet / encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding utf-8 encodingFilter /* > >15

5.2、编写spring-mvc.xml配置文件

5.3、Spring整合配置文件
applicationContext.xml中 整合dao层的spring-dao.xml、service层的spring-service.xml和SpringMVC层的spring-mvc.xml

因此Spring可以用于团队开发!
配置文件,暂时结束!我们开始Controller 和 视图层编写了~
5.4、编写Controller BookController中实现了5个业务
  • 查询全部书籍
  • 新增书籍
  • 修改书籍
  • 删除书籍
  • 根据书籍名称查询书籍
@Controller @RequestMapping("/book") public class BookController { //controller 调service层 @Autowired @Qualifier("BookServiceImpl") //用来指定别名 private BookService bookService; //查询全部书籍,并且返回到一个书籍展示页面 @RequestMapping("/allBook") public String list(Model model){ List list = bookService.queryAllBook(); model.addAttribute("list",list); return "allBook"; }//跳转到新增书籍页面 @RequestMapping("/toAddBook") public String toAddPage(Model model){ return "addBook"; }//新增书籍 @RequestMapping("/addBook") public String addPaper(Books books) { System.out.println("addBook==>"+books); bookService.addBook(books); return "redirect:/book/allBook"; }//跳转到修改书籍页面 @RequestMapping("/toUpdateBook") public String toUpdateBook(Model model, int id) { Books books = bookService.queryBookById(id); System.out.println("toUpdateBook==>"+books); model.addAttribute("book",books ); return "updateBook"; }//修改书籍 @RequestMapping("/updateBook") public String updateBook(Model model, Books book) { System.out.println("UpdateBook==>"+book); bookService.updateBook(book); Books books = bookService.queryBookById(book.getBookID()); model.addAttribute("books", books); return "redirect:/book/allBook"; }//删除书籍 RestFul风格回顾 @RequestMapping("/del/{bookId}") public String deleteBook(@PathVariable("bookId") int id) { bookService.deleteBookById(id); return "redirect:/book/allBook"; }//根据书籍名称模糊查询书籍 @RequestMapping("/queryBook") public String queryBook(String keyword,Model model){ List list = bookService.queryBookName(keyword); System.err.println("queryBook=>"+list); if (list.isEmpty()){ list = bookService.queryAllBook(); model.addAttribute("error","未查到该书籍"); }model.addAttribute("list",list); return "allBook"; }

5.5、编写视图层
web/WEB-INF/目录下新建jsp包,用来存放我们自定义视图页面
SSM框架|[超详细]SSM框架整合教程--入门级(图书增删改查)
文章图片

5.5.1、编写首页 index.jsp
首页 - 锐客网 ="text/css"> a { text-decoration: none; color: black; font-size: 18px; } h3 { width: 180px; height: 38px; margin: 100px auto; text-align: center; line-height: 38px; background: deepskyblue; border-radius: 4px; } 点击进入图书展示页

SSM框架|[超详细]SSM框架整合教程--入门级(图书增删改查)
文章图片

5.5.2、书籍列表页面 allbook.jsp
书籍列表 - 锐客网
="color: red; font-weight: bold">${error}
书籍编号 书籍名字 书籍数量 书籍详情 操作
${book.getBookID()} ${book.getBookName()} ${book.getBookCounts()} ${book.getDetail()} 更改 | 删除

SSM框架|[超详细]SSM框架整合教程--入门级(图书增删改查)
文章图片

5.5.3、添加书籍页面addBook.jsp
新增书籍 - 锐客网
书籍名称:


书籍数量:


书籍详情:



SSM框架|[超详细]SSM框架整合教程--入门级(图书增删改查)
文章图片

5.5.4、修改书籍页面 updateBook.jsp
修改信息 - 锐客网
书籍名称: 书籍数量: 书籍详情:

SSM框架|[超详细]SSM框架整合教程--入门级(图书增删改查)
文章图片

模糊查询:
SSM框架|[超详细]SSM框架整合教程--入门级(图书增删改查)
文章图片

到此位置,SSM整合项目到此结束了!`

    推荐阅读