1.创建SSM-Parent父项目

修改配置文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>com.qbb</groupId>
  7. <artifactId>ssm-parent</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. <packaging>pom</packaging>
  10. <!--依赖版本-->
  11. <properties>
  12. <maven.compiler.source>8</maven.compiler.source>
  13. <maven.compiler.target>8</maven.compiler.target>
  14. <servlet.version>4.0.1</servlet.version>
  15. <jsp.version>2.3.3</jsp.version>
  16. <thymeleaf.version>3.0.12.RELEASE</thymeleaf.version>
  17. <spring.version>5.3.9</spring.version>
  18. <lombok.version>1.18.20</lombok.version>
  19. <slf4j.version>1.7.30</slf4j.version>
  20. <logback.version>1.2.5</logback.version>
  21. <hibernate-validator.version>7.0.1.Final</hibernate-validator.version>
  22. <fileupload.version>1.4</fileupload.version>
  23. <mybatis-spring.version>2.0.6</mybatis-spring.version>
  24. <druid.version>1.2.6</druid.version>
  25. <mybatis.version>3.5.7</mybatis.version>
  26. <mysql.version>5.1.48</mysql.version>
  27. <pagehelper.version>5.2.1</pagehelper.version>
  28. <junit.version>4.13.2</junit.version>
  29. </properties>
  30. <!--依赖版本锁定-->
  31. <dependencyManagement>
  32. <dependencies>
  33. <!--junit-->
  34. <dependency>
  35. <groupId>junit</groupId>
  36. <artifactId>junit</artifactId>
  37. <version>${junit.version}</version>
  38. <scope>test</scope>
  39. </dependency>
  40. <!--spring依赖-->
  41. <dependency>
  42. <groupId>org.springframework</groupId>
  43. <artifactId>spring-context</artifactId>
  44. <version>${spring.version}</version>
  45. </dependency>
  46. <!--spring-core-->
  47. <dependency>
  48. <groupId>org.springframework</groupId>
  49. <artifactId>spring-core</artifactId>
  50. <version>${spring.version}</version>
  51. </dependency>
  52. <!--expression-->
  53. <dependency>
  54. <groupId>org.springframework</groupId>
  55. <artifactId>spring-expression</artifactId>
  56. <version>${spring.version}</version>
  57. </dependency>
  58. <!--spring-beans-->
  59. <dependency>
  60. <groupId>org.springframework</groupId>
  61. <artifactId>spring-beans</artifactId>
  62. <version>${spring.version}</version>
  63. </dependency>
  64. <!--spring-jcl-->
  65. <dependency>
  66. <groupId>org.springframework</groupId>
  67. <artifactId>spring-jcl</artifactId>
  68. <version>${spring.version}</version>
  69. </dependency>
  70. <!--spring-aop-->
  71. <dependency>
  72. <groupId>org.springframework</groupId>
  73. <artifactId>spring-aop</artifactId>
  74. <version>${spring.version}</version>
  75. </dependency>
  76. <!--spring-aspects-->
  77. <dependency>
  78. <groupId>org.springframework</groupId>
  79. <artifactId>spring-aspects</artifactId>
  80. <version>${spring.version}</version>
  81. </dependency>
  82. <!--spring-tx-->
  83. <dependency>
  84. <groupId>org.springframework</groupId>
  85. <artifactId>spring-tx</artifactId>
  86. <version>${spring.version}</version>
  87. </dependency>
  88. <!--spring-jdbc-->
  89. <dependency>
  90. <groupId>org.springframework</groupId>
  91. <artifactId>spring-jdbc</artifactId>
  92. <version>${spring.version}</version>
  93. </dependency>
  94. <!--spring-test-->
  95. <dependency>
  96. <groupId>org.springframework</groupId>
  97. <artifactId>spring-test</artifactId>
  98. <version>${spring.version}</version>
  99. </dependency>
  100. <!--spring-webmvc-->
  101. <dependency>
  102. <groupId>org.springframework</groupId>
  103. <artifactId>spring-webmvc</artifactId>
  104. <version>${spring.version}</version>
  105. </dependency>
  106. <!--spring-web-->
  107. <dependency>
  108. <groupId>org.springframework</groupId>
  109. <artifactId>spring-web</artifactId>
  110. <version>${spring.version}</version>
  111. </dependency>
  112. <!--commons-fileupload 文件上传-->
  113. <dependency>
  114. <groupId>commons-fileupload</groupId>
  115. <artifactId>commons-fileupload</artifactId>
  116. <version>${fileupload.version}</version>
  117. </dependency>
  118. <!--数据校验-->
  119. <dependency>
  120. <groupId>org.hibernate.validator</groupId>
  121. <artifactId>hibernate-validator</artifactId>
  122. <version>${hibernate-validator.version}</version>
  123. </dependency>
  124. <!--javax.servlet-api-->
  125. <dependency>
  126. <groupId>javax.servlet</groupId>
  127. <artifactId>javax.servlet-api</artifactId>
  128. <version>${servlet.version}</version>
  129. </dependency>
  130. <dependency>
  131. <groupId>javax.servlet.jsp</groupId>
  132. <artifactId>javax.servlet.jsp-api</artifactId>
  133. <version>${jsp.version}</version>
  134. </dependency>
  135. <dependency>
  136. <groupId>org.thymeleaf</groupId>
  137. <artifactId>thymeleaf-spring5</artifactId>
  138. <version>${thymeleaf.version}</version>
  139. </dependency>
  140. <!--数据库依赖-->
  141. <dependency>
  142. <groupId>org.mybatis</groupId>
  143. <artifactId>mybatis-spring</artifactId>
  144. <version>${mybatis-spring.version}</version>
  145. </dependency>
  146. <!--mybatis-->
  147. <dependency>
  148. <groupId>org.mybatis</groupId>
  149. <artifactId>mybatis</artifactId>
  150. <version>${mybatis.version}</version>
  151. </dependency>
  152. <!--数据源-->
  153. <dependency>
  154. <groupId>com.alibaba</groupId>
  155. <artifactId>druid</artifactId>
  156. <version>${druid.version}</version>
  157. </dependency>
  158. <!--数据库驱动-->
  159. <dependency>
  160. <groupId>mysql</groupId>
  161. <artifactId>mysql-connector-java</artifactId>
  162. <version>${mysql.version}</version>
  163. </dependency>
  164. <!--分页插件-->
  165. <dependency>
  166. <groupId>com.github.pagehelper</groupId>
  167. <artifactId>pagehelper</artifactId>
  168. <version>${pagehelper.version}</version>
  169. </dependency>
  170. <!--pojo依赖-->
  171. <dependency>
  172. <groupId>org.projectlombok</groupId>
  173. <artifactId>lombok</artifactId>
  174. <version>${lombok.version}</version>
  175. </dependency>
  176. <!--日志依赖-->
  177. <dependency>
  178. <groupId>org.slf4j</groupId>
  179. <artifactId>slf4j-api</artifactId>
  180. <version>${slf4j.version}</version>
  181. </dependency>
  182. <dependency>
  183. <groupId>ch.qos.logback</groupId>
  184. <artifactId>logback-classic</artifactId>
  185. <version>${logback.version}</version>
  186. </dependency>
  187. </dependencies>
  188. </dependencyManagement>
  189. </project>

