SpringBoot的学习二:整合Redis,JPA,Mybatis
Redis介绍:
是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API
特性:
- Redis 与其他 key - value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
添加依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
<!--添加连接池的依赖-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
配置redis的链接信息:
#Redis spring: redis: host: localhost # Redis服务器地址 database: 0 # Redis数据库索引(默认为0) port: 6379 # Redis服务器连接端口 password: # Redis服务器连接密码(默认为空) jedis: pool: max-active: 8 # 连接池最大连接数(使用负值表示没有限制) max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制) max-idle: 8 # 连接池中的最大空闲连接 min-idle: 0 # 连接池中的最小空闲连接 timeout: 3000ms # 连接超时时间(毫秒)
编写控制器controller,这里注意:
RedisTemplate和StringRedisTemplate的区别:
1. 两者的关系是StringRedisTemplate继承RedisTemplate。
2. 两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。
3. SDR默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略。
StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。
RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。
@RestController
public class HelloController {
@Autowired
StringRedisTemplate stringRedisTemplate;
// RedisTemplate redisTemplate;
@GetMapping("/set")
public void set() {
ValueOperations ops = stringRedisTemplate.opsForValue();
ops.set("keyYun", "valueYun");
}
@GetMapping("/get")
public void get(){
ValueOperations<String,String> ops = stringRedisTemplate.opsForValue();
System.out.println(ops.get("keyYun"));
}
}
启动程序,打印出结果
SpringBoot整合JPA:
JPA:用于对象持久化的API,是JavaEE 5.2平台标准的ORM规范,使得应用程序以统一的方式访问持久层
注入依赖,并添加Druid依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.28</version> <scope>runtime</scope> </dependency>
添加配置:
# 数据库的基本配置 spring.datasource.username=root spring.datasource.password=root spring.datasource.url=jdbc:mysql://loaclhost:3306/day04?useUnicode=true&characterEncoding=UTF-8 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource # JPA配置 spring.jpa.database=mysql # 在控制台打印SQL spring.jpa.show-sql=true # 数据库平台 spring.jpa.database-platform=mysql # 每次启动项目时,数据库初始化策略 spring.jpa.hibernate.ddl-auto=update # 指定默认的存储引擎为InnoDB spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect
创建一个实体类
//@Entity:表明这是一个实体类,项目启动时会自动针对该类生成一张表 @Entity(name = "t_user") public class user { @Id //表示这个字段时id,唯一不标识 // GenerationType.IDENTITY:自增长 @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String name; private String address;
//省略set和get方法
编写接口如下
//JpaRepository:提供了一些基本的数据操作方法,例如保存,更新,删除,分页查询等 public interface userDao extends JpaRepository<user,Integer > { }
编写测试类
@RunWith(SpringRunner.class) @SpringBootTest class Demo3ApplicationTests { @Autowired userDao userDao; @Test void contextLoads() { user u = new user(); u.setName("愚者"); u.setAddress("理想国度"); userDao.save(u); } }
运行,数据库中查看结果
redis单机版配置以上信息就行了,具体测试请参考博客https://blog.csdn.net/weixin_38312502/article/details/80916222
Spring Boot 整合myBatis
注入依赖
<!--mybatis起步依赖--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency>
<!-- MySQL连接驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
创建实体类user,具体参考上面
编写mapper,
@Mapper public interface userMapper { @Select("select * from t_user") public List<user> findAll(); }
添加数据源库配置,具体参考上面
编写测试类
@Autowired userMapper userMapper; @Test public void find(){ List<user> users = userMapper.findAll(); for (user u :users){ System.out.println(u); } }
控制台运行程序,打印结果:
注意事项: mapper接口要加入@Mapper注解,这是配置mapper扫描,如果想一劳永逸的话,就在程序接口加全局扫描
@SpringBootApplication @MapperScan(basePackages = "com.yun.demo3.mapper") public class Demo3Application { public static void main(String[] args) { SpringApplication.run(Demo3Application.class, args); } }