spring缓存注解

spring缓存注解

一:mybatisplus常用注解

注解解释(案例)
@TableName表名称对应
@TableId主键, auto
@TableField字段名称对应
@DS选择多数据源:@DS(“从数据源名称”)
@Mapper接口和sql映射(ResultMapper),自动加载到springIoC容器

二: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配置
  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
#屏蔽mybatisplus的多数据源自动启动
  autoconfigure:
    exclude: com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration

5.Dao接口

@Repository
public interface IPrivsDao extends JpaRepository<Privs,Long> {
}
//写法两种:
//第一种:SQL语句
@Repository
public interface IRolePrivsDao extends JpaRepository<RolePrivs,Long> {
    //根据表中roleId,查询RolePrivs
    @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
    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缓存注解

在这里插入图片描述

1.常用注解解释

@EnableCaching用于启用 Spring 的缓存支持,通常在 Application 类上使用
@Cacheable表示方法调用结果可以被缓存,当再次调用这个方法并使用相同的参数时,缓存数据将直接返回,而不是执行方法。可以在类级别或方法级别上使用;cacheNames 属性可以将缓存注解与相应的缓存名称绑定,实现对应用程序数据的分类和管理
@CachePut表示方法调用结果应该被缓存,与 @Cacheable 注解不同的是,@CachePut 不会检查缓存是否已经存在,它总是会调用方法并将结果保存到缓存中,适用于刷新缓存的场景
@CacheEvict表示从缓存中删除一个或多个条目,以便在下次查询时,重新加载新的实时数据。可以使用 allEntries = true 参数清空整个缓存区
@Caching表示在一个方法或类级别上定义一组缓存行为,可以指定同时使用多个缓存注解

属性介绍:

cacheNames指定缓存组件的名字
allEntriestrue 参数清空整个缓存区。
key缓存数据时使用的key,默认使用方法参数
keyGeneratorkey 的生成器。 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")       //指定缓存名称findAll
    public List<User> findAll() {
        List<User> userList = userMapper.findAll();
        return userList;
    }

(2)@CachePut
@CachePut(cacheNames = "findAll")        //总是会调用方法并将结果保存到缓存中
    public List<User> delUserById() {   //返回结果List
        userMapper.deleteById(2L);
        return userMapper.findAll();
    }

(3)@CacheEvict
@CacheEvict(cacheNames = "findAll",allEntries = true)  //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,因为它们的值相等。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值