67,513
社区成员
发帖
与我相关
我的任务
分享
<select id="findSingle" resultType="student" flushCache="true" useCache="true" >
SELECT * FROM N1 WHERE ID=#{id}
</select>
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
InputStream input = TestDao.class.getClassLoader().getResourceAsStream(
"SqlMapConfig.xml");
SqlSessionFactory factory = builder.build(input);
SqlSession session1 = factory.openSession(true);
SqlSession session2 = factory.openSession(true);
CostMapperDao dao=session1.getMapper(CostMapperDao.class);
dao.findSingle(2);
session1.close();
CostMapperDao dao2=session2.getMapper(CostMapperDao.class);
dao2.findSingle(2);
session2.close();
get key //注:调用Cache接口实现类中的getObject方法
获取到的对象为:null
DEBUG [main] - Cache Hit Ratio [org.dingxin.mapper.CostMapperDao]: 0.0
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection 12451959.
DEBUG [main] - ==> Preparing: SELECT * FROM N1 WHERE ID=?
DEBUG [main] - ==> Parameters: 2(Integer)
DEBUG [main] - <== Total: 1
clear all data //注:调用Cache接口实现类中的clear方法
put key-1234809571:3046303058:org.dingxin.mapper.CostMapperDao.findSingle:0:2147483647:SELECT * FROM N1 WHERE ID=?:2:development
DEBUG [main] - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@be0077]
DEBUG [main] - Returned connection 12451959 to pool.
get key //注:调用Cache接口实现类中的getObject方法
获取到的对象为:[Student{id=2, age=26, name='Y', sex='F', phone=null}]
DEBUG [main] - Cache Hit Ratio [org.dingxin.mapper.CostMapperDao]: 0.5
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Checked out connection 12451959 from pool.
DEBUG [main] - ==> Preparing: SELECT * FROM N1 WHERE ID=?
DEBUG [main] - ==> Parameters: 2(Integer)
DEBUG [main] - <== Total: 1
clear all data //注:调用Cache接口实现类中的clear方法
put key-1234809571:3046303058:org.dingxin.mapper.CostMapperDao.findSingle:0:2147483647:SELECT * FROM N1 WHERE ID=?:2:development
DEBUG [main] - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@be0077]
DEBUG [main] - Returned connection 12451959 to pool.
Disconnected from the target VM, address: '127.0.0.1:61555', transport: 'socket'
clear all data //注:调用Cache接口实现类中的clear方法
但接着又将查询到的结果存入了缓存中,
put key-1234809571:3046303058:
org.dingxin.mapper.CostMapperDao.findSingle:0:2147483647:SELECT * FROM N1 WHERE ID=?:2:development
DEBUG [main] - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@be0077]
DEBUG [main] - Returned connection 12451959 to pool.
第二次查询的时候
get key //注:调用Cache接口实现类中的getObject方法
获取到的对象为:[Student{id=2, age=26, name='Y', sex='F', phone=null}][/b]
DEBUG [main] - Cache Hit Ratio [org.dingxin.mapper.CostMapperDao: 0.5
明显是取到了缓存但是下面为什么又执行了一次查询呢?明明已经取到结果了为什么还要再查询?
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Checked out connection 12451959 from pool.
DEBUG [main] - ==> Preparing: SELECT * FROM N1 WHERE ID=?
DEBUG [main] - ==> Parameters: 2(Integer)
DEBUG [main] - <== Total: 1