2.创建SSM-entity模块

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>ssm-parent</artifactId>
  7. <groupId>com.qbb</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <groupId>com.qbb</groupId>
  12. <artifactId>ssm-entity</artifactId>
  13. <dependencies>
  14. <!--entity依赖-->
  15. <dependency>
  16. <groupId>org.projectlombok</groupId>
  17. <artifactId>lombok</artifactId>
  18. </dependency>
  19. </dependencies>
  20. </project>

创建数据库

  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 COMMENT '主键ID',
  9. `username` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名',
  10. `password` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '密码',
  11. PRIMARY KEY (`id`) USING BTREE
  12. ) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户表' ROW_FORMAT = Compact;
  13. -- ----------------------------
  14. -- Records of user
  15. -- ----------------------------
  16. INSERT INTO `user` VALUES (1, 'zs', '123');
  17. SET FOREIGN_KEY_CHECKS = 1;

创建实体类User

  1. package com.qbb.ssm.entity;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.NoArgsConstructor;
  5. /**
  6. * @author QiuQiu&LL (博客:https://www.cnblogs.com/qbbit)
  7. * @version 1.0
  8. * @date 2022-03-04 17:09
  9. * @Description:
  10. */
  11. @Data
  12. @AllArgsConstructor
  13. @NoArgsConstructor
  14. public class User {
  15. private Integer id;
  16. private String username;
  17. private String password;
  18. }

3.创建ssm-mapper模块

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>ssm-parent</artifactId>
  7. <groupId>com.qbb</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <groupId>com.qbb</groupId>
  12. <artifactId>ssm-mapper</artifactId>
  13. <dependencies>
  14. <!--ssm-entity-->
  15. <dependency>
  16. <groupId>com.qbb</groupId>
  17. <artifactId>ssm-entity</artifactId>
  18. <version>1.0-SNAPSHOT</version>
  19. </dependency>
  20. <dependency>
  21. <groupId>junit</groupId>
  22. <artifactId>junit</artifactId>
  23. <scope>test</scope>
  24. </dependency>
  25. <!--spring依赖-->
  26. <dependency>
  27. <groupId>org.springframework</groupId>
  28. <artifactId>spring-context</artifactId>
  29. </dependency>
  30. <dependency>
  31. <groupId>org.springframework</groupId>
  32. <artifactId>spring-core</artifactId>
  33. </dependency>
  34. <dependency>
  35. <groupId>org.springframework</groupId>
  36. <artifactId>spring-expression</artifactId>
  37. </dependency>
  38. <dependency>
  39. <groupId>org.springframework</groupId>
  40. <artifactId>spring-beans</artifactId>
  41. </dependency>
  42. <dependency>
  43. <groupId>org.springframework</groupId>
  44. <artifactId>spring-jcl</artifactId>
  45. </dependency>
  46. <dependency>
  47. <groupId>org.springframework</groupId>
  48. <artifactId>spring-aop</artifactId>
  49. </dependency>
  50. <dependency>
  51. <groupId>org.springframework</groupId>
  52. <artifactId>spring-aspects</artifactId>
  53. </dependency>
  54. <dependency>
  55. <groupId>org.springframework</groupId>
  56. <artifactId>spring-tx</artifactId>
  57. </dependency>
  58. <dependency>
  59. <groupId>org.springframework</groupId>
  60. <artifactId>spring-jdbc</artifactId>
  61. </dependency>
  62. <dependency>
  63. <groupId>org.springframework</groupId>
  64. <artifactId>spring-test</artifactId>
  65. </dependency>
  66. <!--数据库依赖-->
  67. <dependency>
  68. <groupId>org.mybatis</groupId>
  69. <artifactId>mybatis-spring</artifactId>
  70. </dependency>
  71. <dependency>
  72. <groupId>org.mybatis</groupId>
  73. <artifactId>mybatis</artifactId>
  74. </dependency>
  75. <dependency>
  76. <groupId>com.alibaba</groupId>
  77. <artifactId>druid</artifactId>
  78. </dependency>
  79. <dependency>
  80. <groupId>mysql</groupId>
  81. <artifactId>mysql-connector-java</artifactId>
  82. </dependency>
  83. <dependency>
  84. <groupId>com.github.pagehelper</groupId>
  85. <artifactId>pagehelper</artifactId>
  86. </dependency>
  87. <!--日志依赖-->
  88. <dependency>
  89. <groupId>org.slf4j</groupId>
  90. <artifactId>slf4j-api</artifactId>
  91. </dependency>
  92. <dependency>
  93. <groupId>ch.qos.logback</groupId>
  94. <artifactId>logback-classic</artifactId>
  95. </dependency>
  96. </dependencies>
  97. </project>

创建mapper接口

  1. package com.qbb.ssm.mapper;
  2. import com.qbb.ssm.entity.User;
  3. import java.util.List;
  4. /**
  5. * @author QiuQiu&LL (博客:https://www.cnblogs.com/qbbit)
  6. * @version 1.0
  7. * @date 2022-03-04 17:54
  8. * @Description:
  9. */
  10. public interface UserMapper {
  11. List<User> findAll();
  12. }

创建Mybatis核心配置文件SqlMapConfig

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <!--控制mybatis全局行为-->
  7. <settings>
  8. <!--设置mybatis输出日志-->
  9. <setting name="logImpl" value="STDOUT_LOGGING"/>
  10. <!--驼峰命名规则-->
  11. <setting name="mapUnderscoreToCamelCase" value="true"/>
  12. </settings>
  13. <!--设置别名-->
  14. <typeAliases>
  15. <package name="com.qbb.ssm.entity"/>
  16. </typeAliases>
  17. <!--引入分页插件-->
  18. <plugins>
  19. <plugin interceptor="com.github.pagehelper.PageInterceptor">
  20. <!-- config params as the following -->
  21. <!--分页参数合理化-->
  22. <property name="reasonable " value="true"></property>
  23. </plugin>
  24. </plugins>
  25. <!--指定sql映射文件的位置-->
  26. <!-- <mappers>-->
  27. <!-- <package name="mapper"/>-->
  28. <!-- </mappers>-->
  29. </configuration>

创建Mapper映射文件

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.qbb.ssm.mapper.UserMapper">
  6. <select id="findAll" resultType="com.qbb.ssm.entity.User">
  7. select * from user
  8. </select>
  9. </mapper>

创建jdbc.properties

  1. jdbc.driver=com.mysql.jdbc.Driver
  2. jdbc.url=jdbc:mysql://localhost:3306/qbbit3?useUnicode=true&characterEncoding=UTF-8
  3. jdbc.username=root
  4. jdbc.password=root

4.创建ssm-service模块

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>ssm-parent</artifactId>
  7. <groupId>com.qbb</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <groupId>com.qbb</groupId>
  12. <artifactId>ssm-service</artifactId>
  13. <dependencies>
  14. <dependency>
  15. <groupId>com.qbb</groupId>
  16. <artifactId>ssm-mapper</artifactId>
  17. <version>1.0-SNAPSHOT</version>
  18. </dependency>
  19. <dependency>
  20. <groupId>junit</groupId>
  21. <artifactId>junit</artifactId>
  22. </dependency>
  23. </dependencies>
  24. </project>

创建Service接口及实现类

  1. package com.qbb.ssm.service;
  2. import com.qbb.ssm.entity.User;
  3. import java.util.List;
  4. /**
  5. * @author QiuQiu&LL (博客:https://www.cnblogs.com/qbbit)
  6. * @version 1.0
  7. * @date 2022-03-04 18:46
  8. * @Description:
  9. */
  10. public interface UserService {
  11. List<User> findAll() throws Exception;
  12. }
  1. package com.qbb.ssm.service.impl;
  2. import com.qbb.ssm.entity.User;
  3. import com.qbb.ssm.mapper.UserMapper;
  4. import com.qbb.ssm.service.UserService;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Service;
  7. import java.util.List;
  8. /**
  9. * @author QiuQiu&LL (博客:https://www.cnblogs.com/qbbit)
  10. * @version 1.0
  11. * @date 2022-03-04 18:48
  12. * @Description:
  13. */
  14. @Service
  15. public class UserServiceImpl implements UserService {
  16. @Autowired
  17. private UserMapper userMapper;
  18. @Override
  19. public List<User> findAll() {
  20. return userMapper.findAll();
  21. }
  22. }

创建Spring核心配置文件applicationContext.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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
  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/aop https://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
  7. <!--1.开启注解扫描-->
  8. <context:component-scan base-package="com.qbb.ssm.**">
  9. <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
  10. </context:component-scan>
  11. <!--2.加载配置文件-->
  12. <context:property-placeholder location="classpath:jdbc.properties"/>
  13. <!--3.配置数据源信息-->
  14. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
  15. <property name="driverClassName" value="${jdbc.driver}"/>
  16. <property name="url" value="${jdbc.url}"/>
  17. <property name="username" value="${jdbc.username}"/>
  18. <property name="password" value="${jdbc.password}"/>
  19. </bean>
  20. <!--4.配置SQLSessionFactory工厂-->
  21. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  22. <!--指定mybatis配置文件的位置-->
  23. <property name="configLocation" value="classpath:SqlMapConfig.xml"/>
  24. <!--指定数据源-->
  25. <property name="dataSource" ref="dataSource"/>
  26. <!--指定mapper配置文件的位置-->
  27. <property name="mapperLocations" value="classpath*:mapper/**.xml"></property>
  28. <!--配置插件-->
  29. <property name="plugins">
  30. <array>
  31. <!--配置分页插件-->
  32. <bean class="com.github.pagehelper.PageInterceptor">
  33. <property name="properties">
  34. <props>
  35. <!--配置数据库方言,告诉PageHelper-->
  36. <!--<prop key="dialect">mysql</prop>-->
  37. <!--配置页码合理化修正-->
  38. <prop key="reasonable">true</prop>
  39. </props>
  40. </property>
  41. </bean>
  42. </array>
  43. </property>
  44. </bean>
  45. <!--5.配置AccountDao接口所在的包-->
  46. <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  47. <!--扫描所有的dao接口-->
  48. <property name="basePackage" value="com.qbb.ssm.mapper"/>
  49. </bean>
  50. <!--配置一个可以执行批量的sqlSession-->
  51. <bean id="sessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
  52. <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
  53. <constructor-arg name="executorType" value="SIMPLE"/>
  54. </bean>
  55. <!--6.配置spring声明式事务管理-->
  56. <!--事务管理器-->
  57. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  58. <property name="dataSource" ref="dataSource"/>
  59. </bean>
  60. <!--7.配置AOP增强-->
  61. <aop:config>
  62. <!--切入点表达式-->
  63. <aop:pointcut id="txPointcut" expression="execution(* *..*ServiceImpl..*(..))"/>
  64. <!--引用事务通知-->
  65. <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
  66. </aop:config>
  67. <!--8.配置事务通知-->
  68. <tx:advice id="txAdvice" transaction-manager="transactionManager">
  69. <tx:attributes>
  70. <!--查询方法:配置只读属性-->
  71. <tx:method name="find*" read-only="true"/>
  72. <tx:method name="get*" read-only="true"/>
  73. <tx:method name="query*" read-only="true"/>
  74. <tx:method name="count*" read-only="true"/>
  75. <!-- 增删改方法另外配置 --> <!-- propagation 属性配置事务方法的传播行为 -->
  76. <!-- 默认值:REQUIRED 表示:当前方法必须运行在事务中,如果没有事务,则开 启事务,在自己的事务中运行。如果已经有了已开启的事务,
  77. 则在当前事务中运行。有可能 和其他方法共用同一个事务。 -->
  78. <!-- 建议值:REQUIRES_NEW 表示:当前方法必须运行在事务中,如果没有事务, 则开启事务,在自己的事务中运行。
  79. 和 REQUIRED 的区别是就算现在已经有了已开启的事务, 也一定要开启自己的事务,避免和其他方法共用同一个事务。 -->
  80. <!-- rollback-for 属性配置回滚的异常 -->
  81. <!-- 默认值:运行时异常 -->
  82. <!-- 建议值:编译时异常+运行时异常 -->
  83. <tx:method name="save*" propagation="REQUIRES_NEW" rollback-for="java.lang.Exception"/>
  84. <tx:method name="remove*" propagation="REQUIRES_NEW" rollback-for="java.lang.Exception"/>
  85. <tx:method name="update*" propagation="REQUIRES_NEW" rollback-for="java.lang.Exception"/>
  86. </tx:attributes>
  87. </tx:advice>
  88. </beans>

编写一个测试类试一下

  1. package com.qbb.ssm.service;
  2. import com.qbb.ssm.entity.User;
  3. import org.junit.Test;
  4. import org.junit.runner.RunWith;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.test.context.ContextConfiguration;
  7. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
  8. import java.util.List;
  9. /**
  10. * @author QiuQiu&LL (博客:https://www.cnblogs.com/qbbit)
  11. * @version 1.0
  12. * @date 2022-03-04 19:20
  13. * @Description:
  14. */
  15. @RunWith(SpringJUnit4ClassRunner.class)
  16. @ContextConfiguration(locations = "classpath*:applicationContext.xml")
  17. public class UserServiceTest {
  18. @Autowired
  19. private UserService userService;
  20. @Test
  21. public void findAll() throws Exception {
  22. List<User> all = userService.findAll();
  23. System.out.println(all);
  24. }
  25. }

5.创建ssm-web模块

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>com.qbb</groupId>
  7. <artifactId>ssm-parent</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. <modules>
  10. <module>ssm-entity</module>
  11. <module>ssm-mapper</module>
  12. <module>ssm-service</module>
  13. <module>ssm-web</module>
  14. </modules>
  15. <packaging>pom</packaging>
  16. <!--依赖版本-->
  17. <properties>
  18. <maven.compiler.source>8</maven.compiler.source>
  19. <maven.compiler.target>8</maven.compiler.target>
  20. <servlet.version>4.0.1</servlet.version>
  21. <jsp.version>2.3.3</jsp.version>
  22. <thymeleaf.version>3.0.12.RELEASE</thymeleaf.version>
  23. <spring.version>5.3.9</spring.version>
  24. <lombok.version>1.18.20</lombok.version>
  25. <slf4j.version>1.7.30</slf4j.version>
  26. <logback.version>1.2.5</logback.version>
  27. <hibernate-validator.version>7.0.1.Final</hibernate-validator.version>
  28. <fileupload.version>1.4</fileupload.version>
  29. <mybatis-spring.version>2.0.6</mybatis-spring.version>
  30. <druid.version>1.2.6</druid.version>
  31. <mybatis.version>3.5.7</mybatis.version>
  32. <mysql.version>5.1.48</mysql.version>
  33. <pagehelper.version>5.2.1</pagehelper.version>
  34. <junit.version>4.13.2</junit.version>
  35. </properties>
  36. <!--依赖版本锁定-->
  37. <dependencyManagement>
  38. <dependencies>
  39. <!--junit-->
  40. <dependency>
  41. <groupId>junit</groupId>
  42. <artifactId>junit</artifactId>
  43. <version>${junit.version}</version>
  44. <scope>test</scope>
  45. </dependency>
  46. <!--spring依赖-->
  47. <dependency>
  48. <groupId>org.springframework</groupId>
  49. <artifactId>spring-context</artifactId>
  50. <version>${spring.version}</version>
  51. </dependency>
  52. <!--spring-core-->
  53. <dependency>
  54. <groupId>org.springframework</groupId>
  55. <artifactId>spring-core</artifactId>
  56. <version>${spring.version}</version>
  57. </dependency>
  58. <!--expression-->
  59. <dependency>
  60. <groupId>org.springframework</groupId>
  61. <artifactId>spring-expression</artifactId>
  62. <version>${spring.version}</version>
  63. </dependency>
  64. <!--spring-beans-->
  65. <dependency>
  66. <groupId>org.springframework</groupId>
  67. <artifactId>spring-beans</artifactId>
  68. <version>${spring.version}</version>
  69. </dependency>
  70. <!--spring-jcl-->
  71. <dependency>
  72. <groupId>org.springframework</groupId>
  73. <artifactId>spring-jcl</artifactId>
  74. <version>${spring.version}</version>
  75. </dependency>
  76. <!--spring-aop-->
  77. <dependency>
  78. <groupId>org.springframework</groupId>
  79. <artifactId>spring-aop</artifactId>
  80. <version>${spring.version}</version>
  81. </dependency>
  82. <!--spring-aspects-->
  83. <dependency>
  84. <groupId>org.springframework</groupId>
  85. <artifactId>spring-aspects</artifactId>
  86. <version>${spring.version}</version>
  87. </dependency>
  88. <!--spring-tx-->
  89. <dependency>
  90. <groupId>org.springframework</groupId>
  91. <artifactId>spring-tx</artifactId>
  92. <version>${spring.version}</version>
  93. </dependency>
  94. <!--spring-jdbc-->
  95. <dependency>
  96. <groupId>org.springframework</groupId>
  97. <artifactId>spring-jdbc</artifactId>
  98. <version>${spring.version}</version>
  99. </dependency>
  100. <!--spring-test-->
  101. <dependency>
  102. <groupId>org.springframework</groupId>
  103. <artifactId>spring-test</artifactId>
  104. <version>${spring.version}</version>
  105. </dependency>
  106. <!--spring-webmvc-->
  107. <dependency>
  108. <groupId>org.springframework</groupId>
  109. <artifactId>spring-webmvc</artifactId>
  110. <version>${spring.version}</version>
  111. </dependency>
  112. <!--spring-web-->
  113. <dependency>
  114. <groupId>org.springframework</groupId>
  115. <artifactId>spring-web</artifactId>
  116. <version>${spring.version}</version>
  117. </dependency>
  118. <!--commons-fileupload 文件上传-->
  119. <dependency>
  120. <groupId>commons-fileupload</groupId>
  121. <artifactId>commons-fileupload</artifactId>
  122. <version>${fileupload.version}</version>
  123. </dependency>
  124. <!--数据校验-->
  125. <dependency>
  126. <groupId>org.hibernate.validator</groupId>
  127. <artifactId>hibernate-validator</artifactId>
  128. <version>${hibernate-validator.version}</version>
  129. </dependency>
  130. <!--javax.servlet-api-->
  131. <dependency>
  132. <groupId>javax.servlet</groupId>
  133. <artifactId>javax.servlet-api</artifactId>
  134. <version>${servlet.version}</version>
  135. </dependency>
  136. <dependency>
  137. <groupId>javax.servlet.jsp</groupId>
  138. <artifactId>javax.servlet.jsp-api</artifactId>
  139. <version>${jsp.version}</version>
  140. </dependency>
  141. <dependency>
  142. <groupId>org.thymeleaf</groupId>
  143. <artifactId>thymeleaf-spring5</artifactId>
  144. <version>${thymeleaf.version}</version>
  145. </dependency>
  146. <!--数据库依赖-->
  147. <dependency>
  148. <groupId>org.mybatis</groupId>
  149. <artifactId>mybatis-spring</artifactId>
  150. <version>${mybatis-spring.version}</version>
  151. </dependency>
  152. <!--mybatis-->
  153. <dependency>
  154. <groupId>org.mybatis</groupId>
  155. <artifactId>mybatis</artifactId>
  156. <version>${mybatis.version}</version>
  157. </dependency>
  158. <!--数据源-->
  159. <dependency>
  160. <groupId>com.alibaba</groupId>
  161. <artifactId>druid</artifactId>
  162. <version>${druid.version}</version>
  163. </dependency>
  164. <!--数据库驱动-->
  165. <dependency>
  166. <groupId>mysql</groupId>
  167. <artifactId>mysql-connector-java</artifactId>
  168. <version>${mysql.version}</version>
  169. </dependency>
  170. <!--分页插件-->
  171. <dependency>
  172. <groupId>com.github.pagehelper</groupId>
  173. <artifactId>pagehelper</artifactId>
  174. <version>${pagehelper.version}</version>
  175. </dependency>
  176. <!--pojo依赖-->
  177. <dependency>
  178. <groupId>org.projectlombok</groupId>
  179. <artifactId>lombok</artifactId>
  180. <version>${lombok.version}</version>
  181. </dependency>
  182. <!--日志依赖-->
  183. <dependency>
  184. <groupId>org.slf4j</groupId>
  185. <artifactId>slf4j-api</artifactId>
  186. <version>${slf4j.version}</version>
  187. </dependency>
  188. <dependency>
  189. <groupId>ch.qos.logback</groupId>
  190. <artifactId>logback-classic</artifactId>
  191. <version>${logback.version}</version>
  192. </dependency>
  193. </dependencies>
  194. </dependencyManagement>
  195. </project>

创建UserController接口

  1. package com.qbb.ssm.controller;
  2. import com.qbb.ssm.entity.User;
  3. import com.qbb.ssm.exception.MySSMException;
  4. import com.qbb.ssm.service.UserService;
  5. import com.qbb.ssm.util.ResultEntity;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.stereotype.Controller;
  8. import org.springframework.web.bind.annotation.GetMapping;
  9. import org.springframework.web.bind.annotation.RequestMapping;
  10. import org.springframework.web.bind.annotation.ResponseBody;
  11. import java.util.List;
  12. /**
  13. * @author QiuQiu&LL (博客:https://www.cnblogs.com/qbbit)
  14. * @version 1.0
  15. * @date 2022-03-04 19:33
  16. * @Description:
  17. */
  18. @Controller
  19. @RequestMapping("/user")
  20. public class UserController {
  21. @Autowired
  22. private UserService userService;
  23. @GetMapping("/test")
  24. @ResponseBody
  25. public String test(){
  26. return "测试";
  27. }
  28. @GetMapping("/findAll")
  29. @ResponseBody
  30. public ResultEntity findAll() throws MySSMException {
  31. try {
  32. List<User> userList = userService.findAll();
  33. return ResultEntity.successWithData(userList);
  34. } catch (Exception e) {
  35. e.printStackTrace();
  36. throw new MySSMException();
  37. }
  38. }
  39. }

创建统一异常处理机制

  1. package com.qbb.ssm.exception;
  2. import org.springframework.web.bind.annotation.ControllerAdvice;
  3. import java.security.PrivilegedActionException;
  4. /**
  5. * @author QiuQiu&LL (博客:https://www.cnblogs.com/qbbit)
  6. * @version 1.0
  7. * @date 2022-03-04 19:36
  8. * @Description:自定义异常
  9. */
  10. public class MySSMException extends Exception{
  11. public MySSMException() {
  12. }
  13. public MySSMException(String message) {
  14. super(message);
  15. }
  16. public MySSMException(String message, Throwable cause) {
  17. super(message, cause);
  18. }
  19. public MySSMException(Throwable cause) {
  20. super(cause);
  21. }
  22. public MySSMException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
  23. super(message, cause, enableSuppression, writableStackTrace);
  24. }
  25. }
  1. package com.qbb.ssm.util;
  2. import com.qbb.ssm.exception.MySSMException;
  3. import org.springframework.web.bind.annotation.ControllerAdvice;
  4. import org.springframework.web.bind.annotation.ExceptionHandler;
  5. import org.springframework.web.servlet.ModelAndView;
  6. /**
  7. * @author QiuQiu&LL (博客:https://www.cnblogs.com/qbbit)
  8. * @version 1.0
  9. * @date 2022-03-04 19:41
  10. * @Description:
  11. */
  12. @ControllerAdvice
  13. public class MyExceptionResolver {
  14. @ExceptionHandler(MySSMException.class)
  15. public ModelAndView mySSMException() {
  16. ModelAndView modelAndView = new ModelAndView();
  17. modelAndView.addObject("errorMsg", "抱歉,网络出现故障了,请联系管理员[电话:18888888888]或稍后再试!");
  18. modelAndView.setViewName("error");
  19. return modelAndView;
  20. }
  21. }

创建SpringMVC核心配置文件

  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. <!--1.扫描配置文件-->
  8. <context:component-scan base-package="com.qbb.ssm" use-default-filters="false">
  9. <!--禁用默认规则,只扫描控制器-->
  10. <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
  11. </context:component-scan>
  12. <!--2.配置视图解析器-->
  13. <bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
  14. <property name="order" value="1"/>
  15. <property name="characterEncoding" value="UTF-8"/>
  16. <property name="templateEngine">
  17. <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
  18. <property name="templateResolver">
  19. <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
  20. <!--视图前缀-->
  21. <property name="prefix" value="/WEB-INF/pages/"/>
  22. <!--视图后缀-->
  23. <property name="suffix" value=".html"/>
  24. <property name="templateMode" value="HTML5"/>
  25. <property name="characterEncoding" value="UTF-8"/>
  26. </bean>
  27. </property>
  28. </bean>
  29. </property>
  30. </bean>
  31. <!--3.将SpringMVC不能处理的请求交给tomcat-->
  32. <mvc:default-servlet-handler/>
  33. <!--4.配置view-controller-->
  34. <mvc:view-controller path="/main.html" view-name="main"/>
  35. <!--5.开启SpringMVC注解驱动-->
  36. <mvc:annotation-driven/>
  37. </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. <!--1.启动Spring容器-->
  7. <!--加载Spring配置文件-->
  8. <context-param>
  9. <param-name>contextConfigLocation</param-name>
  10. <param-value>classpath*:applicationContext.xml</param-value>
  11. </context-param>
  12. <listener>
  13. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  14. </listener>
  15. <!--2.配置SpringMVC前端控制器,拦截前端所有请求-->
  16. <servlet>
  17. <servlet-name>dispatcherServlet</servlet-name>
  18. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  19. <init-param>
  20. <param-name>contextConfigLocation</param-name>
  21. <param-value>classpath:spring-mvc.xml</param-value>
  22. </init-param>
  23. <load-on-startup>1</load-on-startup>
  24. </servlet>
  25. <servlet-mapping>
  26. <servlet-name>dispatcherServlet</servlet-name>
  27. <url-pattern>/</url-pattern>
  28. </servlet-mapping>
  29. <!--3.字符编码过滤器,一定要放在所有过滤器之前-->
  30. <filter>
  31. <filter-name>characterEncodingFilter</filter-name>
  32. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  33. <init-param>
  34. <param-name>encoding</param-name>
  35. <param-value>UTF-8</param-value>
  36. </init-param>
  37. <init-param>
  38. <param-name>forceRequestEncoding</param-name>
  39. <param-value>true</param-value>
  40. </init-param>
  41. <init-param>
  42. <param-name>forceResponseEncoding</param-name>
  43. <param-value>true</param-value>
  44. </init-param>
  45. </filter>
  46. <filter-mapping>
  47. <filter-name>characterEncodingFilter</filter-name>
  48. <url-pattern>/*</url-pattern>
  49. </filter-mapping>
  50. <!--4.使用Rest风格的URI,将页面的post请求转为指定的delete或者put请求-->
  51. <filter>
  52. <filter-name>hiddenHttpMethodFilter</filter-name>
  53. <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
  54. </filter>
  55. <filter-mapping>
  56. <filter-name>hiddenHttpMethodFilter</filter-name>
  57. <url-pattern>/*</url-pattern>
  58. </filter-mapping>
  59. </web-app>

创建页面

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>用户列表</title>
  6. </head>
  7. <body>
  8. <div id="app">
  9. <table border="1px" cellpadding="10px" cellspacing="0px" rules="all">
  10. <tr>
  11. <th>ID</th>
  12. <th>用户名</th>
  13. <th>密码</th>
  14. </tr>
  15. <tr v-for="(user,index) in userList" :key="user.id">
  16. <td v-text="user.id"></td>
  17. <td v-text="user.username"></td>
  18. <td v-text="user.password"></td>
  19. </tr>
  20. </table>
  21. </div>
  22. </body>
  23. <script src="/ssm/js/vue.js"></script>
  24. <script src="/ssm/js/axios.min.js"></script>
  25. <script>
  26. new Vue({
  27. el: '#app',
  28. data: {
  29. userList: []
  30. },
  31. created() {
  32. this.findAll()
  33. },
  34. methods: {
  35. findAll() {
  36. console.log('aaa')
  37. axios({
  38. url: '/ssm/user/findAll',
  39. method: 'get'
  40. }).then(response => {
  41. this.userList = response.data.data
  42. })
  43. }
  44. }
  45. })
  46. </script>
  47. </html>

测试

至此,SSM框架整合完毕,其他的增删改我就不一一测试了...开始进军SpringBoot

Spring+SpringMVC+Mybatis+Vue+Axios+Thymeleaf整合案例的更多相关文章

  1. Spring Boot + MyBatis + Druid + Redis + Thymeleaf 整合小结

    Spring Boot + MyBatis + Druid + Redis + Thymeleaf 整合小结 这两天闲着没事想利用**Spring Boot**加上阿里的开源数据连接池**Druid* ...

  2. SSM(Spring+SpringMVC+Mybatis)框架环境搭建(整合步骤)(一)

    1. 前言 最近在写毕设过程中,重新梳理了一遍SSM框架,特此记录一下. 附上源码:https://gitee.com/niceyoo/jeenotes-ssm 2. 概述 在写代码之前我们先了解一下 ...

  3. (4)Maven快速入门_4在Spring+SpringMVC+MyBatis+Oracle+Maven框架整合运行在Tomcat8中

    利用Maven 创建Spring+SpringMVC+MyBatis+Oracle 项目 分了三个项目  Dao   (jar)   Service (jar)   Controller (web) ...

  4. 搭建Spring + SpringMVC + Mybatis框架之三(整合Spring、Mybatis和Spring MVC)

    整合Spring和SpringMVC 之前已经整合了spring和mybatis,现在在此基础上整合SSM. 项目目录: 思路:SpringMVC的配置文件独立,然后在web.xml中配置整合. (1 ...

  5. Spring+SpringMVC+Mybatis+Maven+CXF+WebService整合之服务端

    WebService服务端项目结构: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="h ...

  6. SSM(spring,springMVC,Mybatis)框架的整合

    这几天想做一个小项目,所以搭建了一个SSM框架. 1.基本概念 1.1.Spring   Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Joh ...

  7. spring ,springmvc,mybatis 最基本的整合,没有多余的jar包和依赖 2018.9.29日

    最基本的ssm框架整合 本案例采用2018商业版intellij  idea  编辑器    maven项目管理工具  tomcat8.5 接着上一篇使用springmvc最基本配置开始 https: ...

  8. SSM(Spring+SpringMVC+Mybatis)+Mysql 框架整合搭建流程以及其间注意事项

    复习SSM框架,太久没用自己手动撘一个,发现自己还是有很多地方忘记了和没注意的事项... 首先,直接给出总流程: 零.引jar包 1.引包(或者写maven.pom) 一.数据库部分 设计数据库各表结 ...

  9. Spring+springmvc+Mybatis整合案例 annotation版(myeclipse)详细版

    Spring+springmvc+Mybatis整合案例 Version:annotation版 文档结构图: 从底层开始做起: 01.配置web.xml文件 <?xml version=&qu ...

  10. Spring+springmvc+Mybatis整合案例 xml配置版(myeclipse)详细版

    Spring+springmvc+Mybatis整合案例 Version:xml版(myeclipse) 文档结构图: 从底层开始做起: 01.配置web.xml文件 <?xml version ...

随机推荐

  1. 2023-08-30:用go语言编写。两个魔法卷轴问题。 给定一个数组arr,其中可能有正、负、0, 一个魔法卷轴可以把arr中连续的一段全变成0,你希望数组整体的累加和尽可能大。 你有两个魔法卷轴,

    2023-08-30:用go语言编写.两个魔法卷轴问题. 给定一个数组arr,其中可能有正.负.0, 一个魔法卷轴可以把arr中连续的一段全变成0,你希望数组整体的累加和尽可能大. 你有两个魔法卷轴, ...

  2. CodeForces 1388D Captain Flint and Treasure

    题意 给长度为\(n\)的序列\(a[n]\)和\(b[n]\),初始时\(ans=0\),有以下操作: \(ans=ans+a[i]\) 如果\(b[i]\neq-1\),则\(a[b[i]]=a[ ...

  3. Go 语言内置类型全解析:从布尔到字符串的全维度探究

    关注微信公众号[TechLeadCloud],分享互联网架构.云服务技术的全维度知识.作者拥有10+年互联网服务架构.AI产品研发经验.团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证 ...

  4. 图解 LeetCode 算法汇总——二分查找

    二分查找(Binary Search)是一种在有序数组中查找特定元素的高效算法.它的基本思想是将目标值与数组中间的元素进行比较,如果目标值小于中间元素,则在数组的左半部分继续查找,否则在右半部分查找, ...

  5. Solution Set -「CF 1514」

    「CF 1514A」Perfectly Imperfect Array Link. 就看序列中是否存在不为平方数的元素即可. #include<bits/stdc++.h> using n ...

  6. Teamcenter RAC 开发之《AbstractRendering》

    背景 关于Teamcenter RAC 客制化渲染表单,做一两个有时间做还是可以的,问题是大批量做的时候就会存在很多重复的代码 例如: 1.定义很多 TCProperty,JTextFiled,ite ...

  7. 今天的第二道tarjan:受欢迎的牛

    原题来自:USACO 2003 Fall 题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的"喜欢&quo ...

  8. gson如何序列化子类

    需求 目前有一个需求,不同对象有一些公共属性,分别也有一些不同的属性.对方传过来的json字符串中,把这些对象组成了一个数组返回过来的.这样该如何反序列化呢? 举例 定义Person类.Student ...

  9. Typora +Picgo 搭建个人笔记

    目录 Typora +Picgo 搭建个人笔记 一.Picgo +Github 搭建图床 1.基础设置 2. 将配置导出,方便下次使用 二.Typora:设置 : 1. 基本设置 2. 导出自动提交 ...

  10. 从输入URL到页面加载完都发生了什么

    1.浏览器的地址栏输入URL并按下回车. 2.浏览器查找当前URL是否存在缓存,并比较缓存是否过期. 3.DNS解析URL对应的IP. 4.根据IP建立TCP连接(三次握手). 5.HTTP发起请求. ...