1 java 将特定字符串转换为集合
2 java 将json字符串转换为集合
mybatis的一级缓存,二级缓存
程序中为什么使用缓存?
先了解一下缓存的概念:原始意义是指访问速度比一般随机存取存储器快的一种RAM,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。对于我们编程来说,所谓的缓存,就是将程序
或系统经常要调用的对象(临时数据)存在内存中,一遍其使用时可以快速调用,不必再去创建新的重复的实例。这样做可以减少系统的开销,提高效率。
对缓存有了一定的了解以后就知道了使用缓存是为了减少和数据库的交互次数,提高执行效率。那么下一个问题来了。什么样的数据能使用缓存,什么样的数据不能使用?
这是我们使用缓存必须要明确的事情,实际上适用于缓存的数据:经常查询并且不经常改变的,并且的数据的正确与否对最终结果影响不大的、不适用于缓存的数据:经常改变的数据,数据的正确与否对最终
结果影响很大的。
Mybatis中的一级缓存和二级缓存到底缓存了什么,缓存了以后又有什么效果,缓存的数据什么时候会被清空?
一级缓存:它指的是Mybatis中sqlSession对象的缓存,当我们执行查询以后,查询的结果会同时存入到SqlSession为我们提供的一块区域中,该区域的结构是一个Map,当我们再次查询同样的数据,mybatis会
先去sqlsession中查询是否有,的话直接拿出来用,当SqlSession对象消失时,mybatis的一级缓存也就消失了,同时一级缓存是SqlSession范围的缓存,当调用SqlSession的修改、添加、删除、commit(),close等
方法时,就会清空一级缓存。
二级缓存:他值得是Mybatis中SqlSessionFactory对象的缓存,由同一个SqlSessionFactory对象创建的SqlSession共享其缓存,但是其中缓存的是数据而不是对象,所以从二级缓存再次查询出得结果的对象与
第一次存入的对象是不一样的。
通过简单的例子来加深理解一级缓存和二级缓存。
详情请见:
关闭二级缓存使用如下标签属性:
<select id="save" parameterType="XX" flushCache="true" useCache="false"> </select>
<insert id="addCheckDetail" parameterType="java.util.List">
INSERT INTO CHECK_DETAIL(
CHECK_id,CHECK_DATE,CHECK_WEEK,EMP_CODE,CHECK_TIME,CHECK_LATE,CHECK_LEAVE_EARLY,
CHECK_EXCEPTION,CHECK_WORK_OVERTIME,EMP_NAME,DEPT_NAME,CHECK_LATE_TIME,DESCRIPTION
)
select CHECK_DETAIL_SEQ.NEXTVAL,cd.* from(
<foreach collection="list" item="item" index="index" separator="union all">
select
#{item.checkDate,jdbcType=VARCHAR},
#{item.checkWeek,jdbcType=VARCHAR},
#{item.empCode,jdbcType=VARCHAR},
#{item.checkTime,jdbcType=VARCHAR},
#{item.checkLate,jdbcType=VARCHAR},
#{item.checkLeaveEarly,jdbcType=VARCHAR},
#{item.checkException,jdbcType=VARCHAR},
#{item.checkWorkOverTime,jdbcType=VARCHAR},
#{item.empName,jdbcType=VARCHAR},
#{item.deptName,jdbcType=VARCHAR},
#{item.checkLateTime,jdbcType=VARCHAR},
#{item.description,jdbcType=VARCHAR}
from dual
</foreach>
) cd
</insert>