Spring Boot整合 MyBatis 和 Redis

Spring Boot整合 MyBatis 和 Redis

1.Java配置的方式

1.1初识 Java 配置的方式

spring从开始出现到现在,共经历了5个大的版本,并一次推出了3种配置方式:
  • XML配置方式
    • 优点:便于阅读、与业务代码解耦
    • 缺点:解析XML影响性能、开发工作量大,编译器不可校验配置正确性
  • 注解配置方式
    • 优点:开发便捷、编译期可校验配置正确性
    • 缺点:注解与代码绑定,配置分散,不利于统一处理
  • Java配置方式
    • 优点:编译期可校验配置正确性、配置简单,方便维护和管理、可以使用IDE的代码提示功能
    • 缺点:不利于新人学习和理解框架的原理

1.2实现 Java 配置的方式

实现Java配置的方式,主要同通过两个注解:
  • @Configuration
    • 标注于类上,表示该类为配置类,具有与Spring IoC配置文件相同的功能
  • @Bean
    • 标注于配置类的方法上,用于向该配置类注入一个Bean组件
    • 方法返回值为组件的对象类型
      示例:
  @Configuration
  public class JavaConfig { 
      @Bean
      public  Employee  employee() { 
          Employee employee = new Employee();
          employee.setUserName("小明");
          return employee;
      }
  }

1.3Java 配置的方式扩展

  • Bean组件的作用域
    • @Scope(“singleton”) :默认,单例模式,容器只创建一次实例
    • @Scope(“prototype”) :每次获取时创建新的实例
  • initMethod属性
    • 作用:被标注的方法将于容器启动前执行
    • 使用方法:@Bean(initMethod=“Bean中的初始化方法名”)
  • destroyMethod属性
    • 作用:被标注的方法将于容器销毁前执行
    • 使用方法:@Bean(destroyMethod=“Bean中的销毁方法名”)

2.Spring Boot 整合 MyBatis

2.1 整合步骤分析

回顾使用Spring整合MyBatis过程

第一步:引入mybatis-spring 依赖

第二步:编写配置信息,整合Spring和MyBatis。
  • 配置数据源DataSource.
  • 配置SqlSessionFactoryBean。SqlSessionFactoryBean封装了SqlSessionFactoryBuilder 创建SqlSessionFactory的过程,有了SqlSessionFactory就可以创建SqlSession,执行数据库操作。
  • 配置MapperScannerConfigurer。MapperScannerConfigurer可以以配置的方式生产映射器实现并注入给业务组件。

spring Boot整合MyBatis有两种方法:

  1. mybatis-spring 方式
  2. mybatis-spring-boot-starter 方式

1.2mybatis-spring方式

步骤:

  • 步骤1:引入依赖
    • MyBatis包
    • MyBatis-Spring整合包
  <dependency>
        <groupId>org.mybatisgroupId>
        <artifactId>mybatis-springartifactId>
        <version>2.0.1version>
    dependency>
    <dependency>
        <groupId>org.mybatisgroupId>
        <artifactId>mybatisartifactId>
        <version>3.5.1version>
    dependency>
  • 步骤2:编写配置信息
    • 配置数据源DataSource
      application.yml
spring:
        datasource:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: mysql://localhost:3306/mall?serverTimezone=GMT%2B8&...
          username: 数据库用户名
          password: 数据库密码
  • 配置SqlSessionFactoryBean
    • 创建工具类DataSourceUtil,添加@Configuration
    • 添加DataSource属性,注入数据源
    • 使用@Bean注解的方法构建SqlSessionFactoryBean
