• 系列一、Spring + SpringMVC + MyBatis整合


    一、概述

    整合 Spring、SpringMVC、MyBatis

    二、整合步骤

    2.1、pom

    1. org.projectlombok
    2. lombok
    3. 1.18.22
    4. org.slf4j
    5. slf4j-api
    6. 1.7.32
    7. ch.qos.logback
    8. logback-classic
    9. 1.2.10
    10. com.alibaba
    11. fastjson
    12. 1.2.76
    13. org.apache.commons
    14. commons-collections4
    15. 4.3
    16. org.apache.commons
    17. commons-lang3
    18. 3.11
    19. cn.hutool
    20. hutool-all
    21. 5.7.22
    22. com.fasterxml.jackson.core
    23. jackson-databind
    24. 2.12.1
    25. org.apache.logging.log4j
    26. log4j-web
    27. 2.12.1
    28. org.springframework
    29. spring-webmvc
    30. 5.3.4
    31. org.mybatis
    32. mybatis
    33. 3.5.6
    34. org.mybatis
    35. mybatis-spring
    36. 2.0.6
    37. mysql
    38. mysql-connector-java
    39. 8.0.26
    40. org.springframework
    41. spring-jdbc
    42. 5.3.4
    43. org.springframework
    44. spring-aop
    45. 5.3.4
    46. org.springframework
    47. spring-beans
    48. 5.3.4
    49. org.springframework
    50. spring-context
    51. 5.3.4
    52. org.springframework
    53. spring-core
    54. 5.3.4
    55. org.springframework
    56. spring-expression
    57. 5.3.4
    58. org.springframework
    59. spring-tx
    60. 5.3.4
    61. cglib
    62. cglib
    63. 3.1
    64. aopalliance
    65. aopalliance
    66. 1.0
    67. org.aspectj
    68. aspectjweaver
    69. 1.9.19
    70. src/main/java
    71. **/*.xml
    72. src/main/resources
    73. org.apache.maven.plugins
    74. maven-compiler-plugin
    75. 3.10.1
    76. 8
    77. 8

    2.2、db.properties

    1. db.driver=com.mysql.cj.jdbc.Driver
    2. db.url=jdbc:mysql://localhost:3306/20231106_ssm?useSSL=false&useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT
    3. db.username=root
    4. db.password=123456

    2.3、init.sql

    1. drop DATABASE if EXISTS 20231106_ssm;
    2. create DATABASE 20231106_ssm;
    3. use 20231106_ssm;
    4. CREATE TABLE `user` (
    5. `id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
    6. `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户名',
    7. `password` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '密码',
    8. `age` int NULL DEFAULT NULL COMMENT '年龄',
    9. PRIMARY KEY (`id`) USING BTREE
    10. ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
    11. INSERT INTO `user` VALUES (1, 'zhangsan', 'zhangsan123', 23);
    12. INSERT INTO `user` VALUES (2, 'lisi', 'lisi123', 24);

    2.4、applicationContext.xml

    1. "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:tx="http://www.springframework.org/schema/tx"
    6. xmlns:aop="http://www.springframework.org/schema/aop"
    7. 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/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd">
    8. <context:property-placeholder location="classpath:db.properties"/>
    9. <context:component-scan base-package="org.star" use-default-filters="true">
    10. <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    11. context:component-scan>
    12. <bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource">
    13. <property name="driverClassName" value="${db.driver}"/>
    14. <property name="url" value="${db.url}"/>
    15. <property name="username" value="${db.username}"/>
    16. <property name="password" value="${db.password}"/>
    17. bean>
    18. <bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactoryBean">
    19. <property name="dataSource" ref="dataSource"/>
    20. <property name="typeAliasesPackage" value="org.star.entity.model"/>
    21. <property name="configuration">
    22. <bean class="org.apache.ibatis.session.Configuration">
    23. <property name="logImpl" value="org.apache.ibatis.logging.stdout.StdOutImpl">property>
    24. <property name="cacheEnabled" value="true">property>
    25. bean>
    26. property>
    27. <property name="mapperLocations" value="classpath:mappers/*.xml"/>
    28. bean>
    29. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" id="mapperScannerConfigurer">
    30. <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"/>
    31. <property name="basePackage" value="org.star.mapper"/>
    32. bean>
    33. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    34. <property name="dataSource" ref="dataSource">property>
    35. bean>
    36. <tx:advice id="txAdvice" transaction-manager="transactionManager">
    37. <tx:attributes>
    38. <tx:method name="*" propagation="REQUIRED" isolation="DEFAULT"/>
    39. tx:attributes>
    40. tx:advice>
    41. <aop:config>
    42. <aop:pointcut id="txPointCut" expression="execution(* org.star.service.UserService.*(..))"/>
    43. <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut">aop:advisor>
    44. aop:config>
    45. beans>

    2.5、dispatcherServlet.xml

    1. "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 http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
    7. <context:component-scan base-package="org.star" use-default-filters="false">
    8. <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    9. context:component-scan>
    10. <mvc:annotation-driven/>
    11. beans>

    2.6、web.xml

    1. "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. <context-param>
    7. <param-name>contextConfigLocationparam-name>
    8. <param-value>classpath:applicationContext.xmlparam-value>
    9. context-param>
    10. <listener>
    11. <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
    12. listener>
    13. <servlet>
    14. <servlet-name>springmvcservlet-name>
    15. <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
    16. <init-param>
    17. <param-name>contextConfigLocationparam-name>
    18. <param-value>classpath:dispatcherServlet.xmlparam-value>
    19. init-param>
    20. servlet>
    21. <servlet-mapping>
    22. <servlet-name>springmvcservlet-name>
    23. <url-pattern>/url-pattern>
    24. servlet-mapping>
    25. <filter>
    26. <filter-name>encodingFilterfilter-name>
    27. <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
    28. <init-param>
    29. <param-name>encodingparam-name>
    30. <param-value>UTF-8param-value>
    31. init-param>
    32. <init-param>
    33. <param-name>forceRequestEncodingparam-name>
    34. <param-value>trueparam-value>
    35. init-param>
    36. <init-param>
    37. <param-name>forceResponseEncodingparam-name>
    38. <param-value>trueparam-value>
    39. init-param>
    40. filter>
    41. <filter-mapping>
    42. <filter-name>encodingFilterfilter-name>
    43. <url-pattern>/*url-pattern>
    44. filter-mapping>
    45. web-app>

    2.7、UserDO

    1. /**
    2. * @Author : 一叶浮萍归大海
    3. * @Date: 2023/11/6 11:34
    4. * @Description:
    5. */
    6. @Data
    7. @AllArgsConstructor
    8. @NoArgsConstructor
    9. @Accessors(chain = true)
    10. @ToString(callSuper = true)
    11. public class UserDO implements Serializable {
    12. /**
    13. * 编号
    14. */
    15. private Integer id;
    16. /**
    17. * 用户名
    18. */
    19. private String username;
    20. /**
    21. * 密码
    22. */
    23. private String password;
    24. /**
    25. * 年龄
    26. */
    27. private Integer age;
    28. }

    2.8、UserMappper

    1. /**
    2. * @Author : 一叶浮萍归大海
    3. * @Date: 2023/11/6 11:35
    4. * @Description:
    5. */
    6. public interface UserMapper {
    7. /**
    8. * 添加用户
    9. * @param param
    10. */
    11. void saveUser(UserDO param);
    12. /**
    13. * 查询所有的用户
    14. * @return
    15. */
    16. List listAllUser();
    17. /**
    18. * 根据id查询用户
    19. * @param id
    20. * @return
    21. */
    22. UserDO getUserById(Integer id);
    23. }

    2.9、UserMapper.xml

    1. mapper
    2. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    4. <mapper namespace="org.star.mapper.UserMapper">
    5. <insert id="saveUser">
    6. insert into `user`(username,password,age) values (#{username},#{password},#{age})
    7. insert>
    8. <select id="listAllUser" resultType="userDO">
    9. select * from `user`
    10. select>
    11. <select id="getUserById" resultType="userDO">
    12. select * from `user` where id = #{id}
    13. select>
    14. mapper>

    2.10、UserService

    1. /**
    2. * @Author : 一叶浮萍归大海
    3. * @Date: 2023/11/6 11:36
    4. * @Description:
    5. */
    6. @Service
    7. public class UserService {
    8. @Autowired
    9. private UserMapper userMapper;
    10. @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
    11. public List listAllUser() {
    12. return userMapper.listAllUser();
    13. }
    14. public void saveUser(UserDO param) {
    15. userMapper.saveUser(param);
    16. }
    17. /**
    18. * 不加此注解的话,将会执行多次数据库查询
    19. * 参考:https://blog.51cto.com/u_15942107/6019692
    20. * @param id
    21. * @return
    22. */
    23. @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
    24. public UserDO getUserById(Integer id) {
    25. UserDO u1 = userMapper.getUserById(id);
    26. UserDO u2 = userMapper.getUserById(id);
    27. UserDO u3 = userMapper.getUserById(id);
    28. System.out.println(u1);
    29. System.out.println(u2);
    30. System.out.println(u3);
    31. return userMapper.getUserById(id);
    32. }
    33. }

    2.11、UserController

    1. @Slf4j
    2. @RestController
    3. public class UserController {
    4. @Autowired
    5. private UserService userService;
    6. @PostMapping("/saveUser")
    7. public String saveUser(@RequestBody UserDO param) {
    8. log.info("UserController saveUser param:{}", param);
    9. userService.saveUser(param);
    10. return "SUCCESS";
    11. }
    12. @GetMapping("/listAllUser")
    13. public List listAllUser() {
    14. log.info("=================>listAllUser");
    15. return userService.listAllUser();
    16. }
    17. @GetMapping("/getUserById/{id}")
    18. public UserDO getUserById(@PathVariable("id") Integer id) {
    19. log.info("=================>getUserById id:{}",id);
    20. return userService.getUserById(id);
    21. }
    22. }

    三、测试

    http://localhost:8080/listAllUser

    四、项目结构

  • 相关阅读:
    Qt 天气预报程序解析
    Express的基本使用app.post()app.get()res.send()
    学生个人单页面网页作业 学生网页设计成品 静态HTML网页单页制作 dreamweaver网页设计与制作代码 web前端期末大作业
    B站每日自动签到&传统单节点网站的 Serverless 上云
    C#通过FTP与异构系统实现业务接口
    [入门到吐槽系列] Webix 10分钟入门 一 管理后台制作
    three.js调试工具dat.gui使用
    目标检测YOLO实战应用案例100讲-基于YOLOv5的航拍图像旋转目标检测
    《计算机体系结构量化研究方法第六版》1.2 计算机的分类
    【计算机系统结构】指令级高度并行的超级计算机
  • 原文地址:https://blog.csdn.net/HelloWorld20161112/article/details/134247298