动态SQL

动态SQL允许根据条件构建不同的查询语句,主要用于解决条件筛选问题,如商品搜索按价格和地区等过滤。文中提到了IF语句和WHERE标签在MyBatis中的使用,IF语句需要1=1来连接条件,而WHERE标签更智能,能自动忽略首个AND。此外,还展示了DELETE和UPDATE操作中的动态构建,使用Foreach标签处理集合迭代。然而,动态SQL可能影响查询效率。
摘要由CSDN通过智能技术生成

动态sql

sql的内容是变化的, 可以根据条件获取到不同的sql语句.主要是where部分发生变化。

为什么使用动态sql

使用动态sql可以解决某些功能的使用 例如使用条件查询某个商品 你输入价格,地区等等进行筛选,如果使用静态sql可能会查询出来的是一个空内容 但使用动态sql可以很好的解决这种问题

动态sql语句

if语句

<select id="selectName" parameterType="com.chai.bean.User" resultType="com.chai.bean.User">
        select * from t_user where 1=1
        <if test="username != null and username !=''">
            and username like concat('%',#{username},'%')
        </if>
        <if test="address != null and address !=''">
            and address like concat('%',#{address},'%')
        </if>
        <if test="phone != null and phone !=''">
            and phone like concat('%',#{phone},'%')
        </if>
    </select>

if语句为但条件判断,但想做到前面的内容为空后面继续运行就要在where后面加一个1=1才能衔接后面的and语句。

这样做的缺点是效率不高

where语句

全查

<select id="selectName" parameterType="com.chai.bean.User" resultType="com.chai.bean.User">
        select * from t_user
        <where>
            <if test="username != null and username !=''">
                and username like concat('%',#{username},'%')
            </if>
            <if test="address != null and address !=''">
                and address like concat('%',#{address},'%')
            </if>
            <if test="phone != null and phone !=''">
                and phone like concat('%',#{phone},'%')
            </if>
        </where>
    </select>

where标签比较智能,可以忽略第一个and语句

删除

<!--foreach标签可以对一个集合变量进行迭代
        collection:集合变量 item:临时变量 open: 以什么符号开始 close:以什么符号结束 separator:遍历出来的数据之间的分隔符
        #{id} 放入标签中,实现了迭代元素并拼接上了字符-->
    <delete id="delete" parameterType="DelV0 delV0">
        delete from student where id in
        <foreach item="id" collection="ids" open="(" close=")" separator=",">
            #{id}
        </foreach>
    </delete>

修改

<update id="upd" parameterType="com.chai.bean.Student">
        update student
        <set>
            <if test="name!=null and name!=''">
                name=#{name},
            </if>
            <if test="age!=null and age!=''">
                age=#{age},
            </if>
            <if test="gender!=null and gender!=''">
                gender=#{gender},
            </if>
            <if test="score!=null and score!=''">
                score=#{score},
            </if>
        </set>
        where id=#{id}
    </update>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜未柒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值