天天看点

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(L);
            System.out.println(emp.getUserName());

            System.out.println("-----------------------------");
            emp.setUserEmail("张三");
            Emp emp1 = empMapper.selectById(L);
            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(L);
            System.out.println(emp.getUserName());

            System.out.println("-----------------------------");
            emp.setUserEmail("里斯");
            //执行delete删除操作
            empMapper.deleteByid (L);
            Emp emp3 = empMapper.selectById(L);
            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 :[email protected]

Actual :[email protected]

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