mybatis 中的缓冲
package com.oaec.mybatis.test;
import com.oaec.mybatis.dao.StudentDao;
import com.oaec.mybatis.entity.Student;
import com.oaec.mybatis.util.MybatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
import java.util.HashSet;
import java.util.Set;
/**
* Created by admin on 2017-07-24.
*/
public class Test1 {
/*
* 缓存:视频缓存,音乐缓存,图片缓存
* mybaits中的缓存机制(一般来说是运行在内存中的,但是缓存不会无限制的扩大,当到了一定程度之后
* 缓存会按照一些策略,把一些数据写入到硬盘里):
* 缓存有什么作用:提高查询效率
* 把查询的结果放在缓存里,每次查询单的时候,先去缓存里面找一下,
* 如果有对应的结果,就直接从缓存中返还给用户,如果没有,再去数据库里查询。
*
* 在mybaits中,缓存分为两种,一种叫一级缓存(sqlSession级别的缓存),
* 第二种叫二级缓存(mapper级别的缓存)
* 一级缓存:在同一个sqlSession中,执行两次相同的sql语句,并且参数也相同的时候
* 第一次查询的结果会先写到缓存里,第二次查询的时候,先去缓存中找对应的结果,如果没有
* 再去数据库查询。
* 一级缓存是永远存在的,开发者无法关闭一级缓存。
* 说明:在同一个sqlSession中,只要是发生了任何的insert,update,delete操作
* 都会把一级缓存给清空。
*
* 一级缓存的实现机制:
*在SqlSession中存在一个HashMap<String,object>的一个集合
* 其中个的key就是你执行的sql的(statementIdnamespace+sqlId)+参数
* value就是你查询出来的对象。
*
*
* mybatis的二级缓存:
* 二级缓存,默认是不打开的,就是说可以不使用二级缓存,如果想使用的话
* 需要打开开关,开关位于myabtis的核心配置文件中的settings
* 有一个配置项叫做cacheEnabled,设置为true即可。
* 打开了总开关,还不够,需要给买一个mapper文件打开二级缓存的开关。
*
* 二级缓存的工作机制:
* 当你的二级缓存开关打开以后,sqlSession关闭之前,会把sqlSession中缓存的内容
* 写入到二级缓存。
* 想要实现二级缓存,对应缓存结果应该是实现了Serialiazable
*
*
*
* 集成第三方jar
* 由于缓存不是mybatis 的长项,所以运行集成第三方的缓存
* 其中ehcache是做的比较不错的一款产品。
* 想要在mybaits中集成echcache,需要两个jar
* 1、mybatis提供的于ehcache集成的jar
* 2、ehcache本身的jar
*
* 把相关的jar文件复制到lib下,然后打开ehcache-core-2.6.8.jar
* 去里面找到一个叫做ehcache-failsafe.xml文件,复制这个文件到src下
* 并且重命名为ehcache.xml,去掉里面的注释
*
* */
@Test
public void test1(){
SqlSession sqlSession=MybatisUtil.getFactory().openSession();
StudentDao dao=sqlSession.getMapper(StudentDao.class);
Student stu=dao.getStudentById(1);
System.out.println("stu:"+stu);
Student ns= new Student();
ns.setName("小黑");
ns.setAge(30);
dao.addStudent(ns);
System.out.println("--------------");
Student stu2=dao.getStudentById(1);
System.out.println("stu2:"+stu2);
}
@Test
public void test2(){
SqlSession sqlSession=MybatisUtil.getFactory().openSession();
StudentDao dao=sqlSession.getMapper(StudentDao.class);
Student stu=dao.getStudentById(1);
System.out.println("stu:"+stu);
//算起来SqlSession关闭,通过sqlSession获取的Dao的生命周期也结束了
sqlSession.close();
System.out.println("------------------");
//重新开启一个SqlSession
SqlSession sqlSession2=MybatisUtil.getFactory().openSession();
StudentDao dao2=sqlSession2.getMapper(StudentDao.class);
Student stu2=dao2.getStudentById(1);
System.out.println("stu2:"+stu2);
SqlSession sqlSession3=MybatisUtil.getFactory().openSession();
StudentDao dao3=sqlSession3.getMapper(StudentDao.class);
Student stu3=dao3.getStudentById(1);
System.out.println("stu3:"+stu3);
}
}
mybatis 中的缓冲的更多相关文章
- [原创]关于mybatis中一级缓存和二级缓存的简单介绍
关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...
- 记录一次bug解决过程:mybatis中$和#的使用
一.总结 mybatis中使用sqlMap进行sql查询时,经常需要动态传递参数.动态SQL是mybatis的强大特性之一,也是它优于其他ORM框架的一个重要原因.mybatis在对sql语句进行预编 ...
- mybatis中#{}与${}的差别(如何防止sql注入)
默认情况下,使用#{}语法,MyBatis会产生PreparedStatement语句中,并且安全的设置PreparedStatement参数,这个过程中MyBatis会进行必要的安全检查和转义. # ...
- mybatis 中的where标签
mybatis中的where标签可以去除 开头的 and 或者 or 但是放在后面的不行 失败的: <select id="countNotesByParam" parame ...
- Mybatis中SqlMapper配置的扩展与应用(3)
隔了两周,首先回顾一下,在Mybatis中的SqlMapper配置文件中引入的几个扩展机制: 1.引入SQL配置函数,简化配置.屏蔽DB底层差异性 2.引入自定义命名空间,允许自定义语句级元素.脚本级 ...
- mybatis中使用使用模块化sql
主要使用到mybatis中的标签 <sql id="tempId"> select * from student <sql> 使用的标签如下: <in ...
- “mybatis 中使用foreach 传
为了帮助网友解决“mybatis 中使用foreach 传”相关的问题,中国学网通过互联网对“mybatis 中使用foreach 传”相关的解决方案进行了整理,用户详细问题包括:mybatismap ...
- Mybatis中的in查询和foreach标签
Mybatis中的foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index,collection,open,separato ...
- mybatis中foreach的用法(转)
foreach一共有三种类型,分别为List,[](array),Map三种. foreach属性 属性 描述 item 循环体中的具体对象.支持属性的点路径访问,如item.age,item.inf ...
随机推荐
- 19-01【vmware machine】虚拟机无法联网访问
问题 我本地的虚拟机上没办法访问外网,然后搞了很久很久,最终解决了. 现象 A,电脑持续运行了三天,也没有复杂的环境调整的情况下.我本地的ubuntu(使用VMWare machine创建的),突然没 ...
- Spring MVC相关
配置文件说明 web.xml, spring配置文件 applicationContext.xml, spring配置文件, mybatis连接mysql配置文件 sql-map-config-mys ...
- Layer 创建 和 lamdba function 创建 和 API GateWay 配置 和 添加依赖
进入控制台 选择 Lamdba 服务 进入控制面板, 单击右边: 创建函数 然后进入此图界面 添加lamdba 函数 名称 选择运行环境:python 选择角色 选择现有角色, 角色创建 可以参考 无 ...
- angular 键盘事件绑定与过滤
方便的angular按钮绑定 如 <input (keyup.enter)="keyUpSearch($event)" value="按下回车键触发"&g ...
- linux服务器使用Jenkins+gradle+git打apk包,报错Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed)
linux服务器使用Jenkins+gradle+git打apk包,遇到的错误Gradle build daemon disappeared unexpectedly (it may have bee ...
- 安装mitmproxy
https://www.jianshu.com/p/1dd40826113b 先连接到同一个局域网,再访问官网下载描述文件
- python 杨辉三角实现逻辑
程序输出需要实现如下效果: [1] [1,1] [1,2,1] [1,3,3,1] ...... 方法:迭代,生成器 def triangles() L = [1] while True: yiled ...
- Js有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
<!DOCTYPE html> <title>Title</title> <script> var arr = [1,2,3,4,11]; var s ...
- JavaScript 教程
JavaScript 教程:https://code.ziqiangxuetang.com/js/js-tutorial.html
- ldd源码编译出现的问题
1.Fix it to use EXTRA_CFLAGS. Stop 1). # make KBUILD_NOPEDANTIC=12). Relace all CFLAGS with EXTRA_C ...