博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis12--一级缓存
阅读量:5017 次
发布时间:2019-06-12

本文共 3498 字,大约阅读时间需要 11 分钟。

验证一级缓存的存在

 

对应的实体类

/** *学生对应的实体类 */public class Student {        private  Integer sId;    private  String sName;    public Integer getsId() {        return sId;    }    public void setsId(Integer sId) {        this.sId = sId;    }    public String getsName() {        return sName;    }    public void setsName(String sName) {        this.sName = sName;    }    public Student(Integer sId, String sName) {        super();        this.sId = sId;        this.sName = sName;    }    public Student() {        super();    }    //在双向关联的时候    只能一方显示关联信息   否则会出现stackOverflow 异常    @Override    public String toString() {        return "Student [sId=" + sId + ", sName=" + sName +"]";    }    }

 

对应的数据库就是上面多对多练习中的student表

创建对应的dao

public interface StudentDao {    /**     * 根据学生的编号查询对应的信息     * 验证一级缓存的存在     */    Student selectStudentById(Integer sId);}

 

 

对应的mapper文件

 

对应的测试类代码

package cn.bdqn.test;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.ibatis.session.SqlSession;import org.junit.After;import org.junit.Before;import org.junit.Test;import cn.bdqn.bean.Student;import cn.bdqn.dao.StudentDao;import cn.bdqn.util.SessionUtil;public class TeacherTest {    StudentDao dao;    SqlSession session;    @Before    public void before() {        // 因为需要关闭session 需要把session提取出去        session = SessionUtil.getSession();        dao = session.getMapper(StudentDao.class);    }    @After    public void after() {        if (session != null) {            session.close();        }    }    /**     * 验证一级缓存的存在     * myBatis的一级缓存是一直开启的,并且不能关闭!     */    @Test    public void test1() {        Student student = dao.selectStudentById(1);        System.out.println(student);        //再次查询相同的id对象        Student student2 = dao.selectStudentById(1);        System.out.println(student2);    }    }

 

查询语句的结果是:

 

 验证mybatis缓存查询的依据!

在dao中增加一个方法

public interface StudentDao {    /**     *  验证mybatis缓存查询的依据!     */    Student selectStudentById(Integer sId);        Student selectStudentById2(Integer sId);}

 

修改mapper文件

 

增加测试代码

 

/**     * 验证查询的依据     * 两个查询都是查询id为1的学生对象,但是查询语句的id不一致     */    @Test    public void test2() {        Student student = dao.selectStudentById(1);        System.out.println(student);        //再次查询相同的id对象        Student student2 = dao.selectStudentById2(1);        System.out.println(student2);    }

 

 

查询的结果是:

 

 

 

/**     * 得到的结论是:     *  mybatis的查询依据是  :  mapper文件中sql的id   + sql语句!     *  hibernate底层查询的依据是: 查询对象的id!     *       *  其实缓存的底层是一个map,     *  map的key就是查询依据,value是查询的结果!     */

 

 验证增删改查对一级缓存的影响!

在dao中增加一个新增的方法

/**     * 验证增删改查对一级缓存的影响!     */    void addStudent(Student student);

 

在mapper中新增

insert into student values(#{sId},#{sName})

增加测试代码

/**     * 验证增删改对一级缓存的影响     * 之前是只有一条查询语句!     * 但是加上新增语句之后发现出现了再次查询!     *      * 因为增删改查操作都要清空缓存,把数据同步到数据库,     * 保证后续的查询得到正确的结果集!     */    @Test    public void test3() {        Student student = dao.selectStudentById(1);        System.out.println(student);        dao.addStudent(new Student(66, "新增学生"));        //再次查询相同的id对象        Student student2 = dao.selectStudentById(1);        System.out.println(student2);    }

 

得到的结果是:

 

转载于:https://www.cnblogs.com/999-/p/6431101.html

你可能感兴趣的文章
挺喜欢这个网站的
查看>>
CSU_BMW正式组队纪念赛出题+部分解题报告
查看>>
CentOS 7: Install vsftpd
查看>>
git上传项目到github教程
查看>>
asp:TextBox 设置为多行文本框显示
查看>>
Electron: 从零开始写一个记事本app
查看>>
mxonline实战11,课程详情页2,课程章节页
查看>>
UEditor编辑器的使用
查看>>
Eclipse JAVA文件注释乱码
查看>>
Android开发三 如何安装 Android SDK 和Eclipse 插件
查看>>
asp.net 按钮单击事件问题(自动弹出新窗口)
查看>>
【FLASH BUILDER 4.6 快捷键】只记几个对自己有帮助的
查看>>
数据库查询出现???及乱码问题,修改数据库语言
查看>>
再寄小读者之数学篇
查看>>
2014 年第六届全国大学生数学竞赛江西赛区赣南师范学院获奖名单(数学专业)
查看>>
[唐诗]长安古意-卢照邻
查看>>
多读书多看报,少吃零食多睡觉—2014总结,2015规划
查看>>
Microsoft JET Database Engine (0x80004005)
查看>>
前端面试(!!!)
查看>>
深入理解JavaScript 事件
查看>>