Spring Boot整合 MyBatis 和 Redis
1.Java配置的方式
1.1初识 Java 配置的方式
spring从开始出现到现在,共经历了5个大的版本,并一次推出了3种配置方式:
1.2实现 Java 配置的方式
实现Java配置的方式,主要同通过两个注解:
@Configuration
public class JavaConfig {
@Bean
public Employee employee() {
Employee employee = new Employee();
employee.setUserName("小明");
return employee;
}
}
1.3Java 配置的方式扩展
2.Spring Boot 整合 MyBatis
2.1 整合步骤分析
回顾使用Spring整合MyBatis过程
第一步:引入mybatis-spring 依赖
第二步:编写配置信息,整合Spring和MyBatis。
spring Boot整合MyBatis有两种方法:
1.2mybatis-spring方式
步骤:
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatis-springartifactId>
<version>2.0.1version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.5.1version>
dependency>
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: mysql://localhost:3306/mall?serverTimezone=GMT%2B8&...
username: 数据库用户名
password: 数据库密码
@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();
}
@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 方式
步骤:
<dependency>
<groupId>org.mybatis.spring.bootgroupId>
<artifactId>mybatis-spring-boot-starterartifactId>
<version>2.0.1version>
dependency>
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.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(isolation=Isolation.PROPAGATION_REQUIRED)
@Transactional(propagation=Propagation.ISOLATION_DEFAULT)
3.Spring Boot 整合 Redis
步骤:
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-redisartifactId>
dependency>
spring:
redis:
host: Redis服务的IP
port: Redis服务端口,通常为 6379
password: 连接Redis服务的密码
database: 0
@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());
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);
}
@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"));
}
}