MyBatis 一级缓存,二级缓存
来源:互联网 发布:python explode 编辑:程序博客网 时间:2024/05/01 20:44
一级缓存:
一级缓存是基于PerpetualCache(MyBatis自带)的HashMap本地缓存,作用范围为session域内,当session flush或者close之后,该session中所有的cache就会被清空。
二级缓存:
二级缓存就是global caching,它超出session范围之外,可以被所有SqlSession共享,开启它只需要在MyBatis的核心配置文件(mybatis-config.xml)settings中设置即可。
二级缓存的配置:
(1) MyBatis的全局cache配置,需要在mybatis-config.xml的settings中设置,代码如下:
Student类:
private Integer sid;private String sname;
Teacher类:
private Integer tid;private String tname;private List<Student> tudent=new ArrayList<Student>();
先将以上的实体类进行封装。
然后续写以下的接口并写出一个实现方法:
public interface TeacherDao { //书写一个根据 老师编号 获取 所教的学生集合 public Teacher getstudentteacherid(int tid); //多对多sql}
然后就该在小配置中SQL语句了
<?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="cn.bdqn.dao.TeacherDao"> <resultMap id="teachermapper" type="Teacher"> <id column="tid" property="tid"></id> <result column="tname" property="tname"></result> <collection property="tudent" ofType="Student"> <id column="sid" property="sid"></id> <result column="sname" property="sname"></result> </collection> </resultMap> <select id="getstudentteacherid" resultMap="teachermapper"> select student.sid,sname,teacher.tid,tname from student,teacher_student,teacher where student.sid=teacher_student.sid and teacher.tid=teacher_student.sid AND teacher.tid=#{tid} </select></mapper>
之后就又到了测试类了噢
package cn.bdqn.test;import cn.bdqn.dao.TeacherDao;import cn.bdqn.entity.Student;import cn.bdqn.entity.Teacher;import cn.bdqn.util.Userinfoutil;import org.apache.ibatis.session.SqlSession;import org.junit.Test;import java.io.IOException;/** * Created by java on 2017/7/16. */public class TeacherTest { //多对多 @Test public void testteacher() throws IOException { Userinfoutil u=new Userinfoutil(); SqlSession session=u.sqls(); TeacherDao dao=session.getMapper(TeacherDao.class); Teacher teacher=dao.getstudentteacherid(1); System.out.println(teacher.getTname()); for (Student stu:teacher.getTudent()) { System.out.println(stu.getSname()); } }}
那么多对多的测试结束之后,就来到了重点的一二级缓存了
首先写一个实现方法,我们就按照ID来进行查询。
public StudentINfo stud(int id);//根据id查询
之后在小配置中书写SQL语句
<!-- 根据id查询--> <select id="stud" resultType="StudentINfo"> select * from studentinfo where stuId=#{stuId} </select>//根据id查询 一级缓存存在性的证明@Testpublic void fout() { String path = "userinfo-config.xml"; InputStream inputStream = null; try { inputStream = Resources.getResourceAsStream(path); SqlSessionFactory ss = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = ss.openSession(); StudentINfo stu = session.selectOne("stud", 3); System.out.println(stu.getStuName()); System.out.println("1====================================1"); StudentINfo stu2 = session.selectOne("stud", 3); System.out.println(stu2.getStuName()); session.close(); } catch (IOException e) { e.printStackTrace(); }}//根据id查询 增删改对一级缓存的影响@Testpublic void four() { String path = "userinfo-config.xml"; InputStream inputStream = null; try { inputStream = Resources.getResourceAsStream(path); SqlSessionFactory ss = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = ss.openSession(); StudentINfoDao dent=session.getMapper(StudentINfoDao.class); StudentINfo stu = session.selectOne("stud", 3); System.out.println(stu.getStuName()); StudentINfo s=new StudentINfo(); s.setStuAge(23); s.setStuName("轩轩"); s.setStuDate(new Date()); dent.add(s); System.out.println("1====================================1"); StudentINfo stu2 = session.selectOne("stud", 3); System.out.println(stu2.getStuName()); session.close(); } catch (IOException e) { e.printStackTrace(); }}@Test //二级缓存 public void Sendfive() throws IOException { SqlSession session=Userinfoutil.sqls(); StudentINfoDao stu=session.getMapper(StudentINfoDao.class); StudentINfo stu1=stu.stud(3); System.out.println(stu1.getStuName()); session.close(); System.out.println("2==============================================2"); SqlSession session1=Userinfoutil.sqls(); StudentINfoDao stt=session1.getMapper(StudentINfoDao.class); StudentINfo stu2=stt.stud(3); System.out.println(stu2.getStuName()); }}二级缓存的关闭:
<settings> <setting name="cacheEnabled" value="false"/> //全局关闭</settings>在mapper文件配置支持cache后,局部关闭:<select id="stud" resultType="StudentINfo" useCache=""false >......
</select>
阅读全文
0 0
- MyBatis一级缓存,二级缓存
- MyBatis 一级缓存,二级缓存
- mybatis一级缓存二级缓存
- mybatis:一级缓存And二级缓存
- mybatis一级缓存和二级缓存
- MyBatis(4)一级缓存,二级缓存
- Mybatis 一级缓存和二级缓存
- MyBatis一级缓存和二级缓存
- mybatis 一级缓存和二级缓存
- Mybatis一级缓存和二级缓存
- mybatis一级缓存、二级缓存初探
- Mybatis一级缓存与二级缓存
- mybatis一级缓存、二级缓存和自定义二级缓存
- MyBatis缓存分为一级缓存和二级缓存
- MyBatis一级缓存,二级缓存,自定义缓存
- MyBatis缓存技术(一级缓存、二级缓存)
- mybatis的缓存机制(一级缓存二级缓存)
- MyBatis之缓存(一级缓存、二级缓存)
- 闲聊KMP算法
- 基于DreamService的屏保
- JS事件---DOM2级事件处理:addEventListener()、removeEventListener()、attachEvent()
- Mysql linux监控脚本分析
- 判断两个链表是否相交,若相交,求交点,若带环呢/fork继承问题
- MyBatis 一级缓存,二级缓存
- python变量以及类型(含笔记)
- VS2015动态库编程之MFC规则动态库(中)
- 数理逻辑基础概念
- 20170716——调试NRF51822蓝牙模块总结
- Python3 运算符
- 替换空格
- 笨办法学python之习题26
- 亚信实习日记