mybatis12--一级缓存

摘要:
=Null){session.close();}}/***验证一级缓存的存在*myBatis的一级缓存始终处于打开状态,无法关闭*/@Testpublicvoid test1(){Studentstudent=dao.selectStudentById;System.out.println;//查询同一id对象Studentstuent2=dao.selectStudentById;System.out.println缓存查询——查询指定学生的信息以验证mybatis缓存查询的基础*/验证添加、删除和检查对一级缓存的影响!

验证一级缓存的存在

对应的实体类

/**
 *学生对应的实体类
 */
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文件

<?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.StudentDao">

    <!-- 查询指定学生的信息    验证一级缓存的存在 -->
     <select id="selectStudentById" resultType="Student">
      select  sid,sname from  student where sid=#{xxx}
    </select>
    
</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);
    }
    
}

查询语句的结果是:

mybatis12--一级缓存第1张

 验证mybatis缓存查询的依据!

在dao中增加一个方法

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

修改mapper文件

<?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.StudentDao">

    <!-- 查询指定学生的信息    验证mybatis缓存查询的依据! 
          两个查询语句的id不一致,但是sql语句一样-->
     <select id="selectStudentById" resultType="Student">
      select  sid,sname from  student where sid=#{xxx}
    </select>
    
     <select id="selectStudentById2" resultType="Student">
      select  sid,sname from  student where sid=#{xxx}
    </select>
    
</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);
    }

mybatis12--一级缓存第2张

查询的结果是:

mybatis12--一级缓存第3张

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

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

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

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

在mapper中新增

    <!-- 新增一个学生 -->
    <insert id="addStudent">
      insert into student values(#{sId},#{sName})
      <!--#{sId},#{sName} 对应的是实体类中的属性名  -->
    </insert>

增加测试代码

    /**
     * 验证增删改对一级缓存的影响
     * 之前是只有一条查询语句!
     * 但是加上新增语句之后发现出现了再次查询!
     * 
     * 因为增删改查操作都要清空缓存,把数据同步到数据库,
     * 保证后续的查询得到正确的结果集!
     */
    @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);
    }

得到的结果是:

mybatis12--一级缓存第4张

免责声明:文章转载自《mybatis12--一级缓存》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C# zip文件操作帮助类【转】数据结构:位图法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

python爬取图片遇见src乱码: data:image/png;base64

Python抓取图像并遇到src乱码:data:image/png;Base64会抓取您喜欢的图像,但图像的src在抓取的代码中出现了乱码:data:image/png;base64.)“”头1,编码=字符串。splitdata=b64decodedwithopenasf:f.写入。close()注意:我还没有成功。。。。。。...

java环境安装Firefox驱动/IE驱动

如果selenium版本是3.x的,需要使用驱动包解决办法:往项目中添加火狐驱动包,并加载驱动的配置。...

QSS基础-设置控件样式

1.QSS基础-设置类似控件的样式“QSS基础:QtStyleSheetQt样式表用于设置控件的样式和样式(例如控件的背景色、字体颜色、字体大小等)。功能与CSS相似。功能类似。“”从PyQt5.Qt重新导入*从PyQt5.QtGuidimport*从PyQt5.QtWidgetsimport*importsysclassBasicQSS(QWidget):...

C# AES的128位、192位、256位加密

这里将不解释C#AES的128位、192位和256位加密原理。这里我们主要讨论AES的CBC加密模式中128位、192位和256位加密之间的差异,并参考对称加密和块加密的四种模式。16位密钥对应128位加密,24位密钥对应192位加密,32位密钥对应256位加密,矢量必须为16位。“);ifthrownewException(”指定的密钥长度不能小于16位。...

Linux系统添加永久静态路由的方法

按照Linux启动的顺序,rc本地的内容在Linux中的所有服务启动后执行。也就是说,local的内容在netfs之后执行。也就是说,当netfs启动时,不会添加服务器上的静态路由,因此无法成功装载netfs。...

SQLServer2008/2012 安装、添加sa用户和密码、多实例安装、修改端口, 重启生效

因为我们无法使用sa用户登录,所以只能使用系统登录。登录后,我们需要修改相关属性。右键单击数据库,然后单击属性。在这个sa的登录属性对话框中,我们首先需要设置这个用户的密码。由于此用户名是系统的用户,我们可以直接填写密码,然后再次确认密码。然后在对话框中,单击左上角的第二个属性服务器角色。这是您要实现的添加用户的角色。...