Mybatis动态SQL的使用案例(实战Demo)

本文介绍了Mybatis动态SQL的使用,通过实例展示了如何利用if+where标签实现动态查询条件拼接,以及if+set标签在更新操作中动态设置字段的技巧。详细讲解了在财务管理系统中根据多种条件动态搜索和更新支出数据的场景,帮助提升开发效率。
摘要由CSDN通过智能技术生成

【辰兮要努力】:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行!

博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端、后台、数据库、项目案例等相关知识点总结,感谢你的阅读和关注,希望我的博客能帮助到更多的人,分享获取新知,大家一起进步!

吾等采石之人,应怀大教堂之心,愿你们奔赴在各自的热爱中…


一、文章序言

开局分享一波干货欢迎打卡!

在这里插入图片描述

SSM框架常考面试题汇集

JAVA常见基础面试题汇集


业务场景:在我们生活中很多业务常常遇到动态搜索的情况,比如搜索民宿,根据位置,价格,面积等等情况动态搜索,参数等信息可以根据我们需求改变,这里就涉及到了我们Mybatis常说的动态SQL。

Mybatis 动态SQL,通过 if, choose, when, otherwise, trim, where, set, foreach等标签,可组合成非常灵活的SQL语句,从而在提高 SQL 语句的准确性的同时,也大大提高了开发人员的效率。

Mybatis提供了动态SQL,也就是可以根据用户提供的参数,动态决定查询语句依赖的查询条件或SQL语句的内容。


二、实例应用

业务场景:如下财务管理系统,我们支出模块可以记录对应的财政支出,同时上面可以根据条件动态的查询,我们已经记录的数据。

如下是第一次进入页面后的显示数据
在这里插入图片描述

我们根据支付方式查询一下支出情况,结果如下
在这里插入图片描述

我们根据开始时间,姓名(模糊查询),标题,支付方式等搜索查询,结果如下

在这里插入图片描述
来看看console控制台中打印的数据,可以看到我们传入的参数
在这里插入图片描述

1、动态SQL:if+where 语句

if标签使用

在涉及到动态查询相关中if标签使用较多,即如果有这个查询参数或者属性,我们拼接,没有跳过

    <select id="findByWhere" resultType="com.example.cwgl.entity.Bill" parameterType="com.example.cwgl.utils.PageModel">
        SELECT
        bill.id,bill.title,bill.userid,bill.money,bill.typeid,bill.remark,bill.paywayid,bill.time,bill.financialtypeid,financialtype.typename,
        USER .realname,
        payway.payway,
        type. NAME type
        FROM
        bill
        LEFT JOIN USER ON bill.userid = USER .id
        LEFT JOIN type ON bill.typeid = type.id
        LEFT JOIN payway ON paywayid = payway.id
        LEFT JOIN financialtype ON bill.financialtypeid = financialtype.id
        <where>
            <if test="data.id!=null"> and bill.id = #{data.id}</if>
            <if test="data.title!=null"> and bill.title = #{data.title}</if>
            <if test="data.type!=null"> and bill.typeid = #{data.type}</if>
            <if test="data.userid!=null"> and bill.userid = #{data.userid}</if>
            <if test="data.realname!=null "> and realname like concat('%',#{data.realname},'%')</if>
            <if test="data.money!=null"> and money = #{data.money}</if>
            <if test="data.remark!=null"> and remark like concat('%',#{data.remark},'%')</if>
            <if test="data.paywayid!=null"> and paywayid = #{data.paywayid}</if>
            <if test="data.startTime!=null"> and time >= #{data.startTime}</if>
            <if test="data.endTime!=null"> and time &lt;= #{data.endTime}</if>
        </where>
        order by time desc
        limit #{beginIndex},#{pageSize}
    </select>

解释:我们根据用户的标题,支付类型,时间等查询,前提是如果你传入的参数不为空,那我们动态的拼接


2、动态SQL:if+set 语句

set标签使用

在涉及到更新操作的时候,有时候我们不希望更新所有的字段,只更新有变化的字段。

如下我们更新一下支出的某一条数据,可能我们只需要更新部分字段,这里我们就用到了set标签

在这里插入图片描述
更新完后的结果
在这里插入图片描述

具体的实现如下

    <update id="update" parameterType="com.example.cwgl.entity.Bill">
        update bill
          <set>
              <if test="title!=null"> title = #{title}, </if>
              <if test="money!=null"> money = #{money}, </if>
              <if test="typeid!=null"> typeid = #{typeid}, </if>
              <if test="remark!=null"> remark = #{remark}, </if>
              <if test="paywayid!=null"> paywayid = #{paywayid},</if>
              <if test="financialtypeid!=null"> financialtypeid = #{financialtypeid}</if>
          </set>
        where id = #{id}
    </update>

解释:就是你前端传参数,如果你传入的这个参数不为空,那我们后台进行拼接更新一下,如果为空,就不更新,最后根据这条数据的id更新,这样就实现了更新部分属性

当然动态SQL还有很多其余标签,有机会在陆续整理吧,下期见!


非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞👍 关注❤️ 分享👥 留言💬thanks!!!

2021年2月24日21:30:57 愿你们奔赴在自己的热爱里!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员可乐丶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值