【辰兮要努力】:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行!
博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新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 <= #{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 愿你们奔赴在自己的热爱里!