8.动态SQL
mybatis才有ognl表达式来完成动态SQL。
常用元素;
if
-
choose
when
otherwise
where
set
foreach
bind
8.1 if
- 可选条件 如果不为空则加入限制条件
8.2 choose
- 选择其中的一项
8.3 where
- where元素之一在一个以上的if条件有至的情况下才会去插入where子句,若最后内容是 and 或 or 开头,where元素会将他们去除
8.5 foreach
- 元素用来遍历集合
- collection:指定输入对象中的集合属性
- item:每次遍历生成的对象
- open:开始遍历时的拼接字符串
- close:结束时拼接的字符串
- separator:遍历对象之间需要拼接的字符串
8.6 bind
-
预定义变量
8.7 trim
替换和添加
prefix:前缀
prefixoverride:去掉第一个and或者是or
suffix:后缀
suffixoverride:去掉最后一个逗号(也可以是其他的标记,就像是上面前缀中的and一样)
8.8 set
- set 元素会动态前置set关键字,同时会消除无关的逗号
update WEB_EMPLOYEE
LOGINNAME = #{loginname,jdbcType=VARCHAR},
PASSWORD = #{password,jdbcType=VARCHAR},
NAME = #{name,jdbcType=VARCHAR},
SEX = #{sex,jdbcType=VARCHAR},
AGE = #{age,jdbcType=DECIMAL},
PHONE = #{phone,jdbcType=VARCHAR},
SAL = #{sal,jdbcType=DECIMAL},
STATE = #{state,jdbcType=VARCHAR}
where id=#{id,jdbcType=DECIMAL}
9.事务管理及缓存机制
9.1 事务管理
9.1.1 事务特性
- 原子性。事务是应用中最小执行单位。
- 一致性。事务执行的结果,必须使数据库从一种一致状态,变到另一种一致性状态。
- 隔离性。事务执行互不干扰,不能互相影响。
- 持续性。事务一提交,对数据所做的任何改变都要保存到物理数据库中。
9.1.2 Transaction接口
-
Transaction接口
- JdbcTransaction实现类
- ManagedTransaction实现类
-
TransactionFactory接口
- JdbcTransactionFactory实现类
- ManagedTransactionFactory实现类
使用JDBC事务管理机制。利用
java.sql.Connection
完成对事务的提交(commit())、回滚(rollback())、和关闭(close())等。使用MANAGED事务管理机制。mybatis自身不会去实现事务管理,让容器如weblogic、JBoss等来实现对事务的管理。
9.1.3 事务的配置创建
- mybatis-config.xml
9.2 缓存机制
9.2.1 一级缓存(SqlSession级别)
一级缓存的作用域是SqlSession范围的。同一个SqlSession中执行两次相同的SQL语句,第一次执行会将查询的数据写到缓存(内存),第二次查询时会从缓存中获取数据。如果SqlSession执行DML操作(insert、update、delete),并提交到数据库,mybatis会清空SqlSession中的一级缓存,保证缓存中是最新信息,避免出现脏读现象。
- mybatis默认开启一级缓存。
9.2.2 二级缓存(Mapper级别)
二级缓存是mapper级别的,多个SqlSession可以使用同一个mapper的SQL语句去操作数据库,得到的数据会存在二级缓存。
9.2.2.1 开启二级缓存配置
- mybatis-config.xml
9.2.2.2 mapper中开启二级缓存
- mapper.xml
- cashe元素用来开启当前mapper的namespace下的二级缓存,属性设置:
- flushInterval。刷新间隔。默认不设置,缓存仅仅调用语句时刷新。
- size。缓存数目。默认值1024。
- readOnly。只读。默认为false。只读的缓存会给所有调用者返回缓存对象的相同实例,这些对象不能被修改。
- eviction。收回策略。默认为LRU。
- LRU。最近最少使用的策略。移出最长时间不被使用的对象。
- FIFO。先进先出策略。按对象进入缓存的顺序来移除。
- SOFT。软引用策略。移除基于垃圾回收器状态和软引用规则的对象。
- WEAK。弱引用策略。更积极地移除基于垃圾收集器和弱引用规则的对象。
- 使用二级缓存时,查询结果映射的Java对象必须实现
java.io.Serializable
接口。
9.事务管理及缓存机制
9.1 事务管理
9.1.1 事务特性
- 原子性。事务是应用中最小执行单位。
- 一致性。事务执行的结果,必须使数据库从一种一致状态,变到另一种一致性状态。
- 隔离性。事务执行互不干扰,不能互相影响。
- 持续性。事务一提交,对数据所做的任何改变都要保存到物理数据库中。
9.1.2 Transaction接口
-
Transaction接口
- JdbcTransaction实现类
- ManagedTransaction实现类
-
TransactionFactory接口
- JdbcTransactionFactory实现类
- ManagedTransactionFactory实现类
使用JDBC事务管理机制。利用
java.sql.Connection
完成对事务的提交(commit())、回滚(rollback())、和关闭(close())等。使用MANAGED事务管理机制。mybatis自身不会去实现事务管理,让容器如weblogic、JBoss等来实现对事务的管理。
9.1.3 事务的配置创建
- mybatis-config.xml
9.2 缓存机制
9.2.1 一级缓存(SqlSession级别)
一级缓存的作用域是SqlSession范围的。同一个SqlSession中执行两次相同的SQL语句,第一次执行会将查询的数据写到缓存(内存),第二次查询时会从缓存中获取数据。如果SqlSession执行DML操作(insert、update、delete),并提交到数据库,mybatis会清空SqlSession中的一级缓存,保证缓存中是最新信息,避免出现脏读现象。
mybatis默认开启一级缓存。
9.2.2 二级缓存(Mapper级别)
二级缓存是mapper级别的,多个SqlSession可以使用同一个mapper的SQL语句去操作数据库,得到的数据会存在二级缓存。
9.2.2.1 开启二级缓存配置
- mybatis-config.xml
9.2.2.2 mapper中开启二级缓存
- mapper.xml
- cashe元素用来开启当前mapper的namespace下的二级缓存,属性设置:
- flushInterval。刷新间隔。默认不设置,缓存仅仅调用语句时刷新。
- size。缓存数目。默认值1024。
- readOnly。只读。默认为false。只读的缓存会给所有调用者返回缓存对象的相同实例,这些对象不能被修改。
- eviction。收回策略。默认为LRU。
- LRU。最近最少使用的策略。移出最长时间不被使用的对象。
- FIFO。先进先出策略。按对象进入缓存的顺序来移除。
- SOFT。软引用策略。移除基于垃圾回收器状态和软引用规则的对象。
- WEAK。弱引用策略。更积极地移除基于垃圾收集器和弱引用规则的对象。
- 使用二级缓存时,查询结果映射的Java对象必须实现
java.io.Serializable
接口。