当前位置: 首页 > news >正文

四川省城乡建设厅官方网站杭州网站设计公司电话

四川省城乡建设厅官方网站,杭州网站设计公司电话,网络营销是啥意思,网站建设公司 知道万维科技介绍 缓存,就是将经常访问的数据,放到内存中,减少对数据库的访问,提高查询速度。Mybatis中也有缓存的概念,分为一级缓存和二级缓存。 一级缓存 一级缓存是Mybatis中SqlSession对象的缓存。当我们执行查询以后&#x…

介绍

  缓存,就是将经常访问的数据,放到内存中,减少对数据库的访问,提高查询速度。Mybatis中也有缓存的概念,分为一级缓存和二级缓存。

一级缓存

  一级缓存是Mybatis中SqlSession对象的缓存。当我们执行查询以后,结果会存入到SqlSession为我们提供的一块区域中,该区域的结构是一个Map,当我们再次查询同样的数据,mybatis会先去Sqlsession中查询是否有,有的话直接拿出来用,没有再去查询数据库。

  示例:
  Mysql中建好表,对应的实体类也建好:

import java.util.Date;public class Student {private int id;private int age;private String name;private Date birthday;private int score;//get和set方法省略...}

  Dao层的接口:

import java.io.Serializable;public interface StudentMapper {Student getById(Serializable id);}

  Dao层的xml:

<mapper namespace="com.gs.spring_boot_demo.mybatis.mapper.StudentMapper"><select id="getById" resultType="com.gs.spring_boot_demo.mybatis.entity.Student">select * from student where id = #{id}</select></mapper>

  测试类:

import com.gs.spring_boot_demo.mybatis.entity.Student;
import com.gs.spring_boot_demo.mybatis.mapper.StudentMapper;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
public class MybatisTest {@Autowiredprivate StudentMapper mapper;@Autowiredprivate SqlSessionFactory factory;@Testpublic void test() {// 不能用这种方式,这种方式不会有一级缓存的//Student student = mapper.getById(1);//Student student1 = mapper.getById(1);//System.out.println(student == student1);SqlSession sqlSession = factory.openSession();StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);Student student = mapper.getById(1);Student student1 = mapper.getById(1);System.out.println(student == student1);}}

  看到控制台的输出:

在这里插入图片描述

  查了2次id为1的数据,但只有1条发送sql的日志,并且2次查询的结果是同一个对象。说明一级缓存生效了。
  清除一级缓存的方法也有很多,调用SqlSession对象的commit()、close()、clearCache()、增加、修改、删除时,就会删除一级缓存。

    @Testpublic void test() {SqlSession sqlSession = factory.openSession();StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);Student student = mapper.getById(1);//commit()也能清除//sqlSession.commit();sqlSession.clearCache();Student student1 = mapper.getById(1);System.out.println(student == student1);}

  再次查看控制台的日志:

在这里插入图片描述

  可以看到,因为删除了一级缓存,所以第二次的查询去发送sql查数据库了,2个查询结果也自然不是同一个对象。

二级缓存

  一级缓存的前提条件是同一SqlSession对象,而二级缓存是跨SqlSession对象的,即多个SqlSession对象共享这一份缓存。当一级缓存关闭或提交后,一级缓存会转入到二级缓存,并且缓存的是数据而不是对象。

  示例:
  二级缓存默认未开启,首先开启它:

  Dao层的xml中添加:

<cache/>

  xml的select标签设置属性useCache:

<mapper namespace="com.gs.spring_boot_demo.mybatis.mapper.StudentMapper"><cache/><select id="getById" resultType="com.gs.spring_boot_demo.mybatis.entity.Student" useCache="true">select * from student where id = #{id}</select></mapper>

  开启二级缓存后,实体类Student要实现Serializable接口:

import java.io.Serializable;
import java.util.Date;public class Student implements Serializable {private int id;private int age;private String name;private Date birthday;private int score;//get和set方法省略...}

  测试类:

@Test
public void test() {SqlSession sqlSession = factory.openSession();StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);Student student = mapper.getById(1);//把一级缓存转入到二级缓存,同时清空一级缓存sqlSession.commit();//相同的SqlSession对象Student student1 = mapper.getById(1);System.out.println(student == student1);//不同的SqlSession对象SqlSession sqlSession1 = factory.openSession();StudentMapper mapper1 = sqlSession1.getMapper(StudentMapper.class);Student student2 = mapper1.getById(1);System.out.println(student == student2);
}

  看到控制台的日志:

在这里插入图片描述

  getById(Serializable id)调用了3次,但是只有1条sql日志,后面的2次调用都是查的二级缓存,但对象不是同一个,所以说缓存的是数据而不是对象。

http://www.15wanjia.com/news/184851.html

相关文章:

  • cetos做网站河南安阳市区号
  • 广州seo网站多少钱精准粉丝引流推广
  • 龙岗南联网站建设公司数码公司网站建设调查
  • 中山本地网站建设南京网站设计案例
  • 免费h5响应式网站搭建杭州建设网站平台的哪些企业比较好
  • 套用模板网站南京的网站制作公司
  • 网站后台重置密码怎么做沈阳做网站优秀公司
  • 沙发网站建设做iframe跳转怎么自适应网站
  • 有什么做同城的网站宁夏建设网站公司
  • wordpress安卓下载seo优化工具
  • 哪些网站可以做详情页视频解析网站如何做搜索
  • 不同性质网站网站首页设置伪静态
  • 网站设计毕业设计wordpress移动版样式
  • app调用网站网站修改数据
  • 做资源下载网站违法吗eclipse做的网站
  • 济南建设网站公司宣传片拍摄的意义
  • 做守望同人的网站网站开发前端简历
  • 网站网页的书签怎么做优化资源配置
  • 网站建设提供空间什么意思金融服务网站建设内容
  • 网站引用百度地图联想官网网上商城
  • 西宁制作网站多少钱基于html5的购物网站开发
  • 摄影作品出售网站苏州园区网站开发
  • 建设银行朝阳支行网站自己怎么开网站做销售
  • 深圳专业建站公司有哪些济南微信网站建设
  • 上海网站备案审核时间做aa视频网站
  • 网站备案接入服务商建设通类型网站叫啥
  • 宁波公司招聘如何做好网站关键词优化
  • 报价网站建设网站建设需要多久
  • 海口高端品牌网站建设企业推广托管
  • 呼伦贝尔市规划建设局网站做网站每年需要购买域名吗