Mybatis常用动态sql标签、注意事项及使用案例总结

目录

1.Mybatis常用动态sql标签

1. choose、when、otherwise(选择)

2.where

3.if

4.trim

5.for each 

6. sql\include

 2. resultmap总结

3.  ${}与#{}的区别

4. mybatis特殊符号的处理

5. mybatis分页查询

6. 分步查询懒加载

7. mybatis缓存

参考


1.Mybatis常用动态sql标签
1. choose、when、otherwise(选择)

        示例

order by
<choose>
    <when test=" paramsMap.sort == &quot;c&quot; ">
        i.sell_counts desc
    </when>
    <when test=" paramsMap.sort == &quot;p&quot; ">
        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. 可以通过转义的方式去实现。转义也有好处,就是可读性上有些差,如果忘了转义字符的话还需要再次查,比较耗时,反正到现在有的时候我还是会忘记。

符号    转义字符    描述
<    &lt;    小于
<=    &lt;=    小于等于
>    &gt;    大于
>=    &gt;=    大于等于
&    &amp;    和
'    &apos;    单引号
''    &quot;    双引号,
 

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

7. MyBatis中的缓存_mybatis缓存_边学边卷的博客-CSDN博客

8.Mybatis懒加载_酱紫学Java的博客-CSDN博客