SSM(Spring+SpringMVC+MyBatis)框架集成

打印 上一主题 下一主题

主题 933|帖子 933|积分 2799

引言


  • 进行SSM(Spring+SpringMVC+MyBatis)集成的主要原因是为了提高开发效率和代码可维护性。SSM是一套非常流行的Java Web开发框架,它集成了Spring框架、SpringMVC框架和MyBatis框架,各自发挥优势,形成了一个完整的开发框架。
  • 首先,使用Spring框架可以实现组件的解耦和依赖注入,通过配置文件进行Bean的管理和控制反转(IoC),从而提供了良好的扩展性和灵活性。Spring提供了事务管理、AOP(面向切面编程)等功能,使得开发者可以更加方便地进行业务逻辑的编写和管理。
  • 其次,SpringMVC框架是一种基于MVC(Model-View-Controller)模式的Web框架,它通过DispatcherServlet来统一管理请求和响应。SpringMVC提供了请求处理的注解方式,可以简化开发流程,同时具备良好的可扩展性和灵活性。开发者可以通过配置文件进行路由、参数绑定、数据校验等操作,从而编写出结构清晰、易于维护的代码。
  • 最后,MyBatis是一款优秀的持久层框架,它通过XML文件或注解来实现数据库操作的映射,具有简单易用、性能高效等特点。MyBatis提供了丰富的CRUD(增删改查)操作和事务管理功能,开发者可以灵活地编写数据库相关的代码。
