Mybatis_整合笔记02

MyBatis-动态SQL

动态 SQL MyBatis 强大特性之一。极大的简化我们拼装 SQL 的操作。
动态 SQL 元素和使用 JSTL 或其他类似基于 XML 的文本处理器相似。
MyBatis 采用功能强大的基于 OGNL 的表达式来简化操作。
if
choose (when, otherwise)
trim (where, set)
foreach

if

choose (when, otherwise)

trim (where, set)

where

set

trim

foreach

动态 SQL 的另外一个常用的必要操作是需要对一个集合进行遍历,通常是在构建 IN 条件语句的时候

当迭代列表、集合等可迭代对象或者数组
index 是当前 迭代的次数 item 的值是本次 迭代获取的 元素
当使用字典(或者 Map.Entry 对象的集合)
index item

bind

bind 元素可以从 OGNL 表达式中创建一个变量并将其绑定到上下文。比如

Multi-db vendor  support

若在 mybatis 配置文件中配置了 databaseIdProvider , 则可以使用 _ databaseId 量, 这样就可以根据不同的数据库厂商构建特定的语句

OGNL Object Graph Navigation Language 对象图导航语言,这是一种强大

表达式语言,通过它可以非常方便的来操作对象属性。 类似于我们的ELSpEL

访问集合伪属性:

类型

伪属性

伪属性对应的 Java 方法

ListSetMap

sizeisEmpty

List/Set/Map.size(),List/Set/Map.isEmpty()

ListSet

iterator

List.iterator()Set.iterator()

Map

keysvalues

Map.keySet()Map.values()

Iterator

nexthasNext

Iterator.next()Iterator.hasNext()

MyBatis-缓存机

MyBatis 包含一个非常强大的查询缓存特性 , 它可以非常方便地配置和定制 。缓存 可以极大的提升查询效率
MyBatis 系统中默认定义了两级缓存
一级 缓存 二级缓存
1 、默认情况下,只有一级缓存( SqlSession 级别的缓存,也称为本地缓存)开启。
2 、二级缓存需要手动开启和配置,他是基于 namespace 级别的缓存。
3 、为了提高扩展性。 MyBatis 定义了缓存接口 Cache 。我们可以通过实现 Cache 接口来自定义二级缓存

一级缓存

一级缓存 (local cache), 本地缓存 , 作用域默认 sqlSession 。当  Session flush close , Session 中的所有 Cache 将被清空。
本地缓存不能被关闭 , 但可以调用 clearCache () 来清空本地缓存 , 或者改变缓存的作用域 .
mybatis3.1 之后 , 可以配置本地缓存的作用域 . mybatis.xml 中配置

一级缓存演示&失效情况

同一次会话期间只要查询过的数据都会保存在当前 SqlSession 的一个 Map
key:hashCode + 查询的 SqlId + 编写的 sql 查询语句 + 参数
一级缓存失效的四种情况
1 、不同 SqlSession 对应不同的一级缓存
2 、同一个 SqlSession 但是查询条件不同
3 、同一个 SqlSession 两次查询期间执行了任何一次增删改操作
4 、同一个 SqlSession 两次查询期间手动清空了 缓存

二级缓存

二级缓存 (second level cache) ,全局作用域缓存
二级缓存默认不开启,需要手动配置
MyBatis 提供二级缓存的接口以及实现,缓存实现要求 POJO 实现 Serializable 接口
二级缓存在 SqlSession 关闭或提交 之后才会 生效
使用步骤
1 、全局配置文件中开启 二级 缓存
<setting name= " cacheEnabled " value="true"/>
2 、需要使用二级缓存的映射文件处使用 cache 配置缓存
<cache />
3 、注意: POJO 需要实现 Serializable 接口

缓存相关属性

eviction=“ FIFO” 缓存回收策略:
LRU – 最近最少使用的:移除最长时间不被使用的对象。
FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。
WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。
默认的是 LRU
flushInterval 刷新间隔,单位毫秒
默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句时 刷新
s ize 引用数目,正整数
代表缓存最多可以存储多少个对象,太大容易导致内存溢出
readOnly 只读, true/false
true :只读缓存 ;会 给所有调用者返回缓存对象的相同实例 因此这些对象不能被修改。这提供了很重要的性能 优势。
false :读写缓存; 会返回缓存对象的拷贝(通过序列化)。这会慢一些,但是安全,因此默认是 false

 

