一、环境搭建

1、引入整合依赖

1)Mybatis依赖
mysql、druid、mybatis、mybatis-spring整合依赖
2)Spring依赖
spring-webmvc、spring-aspect、spring-test、spring-orm(整合,自动依赖tx和jdbc)
3)日志依赖
log4j-slf4j-impl(需要添加log4j2.xml文件)
4)其他依赖
junit、jackson-databind(ajax数据json解析)

  1. <dependencies>
  2. <!--mybatis-->
  3. <dependency>
  4. <!--mysql依赖-->
  5. <groupId>mysql</groupId>
  6. <artifactId>mysql-connector-java</artifactId>
  7. <version>5.1.38</version>
  8. </dependency>
  9. <dependency>
  10. <!--druid依赖-->
  11. <groupId>com.alibaba</groupId>
  12. <artifactId>druid</artifactId>
  13. <version>1.1.10</version>
  14. </dependency>
  15. <dependency>
  16. <!--mybatis依赖-->
  17. <groupId>org.mybatis</groupId>
  18. <artifactId>mybatis</artifactId>
  19. <version>3.5.4</version>
  20. </dependency>
  21. <dependency>
  22. <!--mybatis整合依赖-->
  23. <groupId>org.mybatis</groupId>
  24. <artifactId>mybatis-spring</artifactId>
  25. <version>2.0.4</version>
  26. </dependency>
  27. <!--spring-->
  28. <dependency>
  29. <groupId>org.springframework</groupId>
  30. <artifactId>spring-webmvc</artifactId>
  31. <version>5.2.5.RELEASE</version>
  32. </dependency>
  33. <dependency>
  34. <!--orm整合依赖,会自动依赖tx和jdbc-->
  35. <groupId>org.springframework</groupId>
  36. <artifactId>spring-orm</artifactId>
  37. <version>5.2.5.RELEASE</version>
  38. </dependency>
  39. <dependency>
  40. <!--aop编程-->
  41. <groupId>org.springframework</groupId>
  42. <artifactId>spring-aspects</artifactId>
  43. <version>5.2.5.RELEASE</version>
  44. </dependency>
  45. <dependency>
  46. <!--测试-->
  47. <groupId>org.springframework</groupId>
  48. <artifactId>spring-test</artifactId>
  49. <version>5.2.5.RELEASE</version>
  50. </dependency>
  51. <dependency>
  52. <!--单元测试-->
  53. <groupId>junit</groupId>
  54. <artifactId>junit</artifactId>
  55. <version>4.12</version>
  56. </dependency>
  57. <!--spring5日志-->
  58. <dependency>
  59. <groupId>org.apache.logging.log4j</groupId>
  60. <artifactId>log4j-slf4j-impl</artifactId>
  61. <version>2.13.3</version>
  62. </dependency>
  63. <!--ajax-json-->
  64. <dependency>
  65. <groupId>com.fasterxml.jackson.core</groupId>
  66. <artifactId>jackson-databind</artifactId>
  67. <version>2.10.4</version>
  68. </dependency>
  69. <dependencies>

2、项目结构搭建

image.png

二、Mybatis整合

1、步骤

1)引入jdbc.properties配置文件
2)配置注解 @MapperScan 扫描包
3)配置注解 @Import 引入其他配置类
3)创建数据源
3)创建SqlSessionFactoryBean

2、数据源配置

数据源配置步骤:
1、获取类加载器对象,并在类路径中获取数据库连接资源文件
使用Druid的DataSources,所以数据库连接资源文件中的key符合druid.xxx
image.png
2、创建一个Properties对象,加载所有数据库连接资源到配置对象
3、创建一个DruidDataSource对象,将自动从配置对象中获取属性对象

SqlSessionFactoryBean配置步骤(方法传入参数DruidDataSource):
1、创建一个SqlSessionFactoryBean对象
2、配置数据源
3、开启支持驼峰命名
4、获取SqlSessionFactory对象

  1. @Configuration
  2. @MapperScan(basePackages = "com.qt.mapper")
  3. @Import(SpringService.class) // 引入其他配置类
  4. public class SpringMybatis {
  5. @Bean
  6. public DruidDataSource getDataSoruce() {
  7. DruidDataSource dataSource = null;
  8. // 获取类加载器对象,并在类路径中获取资源文件
  9. InputStream is = SpringMybatis.class.getClassLoader().getResourceAsStream("jdbc.properties");
  10. Properties pp = new Properties();
  11. try {
  12. pp.load(is); // 加载所有资源配置到配置对象
  13. dataSource = new DruidDataSource();
  14. dataSource.configFromPropety(pp); // 自动从配置对象中获取属性对象,资源文件需要符合规则druid.xx
  15. } catch (IOException e) {
  16. e.printStackTrace();
  17. }
  18. return dataSource;
  19. }
  20. @Bean
  21. public SqlSessionFactory getSqlSessionFactory(DruidDataSource dataSource){
  22. SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
  23. factoryBean.setDataSource(dataSource);
  24. // mybatis的总配置,由当前factory的属性配置替代,通过mybatis的Configuration类设置原信息
  25. org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
  26. configuration.setMapUnderscoreToCamelCase(true); // 驼峰命名转换
  27. factoryBean.setConfiguration(configuration);
  28. SqlSessionFactory sessionFactory = null;
  29. try {
  30. sessionFactory = factoryBean.getObject();
  31. } catch (Exception e) {
  32. e.printStackTrace();
  33. }
  34. return sessionFactory;
  35. }
  36. }

三、日志整合

配置文件中,可根据需要将级别设置为error去除多余的信息,同时指定包名以打印需要显示的类的日志
image.png

四、Spring事务

事务:访问并可能更新数据库数据的一个程序执行单元
四大属性:
原子性:事务是一个原子操作, 由一系列动作组成. 事务的原子性确保动作要么全部完成要么完全不起作用
一致性:一旦所有事务动作完成,事务就被提交,保持数据和资源的一致性,与原子性密切相关
隔离性:多个事务处理相同的数据,但是每个事务是互不干扰,互相隔离的
持久性:事务完成提交后,任何操作和错误都无法改变所修改的数据

配置spring服务层:
1、扫描服务层组件
2、添加事务处理
1)声明spring管理事务管理器对象DataSourceTransactionManager
2)开启事务注解支持(在服务层类或方法上添加事务注解,默认策略:非只读事务)
image.png
image.png

添加事务后,当对数据库进行多条数据操作时,若中间出现异常,则整个事务不会提交,则即使之前已经有正常运行的操作,也不会对数据进行任何修改(事务回滚)

五、SpringMvc整合

web.xml配置:
1、创建监听器,通过监听器创建spring父容器,加载服务层和持久层配置
image.png
spring提供的用于监听servlet容器加载的类
tomcat启动会自动调用方法contextInitialized初始化一个web环境下的spring父容器
默认会读取xml创建一个spring web应用容器
父容器是唯一的,其他子容器会自动引入父容器依赖——setContext(父容器)

2、配置容器初始化的时候的参数
AnnotationConfigWebApplicationContext:基于注解方式创建一个spring的web应用父容器
image.png
这里由于SpringMybatis引入了其他配置类,所以只需要添加SpringMybatis配置类就行了

2、创建spring子容器
image.png

配置类配置:
1、扫描控制层(包扫描)
2、开启mvc注解支持
使用注解 @EnableWebMvc
3、实现 WebMvcConfigurer 接口,复写configureDefaultServletHandling方法
4、开启静态资源放行
image.png
5、自定义视图解析器(可不设置),匹配前缀和后缀
image.png