【JavaEE & Spring】MyBatis 操作数据库 - 进阶

发布时间:2024年01月23日

1. 动态SQL

动态 SQL 是Mybatis的强?特性之?,能够完成不同条件下不同的 sql 拼接。

1.1 <if>标签

在注册??的时候,可能会有这样?个问题,如下图所?:
在这里插入图片描述
注册分为两种字段:必填字段和?必填字段,那如果在添加??的时候有不确定的字段传?,程序应该如何实现呢?

这个时候就需要使?动态标签 来判断了,?如添加的时候性别 gender 为?必填字段,具体实现如下:在这里插入图片描述
Mapper.xml实现:

<select id="insertUserByCondition">
        insert into userinfo (
        <trim suffixOverrides=",">
            <if test="username != null">
                username,
            </if>
            <if test="password != null">
                `password`,
            </if>
            <if test="age != null">
                age,
            </if>
            <if test="gender != null">
                gender,
            </if>
            <if test="phone != null">
                phone
            </if>
        </trim>

        )
        values (
        <trim suffixOverrides=",">
            <if test="username != null">
                #{username},
            </if>
            <if test="password != null">
                #{password},
            </if>
            <if test="age != null">
                #{age},
            </if>
            <if test="gender != null">
                #{gender},
            </if>
            <if test="phone != null">
                #{phone}
            </if>
        </trim>
        )
    </select>

或者使?注解?式(不推荐)
在这里插入图片描述

1.2 <trim>标签

之前的插???功能,只是有?个 gender 字段可能是选填项,如果有多个字段,?般考虑使?标签结合标签,对多个字段都采取动态?成的?式。

标签中有如下属性:

  • prefix:表?整个语句块,以prefix的值作为前缀
  • suffix:表?整个语句块,以suffix的值作为后缀
  • prefixOverrides:表?整个语句块要去除掉的前缀
  • suffixOverrides:表?整个语句块要去除掉的后缀

1.3 <where>标签

在这里插入图片描述

1.4 <set>标签

在这里插入图片描述

1.5 <foreach>标签

对集合进?遍历时可以使?该标签。标签有如下属性:

  • collection:绑定?法参数中的集合,如 List,Set,Map或数组对象
  • item:遍历时的每?个对象
  • open:语句块开头的字符串
  • close:语句块结束的字符串
  • separator:每次遍历之间间隔的字符串

在这里插入图片描述

1.6 <include>标签

问题分析:
在xml映射?件中配置的SQL,有时可能会存在很多重复的?段,此时就会存在很多冗余的代码
在这里插入图片描述
我们可以对重复的代码?段进?抽取,将其通过 <sql> 标签封装到?个SQL?段,然后再通过<include> 标签进?引?。
在这里插入图片描述

文章来源:https://blog.csdn.net/zxj20041003/article/details/135771220
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。