查询缓存
一级缓存:同一个sqlSession对象
MyBatis默认开启一级缓存,如果用同样的sqlSession对象查询相同的数据,则会在第一次查询时向数据库发送SQL语句,并将查询的结果放入到SQLSESSION中,后续再次查询该同样的对象时,则直接从缓存中查询该对象即可(即忽略了数据库的访问)。
注意:commit()之后缓存就会被清理,一般增删改操作之后要commit()。
 
二级缓存:
1.Mybatis自带二级缓存:同一个namespace生成的mapper对象
MyBatis默认没有开启二级缓存,需手工打开。
(1)conf.xml
    <!-- 开启二级缓存 -->
        <setting name="cacheEnabled" value="true"/>
(2)在具体的mapper.xml中声明开启
<!-- 声明此namespace开启二级缓存 -->
    <cache/>
结论:只要产生的xxMapper对象来自同一namespace,属于二级缓存

 

 

 

根据异常提示:NotSerializableException可知,MyBatis的二级缓存是将对象放入硬盘文件中。
序列化:内存--->硬盘
反序列化:硬盘--->内存
准备缓存的对象,必须实现序列化接口。其本类、父类、级联属性全部需要序列化。
注意:执行session.close()时,将一级缓存对象放入二级缓存。
 
禁用二级缓存:在想禁用的某个对象中<select useCache="false">
清理二级缓存:(1)与清理一级缓存的方法相同

                          commit(); (一般执行增删改时会清理缓存,原因:预防脏数据的产生)

                         在二级缓存中,commit()不能是查询自身的commit。

                        (2)在select标签中添加属性flushCache="true"

 

2.三方提供的二级缓存:ehcache、memcache
要想整合三方提供的二级缓存(或者自定义二级缓存),必须实现cache接口。
整合ehcache二级缓存:
(1)添加jar包

    Ehcahe-Core-2.6.11.jar

    mybatis-Ehcache-1.0.3.jar

    slf4j-api-1.7.25.jar
(2)编写配置文件Ehcache.xml
(3)开启ehCache二级缓存
在xxxMapper.xml中开启
    <!-- 开启ehcache二级缓存 -->
    <cache type="org.mybatis.caches.ehcache.EhcacheCache">
 
        <!-- 覆盖Ehcache中的值 -->
        <property name="maxElementsInMemory" value="2000"/>
    </cache>

 

逆向工程
表、类、接口、mapper.xml四者密切相关,因此,当知道其中一个的时候,其他三个应该可以自动生成。
表——>其他三个
实现步骤:
1.mybatis-generator-core.jar、mybatis.jar、mysql-connector-java.jar;
2.逆向工程的配置文件generator.xml;
3.执行。

 

 

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/ghlz/p/12284596.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!