MyBatis主要特性及使用方法包括一级缓存和二级缓存详解

xiaoxiao2021-02-28  22

Mybatis是一个持久层框架,一个不完全的ORM框架,sql语句需要程序员去编写,有(输入映射、输出映射)。

优点:门槛不高,学习成本低,程序员的精力集中在sql上,适合互联网等需要变化较大的项目。

 

sqlMapConfig.xml ->sqlSessionFactory->sqlSession->Excutor->mappedStatement->mysql

 

sqlSessionFactory是单例的。

sqlSession是线程不安全的,需要放在方法体内执行。

 

Mapper写法需要遵循一些规范:

1. Namespace=”*.*.*.*Mapper”

2. 方法名与mapperid 一致

3. 方法中的参数和返回值与mappe中一致

 

输入映射:

parameterType:指定输入参数可以是简单类型、pojohashmap.

对于综合查询,建议parameterType使用包装pojo,有利于扩展。

输出映射:

resultType 列名和属性名必须一致,如果不一致需要映射则使用resultMap.

不管返回单个对象或列表,都是填写单个对象的全名称。

 

resultMap:

  将关联查询的列映射到一个pojo属性中。(一对一)

  将关联查询的列映射到一个List<pojo>中。(一对多)

 

动态SQL:

Sql片段

If 

Foreach

 

一对一查询:

使用resultType实现较为简单,如果使用resultMap,则使用

<resultMap>

<assosiation>

</assosiation>

</resultMap>

resultMap可以实现延迟加载,resultType则不能。

 

一对多的查询:

<resultMap>

<collection property=”” ofType=””>

</collection>

</resultMap>

 

多对多查询:

  先写SQL,再写resultMap.

 

resultType:

  查询结果的列名可以和pojo属性名一一对应。

resultMap:

  一一对应:association

  一对多:collection

 

延迟加载:

   Association,collection具有延迟加载功能。

    

  

<association select=”延迟加载去执行的statement_id (namespance.statement)”  column=”select查询条件” >

</association>

 

LazyloadEnable d = true;

aggressiveLazyLoading = false;

 

一级缓存:

   操作DB时需要构造sqlSession对象,在对象中有一个HashMap用于存储数据。

默认开启。Spring中事务控制在service中,一个service对应一个sqlSession.

insert,update,delete操作时,会清空sqlSession,免于脏读。

二级缓存:

   多个sqlSession操作同一Mappersql语句,多个sqlSession共享一个二级缓存区域。每个namespace都有自己的一个二级缓存区域,某种意义上一个namespace对应一个mapper. 

默认开启。总开关, cacheEnabled = true, 还需在每个mapper.xml中开启。

<cache type=”cache接口实现类”  />

Pojo需要实现serializable 接口。

 

每次查询需要从数据库中取。<select  useCache=”false” />

刷新缓存(清空缓存)  如果insert,update,delete.  <insert flushCache=”true” />

一般不需要这样设置。

 

Mybatis整合ehcache.

Ehcache 是一个分布式缓存。Mybatis无法实现分布式缓存,需要与redis,ehcache,memcached等进行整合,缓存集中式管理(集群)。

 

Mybatis提供了一个cache接口,可以自行开发。

 

二级缓存应用场景:

1. 查询多实时性要求不高的

2. 耗时较高的统计分析, flushInterval 刷新频率。

 

二级缓存的局限性:

  对细粒度的数据级别的缓存实现不好。

 

 

Springmybatis整合

转载请注明原文地址: https://www.6miu.com/read-1450223.html

最新回复(0)