spring缓存注解
一:mybatisplus常用注解
二:JPA的使用
1.引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
2.配置jpa
spring:
datasource:
druid:
url: jdbc:mysql://192.168.237.131:3306/user_db?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root
password: 123
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
show-sql: true
database: mysql
3.实体类
@Table(name = “privs_tab”) | 表名 |
---|
@Entity | 实体类 |
@Id | 主键 |
@GeneratedValue(strategy = GenerationType.IDENTITY) | 表示使用数据库的自增长机制来生成主键。 |
@Column(name=“privs_id”) | 指定数据库中的字段名 |
@Table(name = "privs_tab")
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Privs {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="privs_id")
private Long id;
@Column(name="privs_name")
private String name;
@Column(name="privs_desc")
private String desc;
@Column(name="privs_create_by")
private String createBy;
@Column(name="privs_create_time")
private Date createTime;
@Column(name="privs_update_time")
private Date updateTime;
}
4.启动模块yml的配置
server:
port: 9099
logging:
level:
com.wnhz.book: debug
knife4j:
enable: true
spring:
application:
name: book-jpa
autoconfigure:
exclude: com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration
5.Dao接口
@Repository
public interface IPrivsDao extends JpaRepository<Privs,Long> {
}
@Repository
public interface IRolePrivsDao extends JpaRepository<RolePrivs,Long> {
@Query(value = "SELECT * FROM rp_tab WHERE rp_role=?",nativeQuery = true)
List<RolePrivs> findRpsbyRoleId(Long roleId);
}
@Repository
public interface IUserDao extends JpaRepository<User,Long> {
User findByUsernameAndPassword(String username,String password);
}
6.启动类
@SpringBootApplication
@EntityScan("com.wnhz.book.jpa")
@EnableCaching
public class JpaApp {
public static void main(String[] args) {
SpringApplication.run(JpaApp.class);
}
}
三:spring缓存注解
![在这里插入图片描述](https://img-blog.csdnimg.cn/ddea1bab841d4813bfe84e9a0d9bd215.png)
1.常用注解解释
@EnableCaching | 用于启用 Spring 的缓存支持,通常在 Application 类上使用 |
---|
@Cacheable | 表示方法调用结果可以被缓存,当再次调用这个方法并使用相同的参数时,缓存数据将直接返回,而不是执行方法。可以在类级别或方法级别上使用;cacheNames 属性可以将缓存注解与相应的缓存名称绑定,实现对应用程序数据的分类和管理 |
@CachePut | 表示方法调用结果应该被缓存,与 @Cacheable 注解不同的是,@CachePut 不会检查缓存是否已经存在,它总是会调用方法并将结果保存到缓存中,适用于刷新缓存的场景 |
@CacheEvict | 表示从缓存中删除一个或多个条目,以便在下次查询时,重新加载新的实时数据。可以使用 allEntries = true 参数清空整个缓存区 |
@Caching | 表示在一个方法或类级别上定义一组缓存行为,可以指定同时使用多个缓存注解 |
属性介绍:
cacheNames | 指定缓存组件的名字 |
---|
allEntries | true 参数清空整个缓存区。 |
key | 缓存数据时使用的key,默认使用方法参数 |
keyGenerator | key 的生成器。 key 和 keyGenerator 二选一使用 |
cacheManager | 可以用来指定缓存管理器。从哪个缓存管理器里面获取缓存。 |
condition | 可以用来指定符合条件的情况下才缓存 |
unless | 否定缓存。当 unless 指定的条件为 true ,方法的返回值就不会被缓存。当然你也可以获取到结果进行判断 |
sync | 是否使用异步模式。 |
2.使用方法
1.启动类@EnableCaching
@SpringBootApplication
@EntityScan("com.wnhz.book.jpa")
@EnableCaching
public class JpaApp {
public static void main(String[] args) {
SpringApplication.run(JpaApp.class);
}
}
2.注解实现缓存方法
(1)@Cacheable
@Cacheable(cacheNames = "findAll")
public List<User> findAll() {
List<User> userList = userMapper.findAll();
return userList;
}
(2)@CachePut
@CachePut(cacheNames = "findAll")
public List<User> delUserById() {
userMapper.deleteById(2L);
return userMapper.findAll();
}
(3)@CacheEvict
@CacheEvict(cacheNames = "findAll",allEntries = true)
public void rmUserById(long id) {
userMapper.deleteById(id);
}
四:附加
Integer b = 31788888;
Integer a = 31788888;
boolean f = (a==b);//false
解释输出结果
在 Java 中,对于基本数据类型(如 int、byte、char 等),比较它们的值是否相等可以使用 == 运算符。但是对于包装类(如 Integer、Byte、Character 等),比较它们的值是否相等时需要注意。
a 和 b 都是 Integer 类型的对象,而不是基本数据类型。当我们使用 == 运算符比较两个对象时,实际上是在比较它们的引用,即判断两个对象是否指向同一个内存地址。所以值是false。
在 Java 中,对于 Integer 类型的对象,范围在 -128 到 127 之间的值会被缓存,即复用同一个对象。而超出此范围的值,每次都会创建一个新的对象。
在你的例子中,a 和 b 的值都是 31788888,超出了缓存范围。因此,虽然它们的值相等,但是它们并不是指向同一个内存地址的对象,所以 a == b 的结果是 false。
如果要比较 Integer 类型的值是否相等,应该使用 equals() 方法:
boolean f = a.equals(b); // 使用 equals() 方法比较值是否相等
或者:
boolean f = (a.intValue()==b.intValue()); // 使用 数据类型转换方法,比较值是否相等
注:使用 equals() 方法会比较两个对象的值是否相等,而不仅仅是比较引用。在这个例子中,a.equals(b) 的结果将会是 true,因为它们的值相等。
als() 方法:
boolean f = a.equals(b); // 使用 equals() 方法比较值是否相等
或者:
boolean f = (a.intValue()==b.intValue()); // 使用 数据类型转换方法,比较值是否相等
注:使用 equals() 方法会比较两个对象的值是否相等,而不仅仅是比较引用。在这个例子中,a.equals(b) 的结果将会是 true,因为它们的值相等。