综上所述,SSM集成可以充分发挥各个框架的优势,提供了一种高效、灵活、易于维护的开发方式,使得Java Web开发更加方便和高效。通过SSM的集成,开发者可以快速搭建起一个稳定可靠的Web应用,并且在后续的开发和维护过程中,能够更加方便地处理业务需求和数据库操作。
创建数据库表
  1. SET NAMES utf8mb4;
  2. SET FOREIGN_KEY_CHECKS = 0;
  3. -- ----------------------------
  4. -- Table structure for user
  5. -- ----------------------------
  6. DROP TABLE IF EXISTS `user`;
  7. CREATE TABLE `user`  (
  8.   `id` int(11) NOT NULL AUTO_INCREMENT,
  9.   `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  10.   `age` int(11) NULL DEFAULT NULL,
  11.   `gender` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  12.   PRIMARY KEY (`id`) USING BTREE
  13. ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
  14. SET FOREIGN_KEY_CHECKS = 1;
复制代码
在IEDA中创建Maven Web项目

选择File ---> New ---> Project

选择Maven模板

填写项目的基本信息 ---> Next

配置自己的Maven环境 ---> Finish

修改pom.xml配置,添加Maven依赖
  1. <properties>
  2.     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  3.     <maven.compiler.source>8</maven.compiler.source>
  4.     <maven.compiler.target>8</maven.compiler.target>
  5.     <spring.version>5.3.6</spring.version>
  6.   </properties>
  7.   <dependencies>
  8.    
  9.     <dependency>
  10.       <groupId>org.springframework</groupId>
  11.       <artifactId>spring-webmvc</artifactId>
  12.       <version>${spring.version}</version>
  13.     </dependency>
  14.     <dependency>
  15.       <groupId>org.springframework</groupId>
  16.       <artifactId>spring-jdbc</artifactId>
  17.       <version>${spring.version}</version>
  18.     </dependency>
  19.     <dependency>
  20.       <groupId>org.projectlombok</groupId>
  21.       <artifactId>lombok</artifactId>
  22.       <version>1.16.18</version>
  23.     </dependency>
  24.    
  25.     <dependency>
  26.       <groupId>javax.servlet</groupId>
  27.       <artifactId>jstl</artifactId>
  28.       <version>1.2</version>
  29.       <scope>runtime</scope>
  30.     </dependency>
  31.     <dependency>
  32.       <groupId>taglibs</groupId>
  33.       <artifactId>standard</artifactId>
  34.       <version>1.1.2</version>
  35.     </dependency>
  36.    
  37.     <dependency>
  38.       <groupId>javax.validation</groupId>
  39.       <artifactId>validation-api</artifactId>
  40.       <version>2.0.1.Final</version>
  41.     </dependency>
  42.     <dependency>
  43.       <groupId>org.hibernate.validator</groupId>
  44.       <artifactId>hibernate-validator</artifactId>
  45.       <version>6.0.16.Final</version>
  46.     </dependency>
  47.    
  48.     <dependency>
  49.       <groupId>commons-fileupload</groupId>
  50.       <artifactId>commons-fileupload</artifactId>
  51.       <version>1.4</version>
  52.     </dependency>
  53.     <dependency>
  54.       <groupId>commons-io</groupId>
  55.       <artifactId>commons-io</artifactId>
  56.       <version>2.6</version>
  57.     </dependency>
  58.    
  59.     <dependency>
  60.       <groupId>com.fasterxml.jackson.core</groupId>
  61.       <artifactId>jackson-core</artifactId>
  62.       <version>2.11.4</version>
  63.     </dependency>
  64.     <dependency>
  65.       <groupId>com.fasterxml.jackson.core</groupId>
  66.       <artifactId>jackson-databind</artifactId>
  67.       <version>2.11.4</version>
  68.     </dependency>
  69.    
  70.     <dependency>
  71.       <groupId>org.mybatis</groupId>
  72.       <artifactId>mybatis</artifactId>
  73.       <version>3.5.5</version>
  74.     </dependency>
  75.     <dependency>
  76.       <groupId>org.mybatis</groupId>
  77.       <artifactId>mybatis-spring</artifactId>
  78.       <version>2.0.5</version>
  79.     </dependency>
  80.    
  81.     <dependency>
  82.       <groupId>mysql</groupId>
  83.       <artifactId>mysql-connector-java</artifactId>
  84.       <version>5.1.47</version>
  85.     </dependency>
  86.    
  87.     <dependency>
  88.       <groupId>org.slf4j</groupId>
  89.       <artifactId>slf4j-api</artifactId>
  90.       <version>1.7.25</version>
  91.     </dependency>
  92.    
  93.     <dependency>
  94.       <groupId>ch.qos.logback</groupId>
  95.       <artifactId>logback-classic</artifactId>
  96.       <version>1.2.3</version>
  97.     </dependency>
  98.   </dependencies>
复制代码
创建IoC 容器 springmvc.xml文件

在src/main/resources文件夹下创建 springmvc.xml文件
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.        xmlns:context="http://www.springframework.org/schema/context"
  5.        xmlns:mvc="http://www.springframework.org/schema/mvc"
  6.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://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">
  7.    
  8.     <mvc:annotation-driven />
  9.    
  10.     <context:component-scan base-package="com.qrj"/>
  11.    
  12.     <mvc:default-servlet-handler />
  13.    
  14.     <mvc:cors>
  15.         <mvc:mapping path="/**" />
  16.     </mvc:cors>
  17. </beans>
复制代码
创建数据库配置文件database.properties

在src/main/resources文件夹下创建database.properties文件
  1. db.driver=com.mysql.jdbc.Driver
  2. db.url=jdbc:mysql://localhost:3306/spring_mybatis?useSSL=false
  3. db.username=root
  4. db.password=123456
复制代码
创建Spring IoC容器spring-config.xml文件

在src/main/resources文件夹下创建spring-config.xml文件
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.        xmlns:context="http://www.springframework.org/schema/context"
  5.        xmlns:mvc="http://www.springframework.org/schema/mvc"
  6.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://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">
  7.    
  8.     <mvc:annotation-driven />
  9.    
  10.     <context:component-scan base-package="com.qrj"/>
  11.    
  12.     <mvc:default-servlet-handler />
  13.    
  14.     <mvc:cors>
  15.         <mvc:mapping path="/**" />
  16.     </mvc:cors>
  17. </beans><?xml version="1.0" encoding="UTF-8"?>
  18. <beans xmlns="http://www.springframework.org/schema/beans"
  19.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  20.        xmlns:context="http://www.springframework.org/schema/context"
  21.        xmlns:mvc="http://www.springframework.org/schema/mvc"
  22.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://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">
  23.    
  24.     <mvc:annotation-driven />
  25.    
  26.     <context:component-scan base-package="com.qrj"/>
  27.    
  28.     <mvc:default-servlet-handler />
  29.    
  30.     <mvc:cors>
  31.         <mvc:mapping path="/**" />
  32.     </mvc:cors>
  33. </beans>                                
复制代码
创建logback.xml日志配置文件

在src/main/resources文件夹下创建logback.xml文件
  1.     logback                                DEBUG                            %d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n                                        ${log.path}                    ${log.path}.%d{yyyy-MM-dd}.zip                            %date %level [%thread] %logger{36} [%file : %line] %msg%n<?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.        xmlns:context="http://www.springframework.org/schema/context"
  5.        xmlns:mvc="http://www.springframework.org/schema/mvc"
  6.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://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">
  7.    
  8.     <mvc:annotation-driven />
  9.    
  10.     <context:component-scan base-package="com.qrj"/>
  11.    
  12.     <mvc:default-servlet-handler />
  13.    
  14.     <mvc:cors>
  15.         <mvc:mapping path="/**" />
  16.     </mvc:cors>
  17. </beans>               
复制代码
修改web.xml文件
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5.          version="4.0">
  6.   
  7.   <context-param>
  8.     <param-name>contextConfigLocation</param-name>
  9.     <param-value>classpath:spring-config.xml</param-value>
  10.   </context-param>
  11.   
  12.   <listener>
  13.     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  14.   </listener>
  15.   <servlet>
  16.     <servlet-name>springmvc</servlet-name>
  17.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  18.     <init-param>
  19.       
  20.       <param-name>contextConfigLocation</param-name>
  21.       <param-value>classpath:springmvc.xml</param-value>
  22.     </init-param>
  23.    
  24.     <load-on-startup>1</load-on-startup>
  25.   </servlet>
  26.   <servlet-mapping>
  27.     <servlet-name>springmvc</servlet-name>
  28.     <url-pattern>/</url-pattern>
  29.   </servlet-mapping>
  30.   
  31.   <filter>
  32.     <filter-name>characterEncodingFilter</filter-name>
  33.     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  34.     <init-param>
  35.       <param-name>encoding</param-name>
  36.       <param-value>UTF-8</param-value>
  37.     </init-param>
  38.     <init-param>
  39.       <param-name>forceEncoding</param-name>
  40.       <param-value>true</param-value>
  41.     </init-param>
  42.   </filter>
  43.   <filter-mapping>
  44.     <filter-name>characterEncodingFilter</filter-name>
  45.     <url-pattern>/*</url-pattern>
  46.   </filter-mapping>
  47. </web-app>
复制代码
创建UserEntity实体类

在src/main/java目录下创建com.qrj.entity包,在包下面创建UserEntity实体类。
  1. package com.qrj.entity;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.NoArgsConstructor;
  5. /**
  6. * @author: qrj
  7. * @description 用户实体类
  8. * @Date: 2023/9/19 14:51
  9. */
  10. @Data
  11. @AllArgsConstructor
  12. @NoArgsConstructor
  13. public class UserEntity {
  14.     private Integer id;
  15.     private String name;
  16.     private Integer age;
  17.     private String gender;
  18. }
复制代码
创建UserDto参数类

在src/main/java目录下创建com.qrj.dto包,在包下面创建UserDto参数类。
  1. package com.qrj.dto;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.NoArgsConstructor;
  5. /**
  6. * @author: qrj
  7. * @description 用户参数
  8. * @Date: 2023/9/19 14:52
  9. */
  10. @Data
  11. @AllArgsConstructor
  12. @NoArgsConstructor
  13. public class UserDto {
  14.     private Integer id;
  15.     private String name;
  16.     private Integer age;
  17.     private String gender;
  18. }
复制代码
创建UserMapper接口

在src/main/java目录下创建com.qrj.dao包,在包下面创建UserMapper接口。
  1. package com.qrj.dao;
  2. import com.qrj.dto.UserDto;
  3. import com.qrj.entity.UserEntity;
  4. import java.util.List;
  5. /**
  6. * @author: qrj
  7. * @description 用户映射接口
  8. * @Date: 2023/9/19 14:52
  9. */
  10. public interface UserMapper {
  11.     void insert(UserDto user);
  12.     List<UserEntity> getList();
  13. }
复制代码
创建UserMapper.xml映射文件

注意这里创建的UserMapper映射文件要和之前创建的UserMapper接口文件相对应。
在src/main/resources文件夹下创建mapper文件夹,并在mapper文件夹下创建UserMapper.xml映射文件。
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3.         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4. <mapper namespace="com.qrj.dao.UserMapper">
  5.     <insert id="insert" parameterType="com.qrj.entity.UserEntity" keyProperty="id" useGeneratedKeys="true">
  6.         INSERT INTO USER ( name, age, gender )
  7.             VALUE
  8.             ( #{name}, #{age} , #{gender} )
  9.     </insert>
  10.     <select id="getList" resultType="com.qrj.entity.UserEntity">
  11.         SELECT
  12.             *
  13.         FROM
  14.             USER;
  15.     </select>
  16. </mapper>
复制代码
创建ResultVo工具类

在src/main/java目录下创建com.qrj.vo包,在包下面创建ResultVo工具类。
 
  1. package com.qrj.vo;
  2. import lombok.Data;
  3. import java.io.Serializable;
  4. /**
  5. * @author: qrj
  6. * @description Ajax 请求统一响应工具类
  7. * @Date: 2023/9/19 14:58
  8. */
  9. @Data
  10. public class ResultVo<T> implements Serializable {
  11.     private static final long serialVersionUID = 1L;
  12.     //状态码
  13.     private int code;
  14.     //状态码描述
  15.     private String message;
  16.     //数据结果,泛型,可以是列表、单个对象、数字、布尔值等
  17.     private T data;
  18.     public ResultVo() {
  19.     }
  20.     public ResultVo(int code, String message) {
  21.         this.code = code;
  22.         this.message = message;
  23.     }
  24.     public static <T> ResultVo<T> success(T data) {
  25.         ResultVo<T> resultVo = new ResultVo<>();
  26.         resultVo.setCode(200);
  27.         resultVo.setMessage("ok");
  28.         resultVo.setData(data);
  29.         return  resultVo;
  30.     }
  31. }
复制代码
创建IUserService接口和UserServiceImpl实现类

在src/main/java目录下创建com.qrj.service包,在包中创建IUserService接口
  1. package com.qrj.service;
  2. import com.qrj.dto.UserDto;
  3. import com.qrj.entity.UserEntity;
  4. import java.util.List;
  5. /**
  6. * @author: qrj
  7. * @description 用户业务接口
  8. * @Date: 2023/9/19 14:54
  9. */
  10. public interface IUserService {
  11.     UserEntity insert(UserDto user);
  12.     List<UserEntity> getList();
  13. }
复制代码
在com.qrj.service包下创建Impl包,并创建UserServiceImpl实现类
  1. package com.qrj.service.Impl;
  2. import com.qrj.dao.UserMapper;
  3. import com.qrj.dto.UserDto;
  4. import com.qrj.entity.UserEntity;
  5. import com.qrj.service.IUserService;
  6. import org.springframework.beans.BeanUtils;
  7. import org.springframework.stereotype.Service;
  8. import org.springframework.transaction.annotation.Transactional;
  9. import javax.annotation.Resource;
  10. import java.util.List;
  11. /**
  12. * @author: qrj
  13. * @description 用户业务实现类
  14. * @Date: 2023/9/19 14:57
  15. */
  16. @Service //控制反转
  17. public class UserServiceImpl implements IUserService {
  18.     @Resource //依赖注入
  19.     private UserMapper userMapper;
  20.     @Transactional(rollbackFor = Exception.class)
  21.     @Override
  22.     public UserEntity insert(UserDto user) {
  23.         userMapper.insert(user);
  24.         UserEntity userEntity = new UserEntity();
  25.         //BeanUtils用于拷贝对象 参数1:被拷贝的对象 参数2:拷贝对象
  26.         BeanUtils.copyProperties(user,userEntity);
  27.         return userEntity;
  28.     }
  29.     @Transactional
  30.     @Override
  31.     public List<UserEntity> getList() {
  32.         List<UserEntity> list = userMapper.getList();
  33.         return list;
  34.     }
  35. }
复制代码
创建UserController页面控制器

在src/main/java目录下创建com.qrj.controller包,在包下面创建UserController页面控制器。
  1. package com.qrj.controller;
  2. import com.qrj.dto.UserDto;
  3. import com.qrj.entity.UserEntity;
  4. import com.qrj.service.IUserService;
  5. import com.qrj.vo.ResultVo;
  6. import lombok.extern.slf4j.Slf4j;
  7. import org.springframework.web.bind.annotation.GetMapping;
  8. import org.springframework.web.bind.annotation.PostMapping;
  9. import org.springframework.web.bind.annotation.RequestBody;
  10. import org.springframework.web.bind.annotation.RestController;
  11. import javax.annotation.Resource;
  12. import java.util.List;
  13. /**
  14. * @author: qrj
  15. * @description 用户页面控制器
  16. * @Date: 2023/9/19 14:53
  17. */
  18. @RestController
  19. @Slf4j //lombok提供的日志注解
  20. public class UserController {
  21.     @Resource //使用 @Autowired注解 IDEA不推荐
  22.     private IUserService userService;
  23.     @PostMapping("/user")
  24.     public ResultVo<UserEntity> addUser(@RequestBody UserDto userDto) {
  25.         log.debug(userDto.toString()); //打印调试日志(接收参数)
  26.         UserEntity result = userService.insert(userDto);
  27.         log.debug(result.toString()); //打印调试日志(响应数据)
  28.         return ResultVo.success(result);
  29.     }
  30.     @GetMapping("/users")
  31.     public ResultVo<List<UserEntity>> getUsers() {
  32.         List<UserEntity> list = userService.getList();
  33.         return ResultVo.success(list);
  34.     }
  35. }
复制代码
启动Tomcat,在Postman下进行接口测试

通过Restful API接口("/user")测试添加用户功能实现

通过Restful API接口("/users")测试查找所有用户功能实现

以上功能测试完成,至此SSM框架集成成功!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81429

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表