@Bean
      public SqlSessionFactory sqlSessionFactoryBean() {
          SqlSessionFactoryBean sqlSFBean= new SqlSessionFactoryBean();
          try {
              // 设置数据源
       	  sqlSFBean.setDataSource(dataSource);  
              // 为指定包下的类设置别名
              sqlSFBean.setTypeAliasesPackage("com.zhmbjavaconf.demo.entity");
              return sqlSFBean.getObject();
          } catch (Exception e) {throw new RuntimeException();
      }
  • 配置MapperScannerConfigurer
    • 创建工具类MyBatisConfig,添加@Configuration
    • 使用@Bean注解的方法构建MapperScannerConfigurer
  @Configuration
      public class MyBatisConf {
          @Bean
          public MapperScannerConfigurer mapperScannerConfigurer(){
       	 MapperScannerConfigurer msc = new MapperScannerConfigurer ( ) ;
              // 通过SqlSessionFactoryBean生产SqlSessionFactory实例       
      	 msc.setSqlSessionFactoryBeanName("sqlSessionFactoryBean");
              // 定义扫描的包
      	 msc.setBasePackage("com.zhmbjavaconf.demo.mapper");
              return mapperScannerConfigurer;
          }
      }

1.3mybatis-spring-boot-starter 方式

步骤:
  • 步骤1:引入依赖
<dependency>
     <groupId>org.mybatis.spring.bootgroupId>
      <artifactId>mybatis-spring-boot-starterartifactId>
      <version>2.0.1version>
  dependency>
  • 步骤2:编写配置信息
    • 配置数据源DataSource
      • application.yml
spring:
    datasource:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: mysql://localhost:3306/数据库名?serverTimezone=GMT%2B8&...
      username: 数据库用户名
      password: 数据库密码
  mybatis:
      mapper-locations: classpath:com/zhmbanno/demo/mapper/*.xml
      type-aliases-package: com.zhmbanno.demo.entity

1.4两种整合方式对比

  • 方式1:mybatis-spring方式
    • 依赖较多
    • 配置较少
    • 需搭配编写工具类
    • 可扩展性强
  • 方式2:mybatis-spring-boot-starter方式
    • 依赖较少
    • 配置略多
    • 无需编写工具类
    • 相对精简

1.5 数据源和事务

SpringBoot有内置数据库:H2,HSQL,Derby。都属于内存数据库。

DBCP2连接池

配置步骤:

添加依赖

<dependency>
    <groupId>org.apache.commonsgroupId>
    <artifactId>commons-dbcp2artifactId>
    <version>2.6.0version>
dependency>

编写application.yml配置文件

  spring:
      datasource:
        driver-class-name: 数据库驱动名
        url: 数据库连接地址
        username: 数据库用户名
        password: 数据库密码
        #数据源的类型
        type: org.apache.commons.dbcp2.BasicDataSource
        dbcp2:
          max-idle: 10
          max-total: 50

[注意]: 使用DBCP2配置连接池,需指定数据源类型,否则Spring Boot仍会使用内置的数据源。

事务控制

  • 注解方式的声明式事务——@Transactional
    • 添加到类上,作用于当前类的所有方法
    • 添加到方法上,作用于当前方法

扩展知识

  • 设置事务传播特性
    • @Transactional(isolation=Isolation.PROPAGATION_REQUIRED)
      
    • 默认:REQUIRED
  • 是指事务隔离级别
    • @Transactional(propagation=Propagation.ISOLATION_DEFAULT)
      
    • 默认使用数据库的隔离级别

3.Spring Boot 整合 Redis

步骤:
  • 步骤1:引入依赖步骤
 <dependency>
    <groupId>org.springframework.bootgroupId>
      <artifactId>spring-boot-starter-data-redisartifactId>
  dependency>
  • 2:配置Redis连接
    • application.yml
 spring:
      redis:
        host: Redis服务的IP
        port: Redis服务端口,通常为 6379
        password: 连接Redis服务的密码
        database: 0
  • 步骤3:创建RedisTemplate的Bean组件
    • Spring Boot提供
    • 高度封装Redis功能
      • 封装数据库操作类
      • 封装事务
      • 封装序列化、反序列化操作
 @Configuration
      public class RedisConfig {
          @Bean
          // 参数RedisConnectionFactory为Spring Boot自动注入
          public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory){
              RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
              redisTemplate.setConnectionFactory(factory);
    //注意    当存入redis数据库是可能会出现乱码问题   以下两种可以解决       
    /*redisTemplate.setKeySerializer(RedisSerializer.string());
        redisTemplate.setValueSerializer(RedisSerializer.string());*/
        redisTemplate.setDefaultSerializer(RedisSerializer.string());
              return redisTemplate;
          }
      }

注意:当存入redis数据库时,可能会出现乱码问题 需要在redisConfig类中添加: redisTemplate.setDefaultSerializer(RedisSerializer.string());

  • 步骤4:创建工具类
    • 注入Redis Template
    • 在工具类中封装向Redis存储、查询数据的方法
public boolean set(String key, Object object){ //向Redis中缓存数据
        ValueOperations<String, Object> vo = redisTemplate.opsForValue();
        vo.set(key, object);
        return true;
    }
    
    public Object get(String key){ //根据key从Redis中获取数据
        ValueOperations<String, Object> vo = redisTemplate.opsForValue();
        return vo.get(key);
    }
  • 步骤5:测试
    • 实现CommandLineRunner接口
 @Component
    public class MyRunner implements CommandLineRunner {
    
        @Resource
        private RedisUtil redisUtil;
    
        @Override
        public void run(String... args) throws Exception {
            redisUtil.set("age","猪猪");
            System.out.println("值为:" + redisUtil.get("age"));
        }
    }
  1. 总结
    Spring Boot整合 MyBatis 和 Redis_第1张图片

你可能感兴趣的:(spring,boot,java,spring)