MyBatis 二级缓存
二级缓存
需要在映射文件中添加该标签
<cache/>
映射语句中的select语句将会被缓存, 映射语句中的insert update delete 语句将会刷新缓存
缓存使用LRU算法回收
现在完整的配置文件如下
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- 定义接口类 --> <mapper namespace="com.ming.MyBatis.RoleMapper"> <resultMap type="role" id="roleMap"> <!-- id为主键映射关系 其中数据库中的id为主键 --> <id column="id" property="id" javaType="int" jdbcType="INTEGER"/> <!-- result为其他基本数据类型和实体类之间的映射 映射关系为role_name 到 roleName之间的映射 数据类型为string到VARCHAR之间的映射关系 --> <result column="role_name" property="roleName" javaType="string" jdbcType="VARCHAR"/> <!-- 这里使用typeHandler表示遇到此处理集的时候,将会执行com.ming.MyBatis.StringTypeHandler --> <result column="note" property="note" typeHandler="com.ming.MyBatis.StringTypeHandler"/> </resultMap> <select id="getRole" parameterType="int" resultType="com.ming.MyBatis.POJO.Role"> SELECT id, role_name as roleName, note FROM t_role WHERE id = #{id} </select> <select id="findRoleByteMap" parameterType="map" resultMap="roleMap"> SELECT id, role_name, note FROM t_role WHERE role_name LIKE CONCAT('%', #{roleName}, '%') AND note LIKE CONCAT('%', #{note}, '%') </select> <select id="findRoleByteMap1" resultMap="roleMap"> SELECT id, role_name, note FROM t_role WHERE role_name LIKE CONCAT('%', #{roleName}, '%') AND note LIKE CONCAT('%', #{note}, '%') </select> <resultMap id="studentSelfCardMap" type="com.ming.MyBatis.POJO.StudentCard"> <id column="uid" property="uid"/> <result column="student_number" property="studentNumber"/> <result column="birthplace" property="birthplace" /> <result column="date_of_issue" property="dateOfIssue" jdbcType="DATE" javaType="java.util.Date"/> <result column="end_date" property="endDate" jdbcType="DATE" javaType="java.util.Date"/> <result column="remarks" property="remarks" /> </resultMap> <select id="findStudentSelfCardByStudentId" parameterType="int" resultMap="studentSelfCardMap"> SELECT student_card.uid, student_card.student_number, student_card.remarks, student_card.end_date, student_card.date_of_issue, student_card.birthplace FROM student_card WHERE student_card.uid = #{studentId}; </select> <resultMap id="studentMap" type="com.ming.MyBatis.POJO.Student"> <id column="uid" property="uid"/> <result column="student_name" property="studentName"/> <result column="gender" property="gender"/> <result column="student_id_number" property="studentIdNumber"/> <result column="remarks" property="remarks"/> <!--将会调用接口代表的SQL 进行执行查询 --> <association property="studentCard" column="uid" select="com.ming.MyBatis.RoleMapper.findStudentSelfCardByStudentId"/> </resultMap> <select id="getStudent" parameterType="int" resultMap="studentMap"> SELECT student.uid, student.gender, student.remarks, student.student_id_number, student.student_name FROM student WHERE student.uid = 1; </select> <cache/> </mapper>
返回的POJO对象需要实现java.io.Serializable的接口
同样也可以修改
<cache eviction="LRU" flushInterval="100000" size="1024" readOnly="true"/>
java的几种引用
强引用
Object object = new Object();
这是强引用,当其赋值为null的时候,若内存空间不足,gc会直接清理掉该内存对象
软引用
需要使用SoftReference类,实现软引用
String str = new String("ming"); // 强引用 SoftReference<String> softRef = new SoftReference<String>(str); // 软引用
这里为软引用
当内存不足时,会转换为软引用,垃圾回收器进行回收
使用场景 浏览器的回退按钮
弱引用
一旦不定时运行的垃圾回收其发现有弱引用对象,将会直接回收该对象
需要使用WeakReference
String str = new String("ming"); WeakReference<String> weakReference = new WeakRefrence<String>(str);
当垃圾回收其扫描到回收对象的时候,会直接进行回收掉
弱引用需要和引用队列联合使用
虚引用
如果一个对象仅仅持有虚引用,那么就和没有一样.使用的是PhantomReference
虚引用要和引用队列一起使用,垃圾回收线程回收该线程时,会发送一个系统通知,达到通知的作用.
相关推荐
xiuyangsong 2020-07-26
Dullonjiang 2020-07-19
dongxurr 2020-07-26
无情的你无情的雨 2020-07-18
喝绿茶的猫 2020-06-12
xiuyangsong 2020-11-16
Nishinoshou 2020-11-09
jimgreatly 2020-09-01
dongxurr 2020-08-18
Dullonjiang 2020-08-15
Dullonjiang 2020-08-11
Dullonjiang 2020-08-09
dongxurr 2020-08-08
yunzhonmghe 2020-08-07
jimgreatly 2020-08-03
Dullonjiang 2020-07-30
jimgreatly 2020-07-27
liqiancao 2020-07-26