MyBatis 緩存

一、創建與數據庫表對應的實體類

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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章