MyBatis框架动态SQL

本文介绍了MyBatis框架中动态SQL的使用,包括if、where、choose(when/otherwise)、foreach、set和trim等标签,以及如何处理多参数查询和集合参数,还提到了分页功能的应用。
摘要由CSDN通过智能技术生成

MyBatis框架动态SQL

MyBatis框架动态SQL处理简单的多参数查询

MyBatis框架动态SQL的常用标签

标签说明
if条件判断,与Java中的if语句类似
where为SQL语句动态添加where 关键字
choose条件判断,这是一个组合标签,需要与 when、otherwise 标签搭配使用。可实现与 Java 中的 switch 语句类似的功能
foreach以遍历方式处理集合类型参数
set为SOL语句动态添加set 关键字,实现动态实现数据更新功能
trim对SOL语句进行格式化处理,添加或移除前后缀

if标签

<if test="条件判断, 返回true或false">
	SQL语句...
</if>

例:如果sql语句中supCode为null sql语句就将变为 where and supName like concat(‘%’,#{supName},‘%’) 不符合sql语句语法
针对以上情况MyBatis为我们提供了where标签,他可以智能的处理and或or,不能添加。

select * from t_supplier
where
<if test="supCode!=null and supCode!=''">
supCode like concat('%',#{supCode},'%')
</if>
<if test="supName!=null and supName!=''">
and supName like concat('%',#{supName},'%')

where标签

select * from t_supplier
        <where>
            <if test="supCode!=null and supCode!=''">
                and supCode like concat('%',#{supCode},'%')
            </if>
            <if test="supName!=null and supName!=''">
                and supName like concat('%',#{supName},'%')
            </if>
        </where>

chooose(when/otherwise)标签

语法:

<choose>
                <when test="条件判断,返回true或false">
                    SQL语句...
                </when>
                <when test="条件判断,返回true或false">
                    SQL语句...
                </when>
                <otherwise>
                   SQL语句...
                </otherwise>
            </choose>

choose标签中多个when标签只会执行匹配的第一个然后就跳出了choose标签

MyBatis框架动态SQL处理集合参数

如果要查询的参数是集合类型的我们要通过标签去遍历集合中的参数最后拼接出一个MySQL语法的in语句来处理这类参数。
语法

select * from t_storage_record
        where supplierId in
        <!--collection 可根据是数组还是集合填写Array或者List-->
        <foreach collection="参数名" item="元素别名" open="(" close=")" separator="," index="当前元素的位置下标“”>
            #{元素别名}
        </foreach>

语法属性介绍

属性说明
item遍历数组时,为数组或 List 集合中的元素起的别名。
open起始位置的拼接字符,表示 n 语句以“(”左括号开始
close结束位置的拼接字符,表示 in 语句以“)”右括号结束。
separator元素之间的连接符,表示 in 语句中的元素之间以“”逗号连接。
collection参数名称。当参数为数组类型时,默认参数名为 array。当参数类型为 List集合时默认参数名为 list。当参数类型为 Map 时,参数名为 Map 中集合元素所在键值对的 key。

MyBatis框架动态SQL处理更新功能

set标签

与where标签一样为了避免sql语法错误会智能的忽略多余的逗号

<update id="updateSupplier">
        update t_supplier
        <set>
            <if test="supName!=null and supName!=''">
                supName=#{supName},
            </if>
            <if test="supPhone!=null and supPhone!=''">
                supPhone=#{supPhone},
            </if>
            <if test="supAddress!=null and supAddress!=''">
                supAddress=#{supAddress},
            </if>
            <if test="supContact!=null and supContact!=''">
                supContact=#{supContact},
            </if>
        </set>
         where id = #{id}
    </update>

trim标签

<trim prefix="set" suffixOverrides="," suffix="where id = #{id}">
    <if test="supName!=null and supName!=''">
        supName=#{supName},
    </if>
    <if test="supPhone!=null and supPhone!=''">
        supPhone=#{supPhone},
    </if>
    <if test="supAddress!=null and supAddress!=''">
        supAddress=#{supAddress},
    </if>
    <if test="supContact!=null and supContact!=''">
        supContact=#{supContact},
    </if>
</trim>

trim标签属性介绍

属性说明
prefix前缀,可以自动对 trim 标签所包含的语句是否有返回值进行判断。如果有返回值,则为SQL语句拼接相应前缀
suffix后缀,在trim 标签包含的语末尾拼接后缀
prefixOverrides忽略的前缀,忽略trim标内部首部指定的内容
suffixOverrides:忽略的后缀,忽略trim标签包含内容尾部指定的内容

分页功能

<select id="findAll" resultType="SysUser">
        select * from t_sys_user limit #{offset},#{rows}
</select>

test测试文件

			//每页显示多少条数据
			Integer pageSize=5;
			//当前页数
            Integer pageIndex=1;
            //limit(offset)是跳过X行从(x+1)行开始显示   用当前页数显示公式为(pageIndex - 1) * pageSize
            List<SysUser> all = mapper.findAll((pageIndex - 1) * pageSize, pageSize);
            for (SysUser sysUser : all) {
                System.out.println(sysUser);
            }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值