Mybatis入门系列之(十三)——一级缓存

一级缓存

在EmpMapper.java接口中增加如下方法:

/**
 * 根据id查询员工
 * @param id
 * @return
 */
Emp selectById(Long id);

/**
 * 根据id删除用户
 * @param id
 * @return
 */
int deleteByid(Long id);

在EmpMapper.xml配置文件中增加如下配置:

<select id="selectById" resultType="tk.mybatis.simple.model.Emp">
    SELECT * from emp where id = #{id}
</select>

<delete id="deleteByid">
    DELETE  FROM  emp where id = #{id}

测试缓存的代码如下:

public class CacheTest extends  BaseMapperTest{

    @Test
    public void testL1Cache(){
        SqlSession sqlSession = getSqlSession();
        Emp emp = null;
        try {
            EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
            emp = empMapper.selectById(3L);
            System.out.println(emp.getUserName());

            System.out.println("-----------------------------");
            emp.setUserEmail("张三");
            Emp emp1 = empMapper.selectById(3L);
            System.out.println(emp1.getUserName());

            Assert.assertEquals(emp,emp1);
        }finally {
            System.out.println("123");
            sqlSession.close();
        }

        System.out.println("开启新的sqlSession");
        sqlSession = getSqlSession();
        try {
            EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
            Emp emp2 = empMapper.selectById(3L);
            System.out.println(emp.getUserName());

            System.out.println("-----------------------------");
            emp.setUserEmail("里斯");
            //执行delete删除操作
            empMapper.deleteByid (2L);
            Emp emp3 = empMapper.selectById(3L);
            System.out.println(emp3.getUserName());

            Assert.assertEquals(emp2,emp3);
        }finally {
            System.out.println("123");
            sqlSession.close();
        }

    }

}

测试结果如下:

[DEBUG] 2018-05-01 07:11:25,897 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:159)
==> Preparing: SELECT * from emp where id = ?
[DEBUG] 2018-05-01 07:11:25,944 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:159)
==> Parameters: 3(Long)
[TRACE] 2018-05-01 07:11:26,007 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.trace(BaseJdbcLogger.java:165)
<== Columns: id, user_name, user_password, user_email, user_info, head_img, create_time
[TRACE] 2018-05-01 07:11:26,007 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.trace(BaseJdbcLogger.java:165)
<== Row: 3, test 3, 123456, email 3, <>, <>, 2018-04-29 13:33:33.0
[DEBUG] 2018-05-01 07:11:26,007 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:159)
<== Total: 1
test 3

分割线(“———————————————-”)

test 3
123
开启新的sqlSession
[DEBUG] 2018-05-01 07:11:26,101 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:159)
==> Preparing: SELECT * from emp where id = ?
[DEBUG] 2018-05-01 07:11:26,101 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:159)
==> Parameters: 3(Long)
[TRACE] 2018-05-01 07:11:26,163 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.trace(BaseJdbcLogger.java:165)
<== Columns: id, user_name, user_password, user_email, user_info, head_img, create_time
[TRACE] 2018-05-01 07:11:26,163 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.trace(BaseJdbcLogger.java:165)
<== Row: 3, test 3, 123456, email 3, <>, <>, 2018-04-29 13:33:33.0
[DEBUG] 2018-05-01 07:11:26,163 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:159)
<== Total: 1
test 3

分割线(“———————————————-”)

[DEBUG] 2018-05-01 07:11:26,163 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:159)
==> Preparing: DELETE FROM emp where id = ?
[DEBUG] 2018-05-01 07:11:26,163 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:159)
==> Parameters: 2(Long)
[DEBUG] 2018-05-01 07:11:26,241 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:159)
<== Updates: 1
[DEBUG] 2018-05-01 07:11:26,241 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:159)
==> Preparing: SELECT * from emp where id = ?
[DEBUG] 2018-05-01 07:11:26,257 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:159)
==> Parameters: 3(Long)
[TRACE] 2018-05-01 07:11:26,288 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.trace(BaseJdbcLogger.java:165)
<== Columns: id, user_name, user_password, user_email, user_info, head_img, create_time
[TRACE] 2018-05-01 07:11:26,288 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.trace(BaseJdbcLogger.java:165)
<== Row: 3, test 3, 123456, email 3, <>, <>, 2018-04-29 13:33:33.0
[DEBUG] 2018-05-01 07:11:26,288 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:159)
<== Total: 1
test 3
123

java.lang.AssertionError:
Expected :tk.mybatis.simple.model.Emp@75d4a5c2
Actual :tk.mybatis.simple.model.Emp@557caf28

结果:第一次查询只发送了一条sql语句,第二次查询发送了两条sql语句。

猜你喜欢

转载自blog.csdn.net/guo20082200/article/details/80153716