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

常见网站建设公司术语网站优化公司排名

常见网站建设公司术语,网站优化公司排名,wordpress多主题插件下载,体育台球直播在线观看介绍 缓存,就是将经常访问的数据,放到内存中,减少对数据库的访问,提高查询速度。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.yidumall.com/news/95719.html

相关文章:

  • 杭州医疗器械网站制作口碑营销成功案例
  • 建设路街道办事处门户网站专门培训seo的网站
  • 美食网站建设目的站长之家seo查找
  • 张店网站制作设计公司海南乐秀同城群软件下载
  • 网站主页用ps做免费代理上网网站
  • 北京市建设工程造价管理协会网站厦门网站的关键词自动排名
  • 赤峰做网站哪家好友情链接交换平台免费
  • 汕头网站制作公司全网自媒体平台大全
  • 现在花钱做那个网站好呀南宁网站seo外包
  • 做网站盐城推销产品的软文500字
  • 网站设计标注图用什么做的宣传软文模板
  • 泸州网站建设深圳设计公司
  • 做html网站模板下载地址网站seo系统
  • 网站上做地图手机上显示不出来的营销型网站外包
  • 网站后角色管理权限怎么设置?深圳搜索优化排名
  • 重庆网站开发免费网站收录网站推广
  • 廊坊做网站优化网站如何做优化排名
  • 淘宝做首页热点的什么网站seo入门视频
  • 在线客服系统免费windows优化大师官方
  • 做体育最好的网站英文网站建设
  • 面包店网站建设论文百度网盘网页版登录入口官网
  • 上海公司网站设百度云搜索引擎官方入口
  • 东易日盛装饰公司地址南京seo推广优化
  • 福州网站制作建设百度查询
  • 内蒙古建设兵团网站浙江搜索引擎优化
  • 免费推广网站翻译英文火狐搜索引擎
  • ps做素材下载网站有哪些小红书seo关键词优化多少钱
  • 做免费网站推广开头语bt磁力
  • 网站内容建设百度小说风云榜总榜
  • 网站开发设计合同网站制作的流程是什么