用注解驱动的方式来使用 Redis。和数据库事务一样,Spring 提供了缓存的管理器和相关的注解来支持类似于 Redis 这样的键值对缓存。
准备测试环境
首先,定义一个简单的角色 POJO,代码如下所示。
package com.pojo;
import java.io.Serializable;
public class Role implements Serializable {
private static final long serialVersionUID = 3447499459461375642L;
private long id;
private String roleName;
private String note;
// 省略setter和getter方法
}
注意:该类实现了 Serializable 接口,这说明这个类支持序列化,这样就可以通过 Spring 的序列化器,将其保存为对应的编码,缓存到 Redis 中,也可以通过 Redis 读回那些编码,反序列化为对应的 Java 对象。
接下来是关于 MyBatis 的开发环境,这样我们就可以操作数据库了。创建 RoleMapper.xml,代码如下所示。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dao.RoleDao">
<select id="getRole" resultType="com.pojo.Role">
select id, role_name as
roleName, note from t_role where id = #{
id}
</select>
<delete id="deleteRole">
delete from t_role where id=#{
id}
</delete>
<insert id="insertRole" parameterType="com.pojo.Role"
useGeneratedKeys="true" keyProperty="id">
insert into t_role (role_name,
note) values(#{
roleName}, #{
note})
</insert>
<update id="updateRole" parameterType="com.pojo.Role">
update t_role set
role_name = #{
roleName}, note = #{
note} where id = #{
id}
</update>
<select id="findRoles" resultType="com.pojo.Role">
select id, role_name as roleName, note from t_role
<where>
<if test="roleName != null">
role_name like concat('%', #{
roleName}, '%')
</if>
<if test="note != null">
note like concat ('%', #{
note},'%')
</if>
</where>
</select>
</mapper>
然后,需要一个 MyBatis 角色接口,以便使用这样的一个映射文件,代码如下所示。
package com.dao;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.pojo.Role;
public interface RoleDao {
public Role getRole(Long id);
public int deleteRole(Long id);
public int insertRole(Role role);
public int updateRole(Role role);
public List<Role> findRoles(@Param("roleName") String roleName, @Param("note") String note);
}
注解 @Repository 表示它是一个持久层的接口。通过扫描和注解联合定义 DAO 层,就完成了映射器方面的内容。定义角色服务接口(RoleService),代码如下所示,不过服务接口实现类会在后面谈起,因为它需要加入 Spring 缓存注解,以驱动不同的行为。
package com.service;
import java.util.List;
import com.pojo.Role;
public interface RoleService {
public Role getRole(Long id);
public int deleteRole(Long id);
public Role insertRole(Role role);
public int updateRole(Role role);
public List<Role> findRoles