- CDATA 标签的使用
- Mybatis都有哪些Executor执行器?
- Mybatis能执行一对一、一对多的关联查询
- Dao接口里的方法,参数不同时,方法能重载吗
- ${}和#{}的区别是什么
- if条件判断
- 遍历 map中的list,并使用in
CDATA 标签的使用
术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。在 XML 元素中,"<" 和 "&" 是非法的。
- "<" 会产生错误,因为解析器会把该字符解释为新元素的开始。
- "&" 也会产生错误,因为解析器会把该字符解释为字符实体的开始。
某些文本,比如 JavaScript 代码,包含大量 "<" 或 "&" 字符。为了避免错误,可以将脚本代码定义为 CDATA。
CDATA 部分中的所有内容都会被解析器忽略。CDATA 部分由 "" 开始,由 "" 结束:
在mapper文件中写sql语句时,遇到特殊字符时,如:< 等,建议使用 sql 语句 标记,将sql语句包裹住,不被解析器解析
select t1.* from tbl_xxx t1 left join tbl_yyy t2 on t1.aa = t2.aa
where t2.Channel = #{channel}
and t1.EXECUTION_STATE != '1'
order by t1.HU_DATE
例如这里查询是需要用到大于等于这样的符号,但是XML中"<"符号是非法的,无法解析.后台也会报错,所以我们在这里用CDATA将SQL包裹起来。这样就可以正常进行解析了。
Mybatis都有哪些Executor执行器?
Mybatis有三种基本的Executor执行器,SimpleExecutor、ReuseExecutor、BatchExecutor。
-
SimpleExecutor:每执行一次update或select,就开启一个Statement对象,用完立刻关闭Statement对象。
-
ReuseExecutor:执行update或select,以sql作为key查找Statement对象,存在就使用,不存在就创建,用完后,不关闭Statement对象,而是放置于Map
内,供下一次使用。简言之,就是重复使用Statement对象。 -
BatchExecutor:执行update(没有select,JDBC批处理不支持select),将所有sql都添加到批处理中(addBatch()),等待统一执行(executeBatch()),它缓存了多个Statement对象,每个Statement对象都是addBatch()完毕后,等待逐一执行executeBatch()批处理。与JDBC批处理相同。
作用范围:Executor的这些特点,都严格限制在SqlSession生命周期范围内。
Mybatis能执行一对一、一对多的关联查询
一对一:association
一对多:collection
Dao接口里的方法,参数不同时,方法能重载吗
不能重载。因为在进行xml配置的时候会跟Dao中的方法名一一对应。xml中只能配置一个标签和对应方法匹配。(在Mybatis中,每一个、
、
、
标签,都会被解析为一个MappedStatement对象,然后存储在全局Configration对象中,然寻找这个MappedStatement的逻辑是使用Dao的全限定名加上方法名,所以不参数的方法还是会找到同一个MappedStatement)。
${}和#{}
的区别是什么
对于${},解析器会直接使用属性值替换,对于#{},MyBatis的解析器会先替换成?占位符,在sql执行前会使用PreparedStatement的参数设置方法,按序给sql的?号占位符设置参数值。
if条件判断
根据前台传送的参数进行动态的sql判断。
遍历 map中的list,并使用in
orgID:为传过来的map中的list的key值
item:是遍历之后的key值
open:开始的标签, (
close:结束的标签,)
separator:每次遍历结束之后,末尾会添加,
#{orID}