缓存有关设置

1 、全局 setting cacheEnable
配置 二级缓存的开关。一级缓存一直是打开的
2 select 标签的 useCache 属性:
配置 这个 select 是否使用二级缓存。一级缓存一直是使用
3 sql 标签的 flushCache 属性:
增删 改默认 flushCache =true sql 执行以后,会同时清空一级和 二级 缓存。查询默认 flushCache =false
4 sqlSession. clearCache ()
只是 用来清除一级缓存
5 当在某一个作用域 ( 一级缓存 Session/ 二级缓存 Namespaces) 进行了 C/U/D 操作后,默认该作用域下 所有 select 中的缓存将被 clear

第三方缓存整合

EhCache 是一个纯 Java 的进程内缓存框架,具有快速、精干等特点 ,是 Hibernate 中默认的 CacheProvider
MyBatis 定义了 Cache 接口方便我们进行自定义扩展。
步骤:
1 、导入 ehcache 包,以及整合包,日志包

ehcache-core-2.6.8.jarmybatis-ehcache-1.0.3.jar

slf4j-api-1.6.1.jarslf4j-log4j12-1.6.2.jar

2 、编写 ehcache.xml 配置文件
3 、配置 cache 标签
<cache type= " org.mybatis.caches.ehcache.EhcacheCache "></cache>
参照缓存: 若想在命名空间中共享相同的缓存配置和实例。可以使用 cache-ref 元素来引用另外一个缓存。

 

MyBatis-Spring整合

1、查看不同MyBatis版本整合Spring时使用的适配包;      http://www.mybatis.org/spring/

2、下载整合适配包

https://github.com/mybatis/spring/releases

MyBatis-Spring

MyBatis

Spring

1.0.0 and 1.0.1

3.0.1 to 3.0.5

3.0.0 or higher

1.0.2

3.0.6

3.0.0 or higher

1.1.0 or higher

3.1.0 or higher

3.0.0 or higher

1.3.0 or higher

3.4.0 or higher

3.0.0 or higher

3 、官方整合示例, jpetstore

https://github.com/mybatis/jpetstore-6

整合关键配置

MyBatis-逆向工程

MyBatis Generator
简称 MBG ,是一个专门为 MyBatis 框架 使用者定制的 代码生成器 ,可以快速的根据表生成对应的映射文件,接口,以及 bean 类。支持基本的增删改查,以及 QBC 风格的条件查询。但是表连接、存储过程等这些复杂 sql 的定义需要我们手工编写
官方文档 地址

http://www.mybatis.org/generator/

官方工程 地址

https://github.com/mybatis/generator/releases

MBG使用

使用步骤:
1 )编写 MBG 的配置文件(重要几处配置)

1jdbcConnection配置数据库连接信息

  2javaModelGenerator配置javaBean的生成策略

  3sqlMapGenerator 配置sql映射文件生成策略

  4javaClientGenerator配置Mapper接口的生成策略

  5table 配置要逆向解析的数据表

  tableName:表名

  domainObjectName:对应的javaBean

2 )运行代码生成器生成 代码
注意:

Context标签

targetRuntime=“MyBatis3“可以生成带条件的增删改查

targetRuntime=“MyBatis3Simple“可以生成基本的增删改查

如果再次生成,建议将之前生成的数据删除,避免xml向后追加内容出现的问题。

MBG配置文件

生成器代码

测试查询:

  QBC风格的带条件查询

扩展:MyBatis实用场景

PageHelper插件进行分

PageHelper MyBatis 中非常方便的第三方分页插件。
官方文档

https://github.com/pagehelper/Mybatis-PageHelper/blob/master/README_zh.md

我们可以对照官方文档的说明,快速的使用插件
 

使用步骤

1 、导入相关包 pagehelper-x.x.x.jar jsqlparser-0.9.5.jar
2 、在 MyBatis 全局配置文件中配置分页插件
3 、使用 PageHelper 提供的方法进行分页
4 、可以使用更强大的 PageInfo 封装返回 结果
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值