H2数据库

新建一个模块
image.png
image.png
image.png
schema.sql

  1. drop table if exists guest;
  2. create table guest(id int primary key auto_increment,name varchar,role varchar);

data.sql

insert into guest values(1,'黄晓明','店长'),
(2,'杨紫','前台'),(3,'klxh','dachu');

然后正常创建controller、service、mapper并编写代码,例如查询全部guest
image.png
成功执行

缓存简介、Spring缓存、缓存使用

image.png
image.png
image.png
写一个小demo感受一下
1.在入口类添加注解@EnableCaching
2.在service实现类的方法上使用@Cacheable(“缓存名”)
image.png
image.png
缓存名为guests(缓存通过键值对形式存储),只有当id>1时才会存入缓存

@Cacheable(value = "guests",key = "#id",condition = "#id>1")//unless与condition相反,不满足这个条件才存入
@Override
public Guest getGuestById(int id) {
    System.out.println("查询第" + id + "位嘉宾");
    return mapper.getGuestById(id);
}

缓存具体应用

前面讲到了查询操作时所用的缓存注解,下面来看看更改和删除操作
GuestMapper

@Update("update guest set name=#{name},role=#{role} where id=#{id}")
int updateGuest(Guest guest);

@Delete("delete from guest where id = #{id}")
int deleteGuest(int id);

@Delete("delete from guest")
int deleteAllGuest();

GuestService

/**
 * 使用缓存时  会把方法的返回值放入缓存中存储
 * 此时的返回值是特殊的   不是原来的void or int
 * @return
 */
Guest updateGuest(Guest guest);

void deleteGuest(int id);

void deleteAllGuest();

注意放到缓存中的意思就是,之后查询,这条更新过的记录就在缓存中了,可以直接从缓存中查
GuestServiceImpl

/**
 *@CachePut注解代表添加缓存
 * 设置key的值和cacheable保持一致
 * 方式一  拿到参数的id —— key = "#guest.id"
 * 方式二  拿到结果的id —— key = "#result.id"
 * @param guest
 * @return
 */
@CachePut(cacheNames = "guests",key = "#guest.id")
@Override
public Guest updateGuest(Guest guest) {
    System.out.println("更新第" + guest.getId() + "位嘉宾");
    mapper.updateGuest(guest);
    return guest;
}

//将对应id的记录从缓存中移除
@CacheEvict(cacheNames = "guests",key = "#id")
@Override
public void deleteGuest(int id) {
    System.out.println("删除第" + id + "位嘉宾");
    mapper.deleteGuest(id);
}

/**
 * @CacheEvict 属性
 * allEntries  删除所有实例
 * beforeInvocation  在方法调用之前  执行清除缓存逻辑
 * 如果没有beforeInvocation,方法若中途出错,缓存则没有清除
 */
@CacheEvict(cacheNames = "guests", allEntries = true, beforeInvocation = true)
@Override
public void deleteAllGuest() {
    System.out.println("删除所有嘉宾");
    mapper.deleteAllGuest();
}

image.png