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);
@Test
    public 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 映射器

只查询了一次

  • 21
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北京最后的深情

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值