20190712mybatis

   MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

1.底层封装了jdbc接口,并完成结果与普通对象的映射;

2.是一个支持普通sql查询,存储过程和高级映射的优秀持久化框架;

3.避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集

特点

  • 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。

  • 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。

  • 解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。

  • 提供映射标签,支持对象与数据库的orm字段关系映射

  • 提供对象关系映射标签,支持对象关系组建维护

  • 提供xml标签,支持编写动态sql。

 

MyBatis并不是简单地对整个Application就只有一个Cache缓存对象,它将缓存划分的更细,即是Mapper级别的,即每一个Mapper都可以拥有一个Cache对象,具体如下:

a.为每一个Mapper分配一个Cache缓存对象(使用<cache>节点配置)

b.多个Mapper共用一个Cache缓存对象(使用<cache-ref>节点配置) 如果你想让多个Mapper公用一个Cache的话,你可以使用<cache-ref namespace="">节点,来指定你的这个Mapper使用到了哪一个MapperCache缓存

 

使用二级缓存,必须要具备的条件

MyBatis对二级缓存的支持粒度很细,它会指定某一条查询语句是否使用二级缓存

虽然在Mapper中配置了<cache>,并且为此Mapper分配了Cache对象,这并不表示我们使用Mapper中定义的查询语句查到的结果都会放置到Cache对象之中 必须指定Mapper中的某条选择语句是否支持缓存,

即如下所示,在<select>节点中配置useCache="true"Mapper才会对此Select的查询支持缓存,否则,不会对此Select查询,不会经过Cache缓存

如下,Select语句配置了useCache="true",则表明这条Select语句的查询会使用二级缓存。

 <select id="selectByMinSalary" resultMap="BaseResultMap" parameterType="java.util.Map" useCache="true">

总之,要想使某条Select查询支持二级缓存,你需要保证

1.  MyBatis支持二级缓存的总开关:全局配置变量参数   cacheEnabled=true

2. 该select语句所在的Mapper,配置了<cache> 或<cached-ref>节点,并且有效

3. 该select语句的参数 useCache=true

 

 

请注意,如果你的MyBatis使用了二级缓存,并且你的Mapper和select语句也配置使用了二级缓存,那么在执行select查询的时候,MyBatis会先从二级缓存中取输入,其次才是一级缓存,即MyBatis查询数据的顺序是:

               二级缓存    ———> 一级缓存——> 数据库

对于每个**Cache**而言,都有一个容量限制,**MyBatis**各供了各种策略来对**Cache**缓存的容量进行控制,以及对**Cache**中的数据进行刷新和置换。**MyBatis**主要提供了以下几个刷新和置换策略:

**LRU:(Least Recently Used)**,最近最少使用算法,即如果缓存中容量已经满了,会将缓存中最近做少被使用的缓存记录清除掉,然后添加新的记录;

 **FIFO:(First in first out)**,先进先出算法,如果缓存中的容量已经满了,那么会将最先进入缓存中的数据清除掉;

**Scheduled**:指定
时间间隔清空算法,该算法会以指定的某一个时间间隔将**Cache**缓存中的数据清空;

 

 

参考

https://blog.csdn.net/luanlouis/article/details/41408341?utm_source=copy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值