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

Java框架myBatis(三)

 一、特殊符号转义

特殊符号处理 在mybatis中的xml文件中,存在一些特殊的符号,比如:、"、&、<> 等,正常书写mybatis会报错,需要对这些符号进行转义。

具体转义如下所示: 特殊字符 转义字符

除了可以使用上述转义字符外,还可以使用来包裹特殊字符。如 下所示:

        <!CDATA[       ]>是XML语法。在CDATA内部的所有内容都会被解析器忽略。 但是有个问题那就是<if>、<where>、<choose>等这些标签都不会被解析,所以 我们只把有特殊字符的语句放在<!CDATA[       ]>尽量缩小 的范围。

二、myBatis缓存

1、缓存

        缓存:数据缓存,让数据离我们执行程序更近,  让程序可以快速的获取到数据

        手机缓存、浏览器缓存、cpu缓存等

        当访问量过大时,会将数据库中的数据先存入缓存(第一次查询后先不销毁,保存在java对象中,相对时间再进行销毁 ),对数据库进行保护,减少访问量过大

 存入缓存一般有两大极端:一种是短期时间内访问量极大、一种是修改可能性极小 

        查询流程:先从缓存中查数据,缓存中如果没有则从数据库查询,数据库查询后把数据存入缓存,下次直接从缓存中获取、

2、  myBatis一级缓存      

        默认是SqlSession级别的,在同一个SqlSession中查询的数据存入SqlSession对象中 .第二次查询数据时,先从sqlSession对象中查询,如果有则直接返回,如果没有再连接数据库

        一级缓存生命周期:开始于sqlSession对象,结束语sqlSession对象关闭。如果在此期间执行了新增修改删除,也会清空sqlSession对象中的缓存数据。调用sqlSession中的clearCache()方法也会强制清空一级缓存数据

@Select("select id,name,gender from teacher where id = #{id}")Teacher findTeacherById(Integer id);
@Testpublic void test4(){SqlSession sqlSession = MyBatisUtil.getSqlSession();TeacherDao teacherDao = sqlSession.getMapper(TeacherDao.class);Teacher teacher = teacherDao.findTeacherById(4);Teacher teacher1 = teacherDao.findTeacherById(4);System.out.println(teacher);System.out.println(teacher1);sqlSession.commit();sqlSession.close();}

 两个结果

 

只执行了一次 

 

3、  myBatis二级缓存

二级缓存是SqlSessionFactory级别的,多个SqlSession共享的,其作用域是同一个namespace。不同的 sqlSession 两次执行相同namespace下的sql语句且向sql中传递参数也相同 即最终执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到缓存 (内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。

Mybatis 默认没有开启二级缓存需要配置开启二级缓存。

配置开启二级缓存需要三步:

1、启用二级缓存

在SqlMapperConfig.xml 中启用二级缓存,如下代码所示,当 cacheEnabled 设置为true时启用二级缓存,设置为false时禁用二级缓存。

<setting name="cacheEnabled" value="true"/>

2、对象序列化 

将所有的POJO类实现序列化接口Java.io.Serializable

3、配置映射文件 

在Mapper映射文件中添加<cache>标签,表示此mapper开启二级缓存。 当SqlSeesion 关闭时,会将数据存入到二级缓存  属性flushInterval可以设置销毁时间,毫秒为单位 。cache可以设置其他属性,包括是否只读,销毁策略等,详情请见API

,详情请见API

 mybatis – MyBatis 3 | XML 映射器

只查询了一次


http://www.mrgr.cn/news/12185.html

相关文章:

  • Hadoop: Mapreduce了解
  • ZooKeeper可视化工具
  • 如何在项目中配置.gitignore文件
  • SpringBoot集成kafka-生产者发送消息
  • 十一:C语言-操作符详解
  • Redis windows 指定端口的方式启动
  • 通过重构得到更深层的理解
  • Excel的使用总结3
  • C++ TinyWebServer项目总结(11. 定时器)
  • nginx配置文件bom格式问题,导致启动报错报错处理
  • AI搜索的商业模式困境:Perplexity从拒绝广告到高价广告的转变
  • Golang学习笔记-Golang中的锁
  • Redis Cluster(无中心化设计)
  • Spring中Bean的生命周期管理
  • Qt编写贪吃蛇小游戏完整项目
  • 信息学奥赛初赛天天练-76-NOIP2015普及组-基础题1-计算机存储、硬件系统、操作系统、进制转换、二进制加法
  • 【TroubleShoot】Unity中JDK版本问题
  • Python中变量的作用域规则/LEGB规则
  • 网络游戏运营
  • Numpy 数组及矩阵创建详解