MyBatis缓存

一 MyBatis缓存

   /*

   1. MyBatis缓存的分类

   2. 一级缓存: 一级缓存缓存的是SQL语句

   3. 二级缓存:二级缓存缓存的是结果集对象

   */

   1. MyBatis缓存的分类

       1>一级缓存:一级缓存缓存的是SQL语句

       2>二级缓存:二级缓存缓存的是结果集对象

   2. 一级缓存: 一级缓存缓存的是SQL语句

       /*

       1>概念的内涵

       2>获得jack的List<User> users:应用举例

       3>获得jack的List<User> users:解释说明

       */

       1>概念的内涵

            一级缓存缓存的是SQL语句.只有第一个语句提交才能缓存。当条件内容发生

            变化,仍然可以使用缓存。

       2>获得jack的List<User> users:应用举例

            List<User> users = sqlSession.selectList("com.my.mapper.UserMapper.getUser",

                           "jack");

           System.out.println(users);

           //sqlSession.commit(); //①

           List<User> users2 = sqlSession.selectList("com.my.mapper.UserMapper.getUser",

                           "jack");//② 更换为admin,仍然可以缓存

           System.out.println(users);

       3>获得jack的List<User> users:解释说明

           输出只发起一次SQL语句,如果我们把②出的参数jack改为admin,发现还是只发

           起一次SQL语句,但是会设置不同参数,如果把①处去掉注释(语句提交),会发现

           不会有缓存。

   3. 二级缓存:二级缓存缓存的是结果集对象

       /*

       1>概念的内涵

       2>启用二级缓存的配置

       3>获得jack的List<User> users:应用举例

       4>获得jack的List<User> users:解释说明

       */

       1>概念的内涵

             二级缓存缓存的是结果集对象。

       2>启用二级缓存的配置

            /*

             <1>MyBatis的全局cache配置

             <2>在Mapper XML文件中设置缓存,默认情况下是没有开启缓存的

             <3>在Mapper XML文件配置支持cache后,如果需要对个别查询进行调整,

                可以单独设置cache

            */

             <1>MyBatis的全局cache配置

                <settings>

                    <setting name="cacheEnabled" value="true"/>

             <2>在Mapper XML文件中设置缓存,默认情况下是没有开启缓存的

                <cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>

                注意事项:readOnly设为true,默认是false,表示结果集对象需要被序列化

             <3>在Mapper XML文件配置支持cache后,如果需要对个别查询进行调整,

                可以单独设置cache

                 <select id="selectAll" resultType="Emp" useCache="true">

       3>获得jack的List<User> users:应用举例

            List<User> users = sqlSession.selectList("com.my.mapper.UserMapper.getUser",

                           "jack");

           System.out.println(users);

           //sqlSession.commit(); //①

           List<User> users2 = sqlSession.selectList("com.my.mapper.UserMapper.getUser",

                           "jack");//② 更换为admin,仍然可以缓存

           System.out.println(users);

       4>获得jack的List<User> users:解释说明

        <1>打开①处注释(执行提交),②处仍然使用jack,发现结果只执行了一次SQL语句

        <2>打开①处注释(执行提交), 如果把②处改为admin,执行了2次SQL语句,这说明

           二级缓存是缓存结果集对象的

原文地址:https://www.cnblogs.com/fifiyong/p/5819889.html