Mybatis常用动态sql标签、注意事项及使用案例总结
目录
1.Mybatis常用动态sql标签
1. choose、when、otherwise(选择)
示例
order by <choose> <when test=" paramsMap.sort == "c" "> i.sell_counts desc </when> <when test=" paramsMap.sort == "p" "> tempSpec.price_discount asc </when> <otherwise> i.item_name asc </otherwise> </choose>
通过不同的方式进行查询结果的排序,并设计默认排序方式;
2.where
where和if一般结合使用:
a> 若where标签中的if条件都不满足,则where标签没有任何功能,即不会添加where关键字
b>若where标签中的if条件满足,则where标签会自动添加where关键字,并将条件最前方多余的 and去掉
注意:where标签不能去掉条件最后多余的and
3.if
WHERE ic.item_id = #{paramsMap.itemId} <if test=" paramsMap.level != null and paramsMap.level != '' "> AND ic.comment_level = #{paramsMap.level} </if>
4.trim
用于去掉或添加标签中的内容 常用属性:
prefix:在trim标签中的内容的前面添加某些内容
prefixOverrides:在trim标签中的内容的前面去掉某些内容
suffix:在trim标签中的内容的后面添加某些内容
suffixOverrides:在trim标签中的内容的后面去掉某些内容
5.for each
6. sql\include
sql片段,可以记录一段公共sql片段,在使用的地方通过include标签进行引入
2. resultmap总结
resultMap:设置自定义映射 属性:
id:表示自定义映射的唯一标识
type:查询的数据要映射的实体类的类型 子标签:
id:设置主键的映射关系
result:设置普通字段的映射关系
association:设置多对一的映射关系 ,即查询接结果对象中的某一个参数是另一个java对象时使用嵌套映射;
collection:设置一对多的映射关系 ,即查询接结果对象中的某一个参数是另一个java对象的list集合时使用映射;
属性:
property:设置映射关系中实体类中的属性名
column:设置映射关系中表中的字段名
3. ${}与#{}的区别
1、#{}是预编译处理,$ {}是字符串替换。
2、MyBatis在处理#{}时,会将SQL中的#{}替换为?号,使用PreparedStatement的set方法来赋值;MyBatis在处理 $ { } 时,就是把 ${ } 替换成变量的值。
3、使用 #{} 可以有效的防止SQL注入,提高系统安全性。
4. mybatis特殊符号的处理
1. 可以通过转义的方式去实现。转义也有好处,就是可读性上有些差,如果忘了转义字符的话还需要再次查,比较耗时,反正到现在有的时候我还是会忘记。
符号 转义字符 描述
< < 小于
<= <= 小于等于
> > 大于
>= >= 大于等于
& & 和
' ' 单引号
'' " 双引号,
2. 使用<![CDATA[]]>标签,包裹在外面;
如
<if test="age != null">
<![CDATA[
age < #{age}
]]>
</if>
5. mybatis分页查询
代码如下:
PageHelper.startPage(page, pageSize); List<SearchItemsVO> list = itemsMapperCustom.searchItemsByThirdCat(map); PageInfo<?> pageList = new PageInfo<>(list); PagedGridResult grid = new PagedGridResult(); grid.setPage(page); grid.setRows(list); grid.setTotal(pageList.getPages()); grid.setRecords(pageList.getTotal());
6. 分步查询懒加载
懒加载的意思就是只用调用某个属性的get方法的时候,采去加载数据,这样保证只有使用的时候数据才进行加载不使用不去加载,在一定程度上提高了效率。在Mybatis中,手动映射结果集的时候才会存在懒加载。
7. mybatis缓存
看参考7
参考
1. https://www.cnblogs.com/blessing2022/p/16622177.html
2. 在 MyBatis 中使用 <、<= 等特殊符号_mybatis <_Roc.Chang的博客-CSDN博客
3. Mybatis实现分页查询_mybatis分页查询_章鱼小丸子duduu的博客-CSDN博客
4. PageHelper底层源码了解一下_pagehelper底层原理_快乐妮子的博客-CSDN博客
5. mybatis的sql标签_mybatis sql标签_Dragon&tiger的博客-CSDN博客
6.MyBatis——动态SQL的四个常用标签(<if>、<where>、<foreach>、<sql>)_51CTO博客_mybatis动态sql