引言
- 进行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应用,并且在后续的开发和维护过程中,能够更加方便地处理业务需求和数据库操作。
创建数据库表
- SET NAMES utf8mb4;
- SET FOREIGN_KEY_CHECKS = 0;
-
- -- ----------------------------
- -- Table structure for user
- -- ----------------------------
- DROP TABLE IF EXISTS `user`;
- CREATE TABLE `user` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
- `age` int(11) NULL DEFAULT NULL,
- `gender` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
- PRIMARY KEY (`id`) USING BTREE
- ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-
- SET FOREIGN_KEY_CHECKS = 1;
复制代码 在IEDA中创建Maven Web项目
选择File ---> New ---> Project

选择Maven模板

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

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

修改pom.xml配置,添加Maven依赖
创建IoC 容器 springmvc.xml文件
在src/main/resources文件夹下创建 springmvc.xml文件- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:mvc="http://www.springframework.org/schema/mvc"
- 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">
-
- <mvc:annotation-driven />
-
- <context:component-scan base-package="com.qrj"/>
-
- <mvc:default-servlet-handler />
-
- <mvc:cors>
- <mvc:mapping path="/**" />
- </mvc:cors>
- </beans>
复制代码 创建数据库配置文件database.properties
在src/main/resources文件夹下创建database.properties文件- db.driver=com.mysql.jdbc.Driver
- db.url=jdbc:mysql://localhost:3306/spring_mybatis?useSSL=false
- db.username=root
- db.password=123456
复制代码 创建Spring IoC容器spring-config.xml文件
在src/main/resources文件夹下创建spring-config.xml文件- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:mvc="http://www.springframework.org/schema/mvc"
- 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">
-
- <mvc:annotation-driven />
-
- <context:component-scan base-package="com.qrj"/>
-
- <mvc:default-servlet-handler />
-
- <mvc:cors>
- <mvc:mapping path="/**" />
- </mvc:cors>
- </beans><?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:mvc="http://www.springframework.org/schema/mvc"
- 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">
-
- <mvc:annotation-driven />
-
- <context:component-scan base-package="com.qrj"/>
-
- <mvc:default-servlet-handler />
-
- <mvc:cors>
- <mvc:mapping path="/**" />
- </mvc:cors>
- </beans>
复制代码 创建logback.xml日志配置文件
在src/main/resources文件夹下创建logback.xml文件- 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"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:mvc="http://www.springframework.org/schema/mvc"
- 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">
-
- <mvc:annotation-driven />
-
- <context:component-scan base-package="com.qrj"/>
-
- <mvc:default-servlet-handler />
-
- <mvc:cors>
- <mvc:mapping path="/**" />
- </mvc:cors>
- </beans>
复制代码 修改web.xml文件
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
- version="4.0">
-
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath:spring-config.xml</param-value>
- </context-param>
-
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- <servlet>
- <servlet-name>springmvc</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <init-param>
-
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath:springmvc.xml</param-value>
- </init-param>
-
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>springmvc</servlet-name>
- <url-pattern>/</url-pattern>
- </servlet-mapping>
-
- <filter>
- <filter-name>characterEncodingFilter</filter-name>
- <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
- <init-param>
- <param-name>encoding</param-name>
- <param-value>UTF-8</param-value>
- </init-param>
- <init-param>
- <param-name>forceEncoding</param-name>
- <param-value>true</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>characterEncodingFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- </web-app>
复制代码 创建UserEntity实体类
在src/main/java目录下创建com.qrj.entity包,在包下面创建UserEntity实体类。- package com.qrj.entity;
- import lombok.AllArgsConstructor;
- import lombok.Data;
- import lombok.NoArgsConstructor;
- /**
- * @author: qrj
- * @description 用户实体类
- * @Date: 2023/9/19 14:51
- */
- @Data
- @AllArgsConstructor
- @NoArgsConstructor
- public class UserEntity {
- private Integer id;
- private String name;
- private Integer age;
- private String gender;
- }
复制代码 创建UserDto参数类
在src/main/java目录下创建com.qrj.dto包,在包下面创建UserDto参数类。- package com.qrj.dto;
- import lombok.AllArgsConstructor;
- import lombok.Data;
- import lombok.NoArgsConstructor;
- /**
- * @author: qrj
- * @description 用户参数
- * @Date: 2023/9/19 14:52
- */
- @Data
- @AllArgsConstructor
- @NoArgsConstructor
- public class UserDto {
- private Integer id;
- private String name;
- private Integer age;
- private String gender;
- }
复制代码 创建UserMapper接口
在src/main/java目录下创建com.qrj.dao包,在包下面创建UserMapper接口。- package com.qrj.dao;
- import com.qrj.dto.UserDto;
- import com.qrj.entity.UserEntity;
- import java.util.List;
- /**
- * @author: qrj
- * @description 用户映射接口
- * @Date: 2023/9/19 14:52
- */
- public interface UserMapper {
- void insert(UserDto user);
- List<UserEntity> getList();
- }
复制代码 创建UserMapper.xml映射文件
注意这里创建的UserMapper映射文件要和之前创建的UserMapper接口文件相对应。
在src/main/resources文件夹下创建mapper文件夹,并在mapper文件夹下创建UserMapper.xml映射文件。- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="com.qrj.dao.UserMapper">
- <insert id="insert" parameterType="com.qrj.entity.UserEntity" keyProperty="id" useGeneratedKeys="true">
- INSERT INTO USER ( name, age, gender )
- VALUE
- ( #{name}, #{age} , #{gender} )
- </insert>
- <select id="getList" resultType="com.qrj.entity.UserEntity">
- SELECT
- *
- FROM
- USER;
- </select>
- </mapper>
复制代码 创建ResultVo工具类
在src/main/java目录下创建com.qrj.vo包,在包下面创建ResultVo工具类。
- package com.qrj.vo;
- import lombok.Data;
- import java.io.Serializable;
- /**
- * @author: qrj
- * @description Ajax 请求统一响应工具类
- * @Date: 2023/9/19 14:58
- */
- @Data
- public class ResultVo<T> implements Serializable {
- private static final long serialVersionUID = 1L;
- //状态码
- private int code;
- //状态码描述
- private String message;
- //数据结果,泛型,可以是列表、单个对象、数字、布尔值等
- private T data;
- public ResultVo() {
- }
- public ResultVo(int code, String message) {
- this.code = code;
- this.message = message;
- }
- public static <T> ResultVo<T> success(T data) {
- ResultVo<T> resultVo = new ResultVo<>();
- resultVo.setCode(200);
- resultVo.setMessage("ok");
- resultVo.setData(data);
- return resultVo;
- }
- }
复制代码 创建IUserService接口和UserServiceImpl实现类
在src/main/java目录下创建com.qrj.service包,在包中创建IUserService接口- package com.qrj.service;
- import com.qrj.dto.UserDto;
- import com.qrj.entity.UserEntity;
- import java.util.List;
- /**
- * @author: qrj
- * @description 用户业务接口
- * @Date: 2023/9/19 14:54
- */
- public interface IUserService {
- UserEntity insert(UserDto user);
- List<UserEntity> getList();
- }
复制代码 在com.qrj.service包下创建Impl包,并创建UserServiceImpl实现类- package com.qrj.service.Impl;
- import com.qrj.dao.UserMapper;
- import com.qrj.dto.UserDto;
- import com.qrj.entity.UserEntity;
- import com.qrj.service.IUserService;
- import org.springframework.beans.BeanUtils;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import javax.annotation.Resource;
- import java.util.List;
- /**
- * @author: qrj
- * @description 用户业务实现类
- * @Date: 2023/9/19 14:57
- */
- @Service //控制反转
- public class UserServiceImpl implements IUserService {
- @Resource //依赖注入
- private UserMapper userMapper;
- @Transactional(rollbackFor = Exception.class)
- @Override
- public UserEntity insert(UserDto user) {
- userMapper.insert(user);
- UserEntity userEntity = new UserEntity();
- //BeanUtils用于拷贝对象 参数1:被拷贝的对象 参数2:拷贝对象
- BeanUtils.copyProperties(user,userEntity);
- return userEntity;
- }
- @Transactional
- @Override
- public List<UserEntity> getList() {
- List<UserEntity> list = userMapper.getList();
- return list;
- }
- }
复制代码 创建UserController页面控制器
在src/main/java目录下创建com.qrj.controller包,在包下面创建UserController页面控制器。- package com.qrj.controller;
- import com.qrj.dto.UserDto;
- import com.qrj.entity.UserEntity;
- import com.qrj.service.IUserService;
- import com.qrj.vo.ResultVo;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.PostMapping;
- import org.springframework.web.bind.annotation.RequestBody;
- import org.springframework.web.bind.annotation.RestController;
- import javax.annotation.Resource;
- import java.util.List;
- /**
- * @author: qrj
- * @description 用户页面控制器
- * @Date: 2023/9/19 14:53
- */
- @RestController
- @Slf4j //lombok提供的日志注解
- public class UserController {
- @Resource //使用 @Autowired注解 IDEA不推荐
- private IUserService userService;
- @PostMapping("/user")
- public ResultVo<UserEntity> addUser(@RequestBody UserDto userDto) {
- log.debug(userDto.toString()); //打印调试日志(接收参数)
- UserEntity result = userService.insert(userDto);
- log.debug(result.toString()); //打印调试日志(响应数据)
- return ResultVo.success(result);
- }
- @GetMapping("/users")
- public ResultVo<List<UserEntity>> getUsers() {
- List<UserEntity> list = userService.getList();
- return ResultVo.success(list);
- }
- }
复制代码 启动Tomcat,在Postman下进行接口测试
通过Restful API接口("/user")测试添加用户功能实现

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

以上功能测试完成,至此SSM框架集成成功!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |