包依赖
数据库相关包:mysql-connector 、c3p0连接池或druid
持久层包:mybatis、spirng整合mybatis
spring包:springwebmvc、spring jdbc
视图包:默认视图、jsp视图、thymeleaf视图、servlet-api
单元测试包:junit

  1. <dependencies>
  2. <!--数据库相关包mysql-connector 、连接池 -->
  3. <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
  4. <dependency>
  5. <groupId>mysql</groupId>
  6. <artifactId>mysql-connector-java</artifactId>
  7. <version>8.0.26</version>
  8. </dependency>
  9. <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
  10. <dependency>
  11. <groupId>com.alibaba</groupId>
  12. <artifactId>druid</artifactId>
  13. <version>1.2.8</version>
  14. </dependency>
  15. <!--持久层包mybatis、spring整合mybatis -->
  16. <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
  17. <dependency>
  18. <groupId>org.mybatis</groupId>
  19. <artifactId>mybatis</artifactId>
  20. <version>3.5.7</version>
  21. </dependency>
  22. <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
  23. <dependency>
  24. <groupId>org.mybatis</groupId>
  25. <artifactId>mybatis-spring</artifactId>
  26. <version>2.0.6</version>
  27. </dependency>
  28. <!--spring包 springwebmvc 、 spring jdbc -->
  29. <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
  30. <dependency>
  31. <groupId>org.springframework</groupId>
  32. <artifactId>spring-webmvc</artifactId>
  33. <version>5.2.9.RELEASE</version>
  34. </dependency>
  35. <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
  36. <dependency>
  37. <groupId>org.springframework</groupId>
  38. <artifactId>spring-jdbc</artifactId>
  39. <version>5.2.9.RELEASE</version>
  40. </dependency>
  41. <!--视图包 thymeleaf 、 servlet-api-->
  42. <!-- https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf -->
  43. <dependency>
  44. <groupId>org.thymeleaf</groupId>
  45. <artifactId>thymeleaf</artifactId>
  46. <version>3.0.11.RELEASE</version>
  47. </dependency>
  48. <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
  49. <dependency>
  50. <groupId>javax.servlet</groupId>
  51. <artifactId>javax.servlet-api</artifactId>
  52. <version>3.1.0</version>
  53. <scope>provided</scope>
  54. </dependency>
  55. <!--单元测试包 junint-->
  56. <!-- https://mvnrepository.com/artifact/junit/junit -->
  57. <dependency>
  58. <groupId>junit</groupId>
  59. <artifactId>junit</artifactId>
  60. <version>4.12</version>
  61. <scope>test</scope>
  62. </dependency>
  63. <!--日志包 log4j -->
  64. <!-- https://mvnrepository.com/artifact/log4j/log4j -->
  65. <dependency>
  66. <groupId>log4j</groupId>
  67. <artifactId>log4j</artifactId>
  68. <version>1.2.17</version>
  69. </dependency>
  70. <!--其他包-->
  71. </dependencies>

一、项目介绍

1、技术点

基础框架:SSM(Spring + SpringMVC + Mybatis)
数据库:MySQL 8.0.26
前端框架:BootStrap 3.4.1
项目构建:Maven 3.6.3
分页插件:pageHelper
逆向工程:Mybatis-Generator 1.3.5

2、功能点

分页
数据校验
前端校验jQuery + 后端校验 JSR303
ajax
Rest风格的URI

二、环境搭建

1、创建maven工程 链接

image.png

2、引入jar包

  1. <dependencies>
  2. <!-- 1.Spring-MVC 依赖 -->
  3. <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
  4. <dependency>
  5. <groupId>org.springframework</groupId>
  6. <artifactId>spring-webmvc</artifactId>
  7. <version>4.3.7.RELEASE</version>
  8. </dependency>
  9. <!-- 2.Spring jdbc -->
  10. <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
  11. <dependency>
  12. <groupId>org.springframework</groupId>
  13. <artifactId>spring-jdbc</artifactId>
  14. <version>4.3.7.RELEASE</version>
  15. </dependency>
  16. <!-- 3.spring 面向切面编程 Aspects -->
  17. <!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects -->
  18. <dependency>
  19. <groupId>org.springframework</groupId>
  20. <artifactId>spring-aspects</artifactId>
  21. <version>4.3.7.RELEASE</version>
  22. </dependency>
  23. <!-- 4.mybatis 依赖 -->
  24. <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
  25. <dependency>
  26. <groupId>org.mybatis</groupId>
  27. <artifactId>mybatis</artifactId>
  28. <version>3.4.2</version>
  29. </dependency>
  30. <!-- 5.mybatis-spring 整合 -->
  31. <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
  32. <dependency>
  33. <groupId>org.mybatis</groupId>
  34. <artifactId>mybatis-spring</artifactId>
  35. <version>1.3.1</version>
  36. </dependency>
  37. <!-- 6.数据库连接池、连接驱动 -->
  38. <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
  39. <dependency>
  40. <groupId>com.mchange</groupId>
  41. <artifactId>c3p0</artifactId>
  42. <version>0.9.2</version>
  43. </dependency>
  44. <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
  45. <dependency>
  46. <groupId>mysql</groupId>
  47. <artifactId>mysql-connector-java</artifactId>
  48. <version>8.0.26</version>
  49. </dependency>
  50. <!-- 7.jstl junit sevlet-api -->
  51. <!-- https://mvnrepository.com/artifact/jstl/jstl -->
  52. <dependency>
  53. <groupId>jstl</groupId>
  54. <artifactId>jstl</artifactId>
  55. <version>1.2</version>
  56. </dependency>
  57. <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
  58. <dependency>
  59. <groupId>javax.servlet</groupId>
  60. <artifactId>javax.servlet-api</artifactId>
  61. <version>3.1.0</version>
  62. <scope>provided</scope>
  63. </dependency>
  64. <!-- https://mvnrepository.com/artifact/junit/junit -->
  65. <dependency>
  66. <groupId>junit</groupId>
  67. <artifactId>junit</artifactId>
  68. <version>4.12</version>
  69. <scope>test</scope>
  70. </dependency>
  71. </dependencies>

3、引入bootstrap前端框架 链接

image.png

4、编写ssm整合的关键配置文件 链接

1>配置web.xml 链接

  1. <!-- 1.启动spring容器 -->
  2. <!-- needed for ContextLoaderListener -->
  3. <context-param>
  4. <param-name>contextConfigLocation</param-name>
  5. <param-value>classpath:applicationContext.xml</param-value>
  6. </context-param>
  7. <!-- Bootstraps the root web application context before servlet initialization -->
  8. <listener>
  9. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  10. </listener>
  11. <!-- 2.配置springMVC 前端控制器==》拦截所有请求 -->
  12. <!-- The front controller of this Spring Web application, responsible for handling all application requests -->
  13. <servlet>
  14. <servlet-name>dispatcherServlet</servlet-name>
  15. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  16. <init-param>
  17. <param-name>contextConfigLocation</param-name>
  18. <param-value>classpath:SpringMVC.xml</param-value>
  19. </init-param>
  20. <load-on-startup>1</load-on-startup>
  21. </servlet>
  22. <!-- Map all requests to the DispatcherServlet for handling -->
  23. <servlet-mapping>
  24. <servlet-name>dispatcherServlet</servlet-name>
  25. <url-pattern>/</url-pattern>
  26. </servlet-mapping>
  27. <!-- 3.字符编码过滤器 如果同时存在多个过滤器,字符过滤器需要设置在所有过滤器的前面 -->
  28. <filter>
  29. <!-- 查询类名快捷键 ctrl + shift + t -->
  30. <filter-name>charanterEncoding</filter-name>
  31. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  32. <init-param>
  33. <param-name>encoding</param-name>
  34. <param-value>utf-8</param-value>
  35. </init-param>
  36. <init-param>
  37. <param-name>forceRequestEncoding</param-name>
  38. <param-value>true</param-value>
  39. </init-param>
  40. <init-param>
  41. <param-name>forceResponseEncoding</param-name>
  42. <param-value>true</param-value>
  43. </init-param>
  44. </filter>
  45. <filter-mapping>
  46. <filter-name>characterEncoding</filter-name>
  47. <url-pattern>/*</url-pattern>
  48. </filter-mapping>
  49. <!-- 4.使用Rest风格URI -->
  50. <filter>
  51. <filter-name>HiddenHttpMethodFilter</filter-name>
  52. <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
  53. </filter>
  54. <filter-mapping>
  55. <filter-name>HiddenHttpMethodFilter</filter-name>
  56. <url-pattern>/*</url-pattern>
  57. </filter-mapping>

2>配置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:mvc="http://www.springframework.org/schema/mvc"
  5. xmlns:context="http://www.springframework.org/schema/context"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans.xsd
  8. http://www.springframework.org/schema/context
  9. http://www.springframework.org/schema/context/spring-context-4.3.xsd
  10. http://www.springframework.org/schema/mvc
  11. http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
  12. ">
  13. <!-- 1.配置扫描器 将默认的过滤器取消掉,只扫描指定的层 -->
  14. <context:component-scan base-package="xyz.zhouge.ssm.controller" use-default-filters="false" >
  15. <!-- 只扫描controller层 -->
  16. <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
  17. </context:component-scan>
  18. <!-- 2.配置视图解析器 -->
  19. <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  20. <!-- 配置前缀 -->
  21. <property name="preffix" value="/WEB-INF/views/" />
  22. <!-- 配置后缀 -->
  23. <property name="suffix" value=".jsp" />
  24. </bean>
  25. <!-- 3.default-handler -->
  26. <mvc:default-servlet-handler/>
  27. <!-- 4.注解驱动 -->
  28. <mvc:annotation-driven />
  29. </beans>

3>配置Spring.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:tx="http://www.springframework.org/schema/tx"
  5. xmlns:mvc="http://www.springframework.org/schema/mvc"
  6. xmlns:aop="http://www.springframework.org/schema/aop"
  7. xmlns:context="http://www.springframework.org/schema/context"
  8. xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
  9. xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring
  10. http://mybatis.org/schema/mybatis-spring-1.2.xsd
  11. http://www.springframework.org/schema/beans
  12. http://www.springframework.org/schema/beans/spring-beans.xsd
  13. http://www.springframework.org/schema/context
  14. http://www.springframework.org/schema/context/spring-context-4.0.xsd
  15. http://www.springframework.org/schema/tx
  16. http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
  17. http://www.springframework.org/schema/mvc
  18. http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
  19. http://www.springframework.org/schema/aop
  20. https://www.springframework.org/schema/aop/spring-aop.xsd
  21. ">
  22. <!--1.包扫描 扫描指定包下面的所有资源-->
  23. <context:component-scan base-package="xyz.zhouge.ssm">
  24. <!-- 包下面的Controller注解包不扫描 -->
  25. <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
  26. </context:component-scan>
  27. <!--2.配置数据源-->
  28. <context:property-placeholder location="classpath:database.properties"/>
  29. <bean id="c3P0PooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  30. <property name="driverClass" value="${mysql.driver}"/>
  31. <property name="jdbcUrl" value="${mysql.url}"/>
  32. <property name="user" value="${mysql.username}"/>
  33. <property name="password" value="${mysql.password}"/>
  34. </bean>
  35. <!-- 3.配置mybatis -->
  36. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  37. <!-- 指定mybatis全局配置文件的位置 -->
  38. <property name="configLocation" value="classpath:mybatis-config.xml" />
  39. <!-- 注入数据源 -->
  40. <property name="dataSource" ref="c3P0PooledDataSource" />
  41. <!-- 指定mapper映射文件位置 -->
  42. <property name="mapperLocations" value="classpath:mapper/*.xml" />
  43. </bean>
  44. <!-- 4.配置扫描器 将mybatis的接口交给ioc容器进行管理 -->
  45. <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  46. <!-- 扫描所有mapper接口的所有实现,将其加入到ioc容器中 -->
  47. <property name="basePackage" value="xyz.zhouge.ssm.mapper" />
  48. </bean>
  49. <!-- 5.数据源事务控制 -->
  50. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  51. <!-- 将数据源添加事务控制 -->
  52. <property name="dataSource" ref="c3P0PooledDataSource"/>
  53. </bean>
  54. <!-- 6.开启基于注解的事务控制 -->
  55. <aop:config>
  56. <!-- 切入点表达式 -->
  57. <aop:pointcut expression="execution(xyz.zhouge.ssm.service..*(..))" id="servicePointCut" />
  58. <!-- 配置事务增强 设置事务如何切入,以及切入哪些方法-->
  59. <aop:advisor advice-ref="txAdvice" pointcut-ref="servicePointCut" />
  60. </aop:config>
  61. <!-- 7.配置事务通知。事务如何切入 -->
  62. <tx:advice id="txAdvice" transaction-manager="transactionManager">
  63. <tx:attributes>
  64. <!-- 以get开头的方法名,开启事务,设置只读 -->
  65. <tx:method name="get*" read-only="true" />
  66. <!-- 所有方法都开启事务 -->
  67. <tx:method name="*"/>
  68. </tx:attributes>
  69. </tx:advice>
  70. </beans>

4>配置mybatis,搭建逆向工程

a>mybatis-config配置文件

  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. <settings>
  7. <!--驼峰命名规则 -->
  8. <setting name="maoUnderscoreToCamelCase" value="true"/>
  9. </settings>
  10. <!-- 配置类型别名 -->
  11. <typeAliases>
  12. <package name="xyz.zhouge.ssm.pojo"/>
  13. </typeAliases>
  14. </configuration>

b>创建数据库表

  1. create database if not EXISTS db_ssm_crud;
  2. use db_ssm_crud;
  3. create table tb_department(
  4. `dep_id` int PRIMARY key auto_increment,
  5. `dep_name` varchar(25)
  6. );
  7. create table tb_employee(
  8. `emp_id` int PRIMARY key auto_increment,
  9. `emp_name` varchar(25) not null,
  10. `emp_gender` varchar(4),
  11. `emp_email` varchar(25),
  12. `emp_depId` int,
  13. foreign key(`emp_depId`) REFERENCES tb_department(`dep_id`)
  14. );

c>逆向工程 链接

  1. <!DOCTYPE generatorConfiguration PUBLIC
  2. "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  3. "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
  4. <generatorConfiguration>
  5. <context id="simple" targetRuntime="MyBatis3">
  6. <!-- 数据库的连接信息 -->
  7. <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
  8. connectionURL="jdbc:mysql://zhouge.xyz:3306/db_ssm_crud"
  9. userId="admin"
  10. password="991227zg@.">
  11. </jdbcConnection>
  12. <!-- javaBean的生成策略-->
  13. <javaModelGenerator targetPackage="xyz.zhouge.ssm.pojo" targetProject=".\src\main\java">
  14. <property name="enableSubPackages" value="true" />
  15. <property name="trimStrings" value="true" />
  16. </javaModelGenerator>
  17. <!-- SQL映射文件的生成策略 -->
  18. <sqlMapGenerator targetPackage="mapper" targetProject=".\src\main\resources">
  19. <property name="enableSubPackages" value="true" />
  20. </sqlMapGenerator>
  21. <!-- Mapper接口的生成策略 -->
  22. <javaClientGenerator type="XMLMAPPER" targetPackage="xyz.zhouge.ssm.mapper" targetProject=".\src\main\java">
  23. <property name="enableSubPackages" value="true" />
  24. </javaClientGenerator>
  25. <!-- 逆向分析的表 -->
  26. <table tableName="tb_employee" domainObjectName="Employee"/>
  27. <table tableName="tb_department" domainObjectName="Department"/>
  28. </context>
  29. </generatorConfiguration>
  1. @Test
  2. public void testMBG() throws Exception{
  3. List<String> warnings = new ArrayList<String>();
  4. boolean overwrite = true;
  5. File configFile = new File("mbg.xml");
  6. ConfigurationParser cp = new ConfigurationParser(warnings);
  7. Configuration config = cp.parseConfiguration(configFile);
  8. DefaultShellCallback callback = new DefaultShellCallback(overwrite);
  9. MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,callback, warnings);
  10. myBatisGenerator.generate(null);
  11. }

5>修改mapper文件

6>搭建Spring单元测试

5、测试mapper

三、查询功能

四、新增功能

五、修改功能

六、删除功能

七、总结