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

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整合

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值