1 不在同一个sqlSession对象中
下面比较下载同一个sqlSession和不在同一sqlSession下面的两种情况:
同一sqlSession:
@Testpublic final voidtestQueryClazzById() {
SqlSession session=sqlSessionFactory.openSession();try{
ClazzMapper clazzMapper= session.getMapper(ClazzMapper.class);
Clazz clazz1= clazzMapper.queryClazzById(1);
System.out.println("clazz1 = "+clazz1);
Clazz clazz2= clazzMapper.queryClazzById(1);
System.out.println("clazz2 = "+clazz2);
}finally{
session.close();
}
如下sql执行了一次,第二次queryClazzById没有执行sql,直接从缓存里面获取。
DEBUG [main] - ==> Preparing: select c.*,s.id stu_id,s.name stu_name from t_clazz c left join t_student s on c.id = s.clazz_id where c.id = ?
DEBUG [main] - ==> Parameters: 1(Integer)
DEBUG [main] - <== Total: 3
clazz1 = Clazz [id=1, name=javaEE20170228, stus=[Student [id=1, name=stu0228_张三, clazz=null], Student [id=2, name=stu0228_李四, clazz=null], Student [id=3, name=stu0228_王五, clazz=null]]]
clazz2 = Clazz [id=1, name=javaEE20170228, stus=[Student [id=1, name=stu0228_张三, clazz=null], Student [id=2, name=stu0228_李四, clazz=null], Student [id=3, name=stu0228_王五, clazz=null]]]
不在同一sqlSession:
@Testpublic final voidtestQueryClazzById() {
SqlSession session=sqlSessionFactory.openSession();try{
ClazzMapper clazzMapper= session.getMapper(ClazzMapper.class);
Clazz clazz1= clazzMapper.queryClazzById(1);
System.out.println("clazz1 = "+clazz1);
}finally{
session.close();
}//緩存失效的四種情況//不在同一個對象中
SqlSession session2 =sqlSessionFactory.openSession();try{
ClazzMapper clazzMapper2= session2.getMapper(ClazzMapper.class);
Clazz clazz2= clazzMapper2.queryClazzById(1);
System.out.println("clazz2 = "+clazz2);
}finally{
session2.close();
}
}
看下结果:
DEBUG [main] - ==> Preparing: select c.*,s.id stu_id,s.name stu_name from t_clazz c left join t_student s on c.id = s.clazz_id where c.id = ?
DEBUG [main] - ==> Parameters: 1(Integer)
DEBUG [main] - <== Total: 3
clazz1 = Clazz [id=1, name=javaEE20170228, stus=[Student [id=1, name=stu0228_张三, clazz=null], Student [id=2, name=stu0228_李四, clazz=null], Student [id=3, name=stu0228_王五, clazz=null]]]
DEBUG [main] - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@6895a785]
DEBUG [main] - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@6895a785]
DEBUG [main] - Returned connection 1754638213 to pool.
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Checked out connection 1754638213 from pool.
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@6895a785]
DEBUG [main] - ==> Preparing: select c.*,s.id stu_id,s.name stu_name from t_clazz c left join t_student s on c.id = s.clazz_id where c.id = ?
DEBUG [main] - ==> Parameters: 1(Integer)
DEBUG [main] - <== Total: 3
clazz2 = Clazz [id=1, name=javaEE20170228, stus=[Student [id=1, name=stu02