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 ...
随机推荐
- ./configure -build,-host,-target设置
build:执行代码编译的主机,正常的话就是你的主机系统.这个参数一般由config.guess来猜就可以.当然自己指定也可以.host:编译出来的二进制程序所执行的主机,因为绝大多数是如果本机编译, ...
- Integer 函数传参实现值交换
import java.lang.reflect.Field; public class MainClass { public static void main(String[] args) { In ...
- 4-16 css
1.背景是图片 <style> body {background-image:url('bgdesert.jpg');} </style> 2. 十六进制 - 如:" ...
- win10操作系统上,wireshark抓取https。
今天试了下使用wireshark抓https的包 一.记录如下: 配置一个环境变量SSLKEYLOGFILE为D:\Temp\sslog.log(这个文件需要自己去创建). 去下载一个chrome浏览 ...
- gulp打包普通项目
第一步:npm init 生成一个page.json第二步建立一个gulpfile.js文件主要是写这个文件 var gulp = require('gulp'), rev = require('gu ...
- Git上传代码的步骤
1.git status 列出来所有修改的文件2.git add 所有的文件列表,或者git add -A,添加所有文件到Add列表 3.git reset --hard 取最新的git标签 4.gi ...
- css -html-文档流
首先先考虑一下什么是普通流?普通流就是正常的文档流,在HTML里面的写法就是从上到下,从左到右的排版布局. 例: <div id="01"></div>&l ...
- 探索未知种族之osg类生物---渲染遍历之裁剪三
前言 在osgUtil::CullVisitor,我们发现apply函数的重载中,有CullVisitor::apply(Group& node),CullVisitor::apply(Swi ...
- 《笨方法学Python》加分题29
加分练习猜一猜 “if 语句” 是什么,他有什么作用.在做下一道题之前,试着用自己的话回答下面的问题: 你认为 if 对他下一行代码做了什么?为什么 if 语句的下一行需要 4 个空格缩进?如果不缩进 ...
- day 2:计算机的基础知识,编程语言分类
本节内容 1,计算机的容量 2,编程语言介绍1,计算机的容量 1位 = 1bit 8bit = 1byte = 1字节 1024bytes = 1k bytes = 1KB 1024个 1024KB ...