菜菜菜。。。。。。
在学习springboot中自带的缓存时,使用@CachePut时遇到的小麻烦:
我在Mapper层update的方法返回值是一个对象:
@Update("UPDATE employee SET lastName=#{lastName},email=#{email},gender=#{gender},d_id=#{dId} WHERE id=#{id}")
public Employee updateEmp(Employee employee);
但是这个时候我们要注意,update的SQL语句的返回值是一个int类型的,所以如果你的方法返回值要写成void或int,不能写成一个对象(ps:mybatis版本是2.1.3)不然会报错:
Mapper method 'xxx.xxx.xxx' has an unsupported return type: xxxxx
并且@CachePut缓存也不会生效,你更新后再次查询就是一个null;
所以,我们应该这么写:
mapper层:
@Update("UPDATE employee SET lastName=#{lastName},email=#{email},gender=#{gender},d_id=#{dId} WHERE id=#{id}")
public int updateEmp(Employee employee);
service层:
@Cacheable(cacheNames = "emp")
//@Override
public Employee getEmpByid(Integer id) {
System.out.println("查询"+id+"号员工");
return employeeMapper.getEmpByid(id);
}
@CachePut(cacheNames = "emp",key = "#result.id")
//@Override
public Employee updateEmp(Employee employee) {
System.out.println("更新了:"+employee);
employeeMapper.updateEmp(employee);
return employee;
}
要注意的是@Cacheable注解和@CachePut注解两个方法的返回值要一致,@CachePut才能生效
遇到这个问题是以为我想直接实现Mapper层的接口,导致两个注解的方法返回值不一致;
返回值不一致问题肯定能解决,等学到了在更新;希望对大家有帮助!!!!!!
唉,还是太菜,浪费我好长的时间!!!!;