SSM 整合实战—— IDEA 版

张开发
2026/6/22 10:05:39 15 分钟阅读
SSM 整合实战—— IDEA 版
1、ssm 整合Mybatis 层一、MyBatis 层核心目标搭建 MyBatis 基础环境编写实体类、Mapper 接口、Mapper 映射文件实现数据库底层交互为 Spring 整合做准备。二、IDEA 项目结构MyBatis 层src/main/java └── com.example ├── pojo # 实体类 │ └── Book.java ├── mapper # Mapper接口 │ └── BookMapper.java └── service # Service层接口后续Spring层 └── BookService.java src/main/resources ├── mapper # MyBatis映射文件 │ └── BookMapper.xml ├── mybatis-config.xml # MyBatis核心配置 └── db.properties # 数据库连接信息三、核心代码实现1. 数据库准备ssm_dbsqlCREATE DATABASE ssm_db CHARACTER SET utf8mb4; USE ssm_db; CREATE TABLE books ( id INT PRIMARY KEY AUTO_INCREMENT, bookName VARCHAR(100) NOT NULL, author VARCHAR(50) NOT NULL, price DOUBLE NOT NULL ); INSERT INTO books (bookName, author, price) VALUES (Spring实战, Craig Walls, 79.00), (MyBatis从入门到精通, 刘增辉, 69.00);2. 实体类Book.javapackage com.example.pojo; import lombok.Data; Data // Lombok简化代码需安装插件 public class Book { private Integer id; private String bookName; private String author; private Double price; }3. Mapper 接口BookMapper.javapackage com.example.mapper; import com.example.pojo.Book; import java.util.List; public interface BookMapper { // 查询所有书籍 ListBook queryAllBook(); // 根据ID查询 Book queryBookById(Integer id); // 添加书籍 int addBook(Book book); // 修改书籍 int updateBook(Book book); // 删除书籍 int deleteBook(Integer id); // 搜索书籍模糊查询 ListBook searchBook(String bookName); }4. MyBatis 映射文件BookMapper.xmlxml?xml version1.0 encodingUTF-8 ? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN https://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.example.mapper.BookMapper !-- 查询所有书籍 -- select idqueryAllBook resultTypeBook SELECT * FROM books /select !-- 根据ID查询 -- select idqueryBookById parameterTypeint resultTypeBook SELECT * FROM books WHERE id #{id} /select !-- 添加书籍 -- insert idaddBook parameterTypeBook INSERT INTO books (bookName, author, price) VALUES (#{bookName}, #{author}, #{price}) /insert !-- 修改书籍 -- update idupdateBook parameterTypeBook UPDATE books SET bookName #{bookName}, author #{author}, price #{price} WHERE id #{id} /update !-- 删除书籍 -- delete iddeleteBook parameterTypeint DELETE FROM books WHERE id #{id} /delete !-- 搜索书籍模糊查询 -- select idsearchBook parameterTypestring resultTypeBook SELECT * FROM books WHERE bookName LIKE CONCAT(%, #{bookName}, %) /select /mapper5. MyBatis 核心配置mybatis-config.xmlxml?xml version1.0 encodingUTF-8 ? !DOCTYPE configuration PUBLIC -//mybatis.org//DTD Config 3.0//EN https://mybatis.org/dtd/mybatis-3-config.dtd configuration !-- 环境配置此处由Spring管理此处可简化 -- environments defaultdevelopment environment iddevelopment transactionManager typeJDBC/ dataSource typePOOLED property namedriver value${jdbc.driver}/ property nameurl value${jdbc.url}/ property nameusername value${jdbc.username}/ property namepassword value${jdbc.password}/ /dataSource /environment /environments !-- 映射器 -- mappers mapper resourcemapper/BookMapper.xml/ /mappers /configuration6. 数据库配置db.propertiespropertiesjdbc.drivercom.mysql.cj.jdbc.Driver jdbc.urljdbc:mysql://localhost:3306/ssm_db?useSSLfalseserverTimezoneUTCcharacterEncodingutf8 jdbc.usernameroot jdbc.passwordroot2、ssm 整合Spring 层一、Spring 层核心目标将 MyBatis 的核心组件SqlSessionFactory、Mapper交给 Spring 容器管理管理 Service 层 Bean配置声明式事务实现解耦与事务控制。二、Spring 核心配置applicationContext.xmlxml?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beans xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:contexthttp://www.springframework.org/schema/context xmlns:txhttp://www.springframework.org/schema/tx xsi:schemaLocationhttp://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx https://www.springframework.org/schema/tx/spring-tx.xsd !-- 1. 加载数据库配置文件 -- context:property-placeholder locationclasspath:db.properties/ !-- 2. 配置数据源Druid连接池推荐 -- bean iddataSource classcom.alibaba.druid.pool.DruidDataSource property namedriverClassName value${jdbc.driver}/ property nameurl value${jdbc.url}/ property nameusername value${jdbc.username}/ property namepassword value${jdbc.password}/ /bean !-- 3. 配置SqlSessionFactoryMyBatis与Spring整合核心 -- bean idsqlSessionFactory classorg.mybatis.spring.SqlSessionFactoryBean !-- 注入数据源 -- property namedataSource refdataSource/ !-- 加载MyBatis核心配置 -- property nameconfigLocation valueclasspath:mybatis-config.xml/ !-- 加载Mapper映射文件 -- property namemapperLocations valueclasspath:mapper/*.xml/ !-- 配置别名 -- property nametypeAliasesPackage valuecom.example.pojo/ /bean !-- 4. 扫描Mapper接口自动代理并注册为Bean替代MyBatis生成代理 -- bean classorg.mybatis.spring.mapper.MapperScannerConfigurer property namebasePackage valuecom.example.mapper/ property namesqlSessionFactoryBeanName valuesqlSessionFactory/ /bean !-- 5. 扫描Service层自动扫描并创建Bean -- context:component-scan base-packagecom.example.service/ !-- 6. 配置事务管理器 -- bean idtransactionManager classorg.springframework.jdbc.datasource.DataSourceTransactionManager property namedataSource refdataSource/ /bean !-- 7. 开启声明式事务注解支持 -- tx:annotation-driven transaction-managertransactionManager/ /beans三、Service 层代码实现1. Service 接口BookService.javapackage com.example.service; import com.example.pojo.Book; import java.util.List; public interface BookService { ListBook queryAllBook(); Book queryBookById(Integer id); void addBook(Book book); void updateBook(Book book); void deleteBook(Integer id); ListBook searchBook(String bookName); }2. Service 实现类BookServiceImpl.javapackage com.example.service.impl; import com.example.mapper.BookMapper; import com.example.pojo.Book; import com.example.service.BookService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; Service(bookService) public class BookServiceImpl implements BookService { // 自动注入Mapper Autowired private BookMapper bookMapper; Override public ListBook queryAllBook() { return bookMapper.queryAllBook(); } Override public Book queryBookById(Integer id) { return bookMapper.queryBookById(id); } Override Transactional // 事务控制添加操作 public void addBook(Book book) { bookMapper.addBook(book); } Override Transactional // 事务控制修改操作 public void updateBook(Book book) { bookMapper.updateBook(book); } Override Transactional // 事务控制删除操作 public void deleteBook(Integer id) { bookMapper.deleteBook(id); } Override public ListBook searchBook(String bookName) { return bookMapper.searchBook(bookName); } }3、SSM 整合SpringMVC 层3.1 作用说明SpringMVC 负责接收浏览器请求、调用 Service、跳转页面、返回数据是整个 Web 项目的入口控制层。3.2 配置 web.xml核心路径src/main/webapp/WEB-INF/web.xmlxml?xml version1.0 encodingUTF-8? web-app xmlnshttp://xmlns.jcp.org/xml/ns/javaee xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd version4.0 !-- 1. 启动 Spring 根容器 -- context-param param-namecontextConfigLocation/param-name param-valueclasspath:applicationContext.xml/param-value /context-param listener listener-classorg.springframework.web.context.ContextLoaderListener/listener-class /listener !-- 2. 解决 POST 请求中文乱码 -- filter filter-nameencodingFilter/filter-name filter-classorg.springframework.web.filter.CharacterEncodingFilter/filter-class init-param param-nameencoding/param-name param-valueUTF-8/param-value /init-param init-param param-nameforceEncoding/param-name param-valuetrue/param-value /init-param /filter filter-mapping filter-nameencodingFilter/filter-name url-pattern/*/url-pattern /filter-mapping !-- 3. 配置 SpringMVC 前端控制器 -- servlet servlet-namespringmvc/servlet-name servlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-class init-param param-namecontextConfigLocation/param-name param-valueclasspath:springmvc-servlet.xml/param-value /init-param load-on-startup1/load-on-startup /servlet servlet-mapping servlet-namespringmvc/servlet-name url-pattern//url-pattern /servlet-mapping /web-app3.3 配置 springmvc-servlet.xml路径src/main/resources/springmvc-servlet.xmlxml?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beans xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:contexthttp://www.springframework.org/schema/context xmlns:mvchttp://www.springframework.org/schema/mvc xsi:schemaLocation http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd !-- 1. 扫描 Controller -- context:component-scan base-packagecom.controller/ !-- 2. 开启 SpringMVC 注解驱动 -- mvc:annotation-driven/ !-- 3. 静态资源放行css/js/img -- mvc:default-servlet-handler/ !-- 4. 视图解析器 -- bean classorg.springframework.web.servlet.view.InternalResourceViewResolver property nameprefix value/WEB-INF/pages// property namesuffix value.jsp/ /bean /beans4、SSM 整合查询所有书籍功能4.1 编写 Controller路径com.controller.BookController.javapackage com.controller; import com.pojo.Book; import com.service.BookService; import org.springframework.beans.factory.annotation.Autowired; 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 { Autowired private BookService bookService; // 查询所有书籍 RequestMapping(/allBook) public String list(Model model) { ListBook bookList bookService.queryAllBook(); model.addAttribute(bookList, bookList); return bookList; } }4.2 编写书籍列表页面路径src/main/webapp/WEB-INF/pages/bookList.jspjsp% page contentTypetext/html;charsetUTF-8 languagejava % % taglib prefixc urihttp://java.sun.com/jsp/jstl/core % html head title书籍列表/title /head body h1书籍信息/h1 a href${pageContext.request.contextPath}/book/toAdd添加书籍/a table border1 tr th书籍ID/th th书籍名称/th th书籍数量/th th书籍详情/th th操作/th /tr c:forEach varbook items${bookList} tr td${book.bookID}/td td${book.bookName}/td td${book.bookCounts}/td td${book.detail}/td td a href${pageContext.request.contextPath}/book/toUpdate?id${book.bookID}修改/a nbsp;|nbsp; a href${pageContext.request.contextPath}/book/deleteBook?id${book.bookID}删除/a /td /tr /c:forEach /table /body /html5、SSM 整合添加书籍功能5.1 跳转到添加页面// 跳转到添加页面 RequestMapping(/toAdd) public String toAdd() { return addBook; }5.2 编写添加页面 addBook.jspjsp% page contentTypetext/html;charsetUTF-8 languagejava % html head title添加书籍/title /head body h1添加书籍/h1 form action${pageContext.request.contextPath}/book/addBook methodpost 书籍名称input typetext namebookName requiredbr/ 书籍数量input typetext namebookCounts requiredbr/ 书籍描述input typetext namedetail requiredbr/ input typesubmit value添加 /form /body /html5.3 执行添加// 添加书籍 RequestMapping(/addBook) public String addBook(Book book) { bookService.addBook(book); return redirect:/book/allBook; }6、SSM 整合修改书籍功能6.1 跳转到修改页面回显数据// 跳转到修改页面 RequestMapping(/toUpdate) public String toUpdate(int id, Model model) { Book book bookService.queryBookById(id); model.addAttribute(book, book); return updateBook; }6.2 修改页面 updateBook.jspjsp% page contentTypetext/html;charsetUTF-8 languagejava % html head title修改书籍/title /head body h1修改书籍/h1 form action${pageContext.request.contextPath}/book/updateBook methodpost input typehidden namebookID value${book.bookID} 书籍名称input typetext namebookName value${book.bookName}br/ 书籍数量input typetext namebookCounts value${book.bookCounts}br/ 书籍描述input typetext namedetail value${book.detail}br/ input typesubmit value修改 /form /body /html6.3 执行修改// 修改书籍 RequestMapping(/updateBook) public String updateBook(Book book) { bookService.updateBook(book); return redirect:/book/allBook; }7、SSM 整合删除书籍功能// 删除书籍 RequestMapping(/deleteBook) public String deleteBook(int id) { bookService.deleteBookById(id); return redirect:/book/allBook; }8、SSM 整合查询书籍模糊搜索8.1 Controller// 模糊查询 RequestMapping(/queryBook) public String queryBook(String queryBookName, Model model) { ListBook bookList bookService.queryBookByName(queryBookName); model.addAttribute(bookList, bookList); return bookList; }8.2 在 bookList.jsp 中添加搜索框jspform action${pageContext.request.contextPath}/book/queryBook methodpost input typetext namequeryBookName placeholder输入书籍名称 input typesubmit value搜索 /form9、IDEA 部署 Tomcat 测试配置 Tomcat 服务器部署项目 war 包启动访问http://localhost:8080/book/allBook

更多文章