springBoot整合jpa和redis缓存

说说JPA——JPA是一组规范,并不是一个框架。hibernate是实现JPA最好的一个框架,框架使用JPA对数据库的交互进行了封装,,所以我下面的案例中就是用hibernate框架进行融合展示的。 
说说redis——redis也是相当于数据库,不过传统的数据库数据是存储在硬盘中的,而redis可以将数据存储在内存中,书写的速度很快,所以它被用于缓存当中,使用redis缓存后操作数据库得到数据时,只要redis服务器不关,就可以直接从缓存中得到数据。
 redis支持的数据类型(可以直接去官网学习,很详细):
  ——String:String数据结构是简单的key-value类型,value其实不仅可以是String,也可以是数字。 
  ——Hsah:hash 是一个 string 类型的 field 和 value 的映射表,适合用于储存对象。 
  ——List:链表
  ——Set:set 对外提供的功能与list类似是一个列表的功能,特殊之处在于 set 是可以自动排重的
  ——zSet:和set相比,sorted set增加了一个权重参数score,使得集合中的元素能够按score进行有序排列。 
  关于redis的知识推荐一篇博客:https://blog.csdn.net/qq_34337272/article/details/80012284?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

案例目录:
在这里插入图片描述
pom.xml文件:

<!-- springBoot父依赖 -->
  <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.2.5.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
  </parent>
  
  <properties>
      <java.version>1.8</java.version>
  </properties>
  	
  <dependencies>
  	<!-- springBoot——redis依赖 -->
  	<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
  	
  	<!-- springBoot测试依赖 -->
  	<dependency>
		<!-- this is needed or IntelliJ gives junit.jar or junit-platform-launcher:1.3.2 not found errors -->
		<groupId>org.junit.platform</groupId>
		<artifactId>junit-platform-launcher</artifactId>
		<scope>test</scope>
	</dependency>
  
  	<!-- 阿里数据连接池 -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.1.10</version>
    </dependency>
    
    <!-- jsp的支持依赖 -->
    <dependency>
       <groupId>org.apache.tomcat.embed</groupId>
       <artifactId>tomcat-embed-jasper</artifactId>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
        <version>5.1.6</version>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

application.properties配置文件,redis服务器地址,端口,密码这些是默认的,还有下面的一些rides配置根据自己的情况进行配置,我写出来是为了记录笔记:

#连接池
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://localhost:3306/spring_aop?useUnicode=true&characterEncoding=utf8
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#修改为阿里连接池
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

#springmvc
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.jsp

#jpa
spring.jpa.database: mysql
spring.jpa.show-sql: true
spring.jpa.hibernate.naming.physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

#redis
#Redis服务器地址  
spring.redis.host=127.0.0.1
#Redis服务器连接端口  
spring.redis.port=6379  
#Redis服务器连接密码(默认为空)  
spring.redis.password=  
#连接池最大连接数(使用负值表示没有限制)  
spring.redis.pool.max-active=200  
#连接池最大阻塞等待时间(使用负值表示没有限制)  
spring.redis.pool.max-wait=-1  
#连接池中的最大空闲连接  
spring.redis.pool.max-idle=10 
#连接池中的最小空闲连接  
spring.redis.pool.min-idle=0  

RedisApplication类,@SpringBootApplication注解指定类为主配置文件,@EnableCaching注解指定配置文件在启动的时候允许使用redis缓存。

@SpringBootApplication
@EnableCaching	//配置文件开启时,允许使用缓存,,注意要把redis服务器打开。。
public class RedisApplication {

	public static void main(String[] args) {
		SpringApplication.run(RedisApplication.class, args);
	}
}

Bank对象类,@Componentc注解实例化,@Entity注解指定实体类,@Table(name=“bank”)注解指定表:

@Component
@Entity
@Table(name="bank")
public class Bank implements java.io.Serializable{

	private static final long serialVersionUID = 1L;
	
	@Id
	@Column(name="bid")
	private int bid;
	@Column(name="bname")
	private String bname;
	@Column(name="money")
	private double money;

BankDao接口,继承封装好的简单CRUD-JpaRepository,和复杂CRUD-JpaSpecificationExecutor 的接口。

public interface BankDao extends JpaRepository<Bank, Integer>,JpaSpecificationExecutor<Bank>,Serializable{

}

service接口就一个查询全部的功能,这里直接上serviceimpl类,@Cacheable(cacheNames=“bank.service.all”)注解作用是在指定需要用缓存的方法,cacheNames是给缓存指定一个名字,可以随便写。

@Service("bankService")
public class BankServiceImpl implements BankService{
	@Autowired
	private BankDao bankDao;
	
	//在要缓存的方法上面添加缓存注解
	@Cacheable(cacheNames="bank.service.all")
	@Override
	public List<Bank> findAll() {
		return bankDao.findAll();
	}

}

没有做页面,控制层就不写了,直接通过springBoot测试类测试一下,测试两次会发现第一次发出了sql语句,第二次是从缓存中得到数据的,所以没有发出sql语句:

@SpringBootTest
public class ApplicationTest {
	@Autowired
	private BankService bankService;

	@Test
	void testFindAll() {
		System.out.println(bankService.findAll().size());
	}
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值