一、创建与数据库表对应的实体类
public class User implements Serializable {
private int id;
private String username;
private String phone;
...
}
二、创建持久层接口
public interface IUserDao {
User findById(Integer userId);
}
三、创建持久层接口的映射文件
<mapper namespace="chu.yi.bo.dao.IUserDao">
<select id="findById" resultType="chu.yi.bo.domain.User" parameterType="int">
select * from user where id = #{uid};
</select>
</mapper>
四、一级缓存
IUserDao iUserDao = session.getMapper(IUserDao.class);
User user1 = iUserDao.findById(1);
User user2 = iUserDao.findById(1);
System.out.println(user1 == user2);
执行两次查询,查询同一条记录,但是只执行了一次 SQL 查询,一级缓存是 SqlSession 范围的缓存,当调用 SqlSession 的修改、添加、删除、提交、关闭方法,一级缓存情况。
五、二级缓存
二级缓存是 Mapper 映射级别的缓存,当多个 SqlSession 去操作同一个 Mapper 映射的 SQL 语句,多个 SqlSession 共享二级缓存,二级缓存跨 SqlSession。
六、开启二级缓存
第一步:在 SqlMapConfig.xml 文件中开启二级缓存
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
第二部:修改相关的持久层映射文件
<mapper namespace="chu.yi.bo.dao.IUserDao">
<!-- 开启二级缓存支持 -->
<cache></cache>
<!-- useCache="true" 当前语句支持二级缓存 -->
<select id="findById" resultType="chu.yi.bo.domain.User" parameterType="int" useCache="true">
select * from user where id = #{uid};
</select>
</mapper>