MyBatis动态SQL--简化SQL语句的利器

本文介绍了MyBatis动态SQL的使用,包括sql、if、where、set、trim和foreach标签,展示了如何通过这些标签简化SQL语句的编写和维护,提高代码复用性。文中通过具体例子解释了各个标签的功能,如if标签用于条件判断,where标签避免OR关键字导致的语法错误,set标签自动处理更新操作中的逗号,以及foreach标签在批量操作中的应用。
摘要由CSDN通过智能技术生成

为什么要学MyBatis的动态SQL?

在执行sql语句时,不免会有一些很常用但是写起来又很复杂的SQL语句,使用了动态SQL就能把这些sql语句封装,只需要写简短的代码就能替换冗余的sql语句,并且在修改这些重组的SQL语句时,因为进行了封装,就能只修改一份就可以,减少出错的可能

今天没有重点 ,全是重点和干货

动态SQL

MyBatis的映射文件中支持在基础SQL上添加一些逻辑操作,并动态拼接成完整的sql之后再执行,以达到SQL复用,简化编程的效果

sql标签

对两个查询方法中相同的sql语句用sql进行了封装

两个查询方法
image-20200617083150684
  • 这两个方法都需要查询的是该课程的全部信息和属于该课程的学生的信息,只是查询的方式不同,一个是通过id,另一个通过name
   <sql id="subject_all">
        select t_subjects.id,t_subjects.name,t_subjects.grade,t_students.id stu_id,t_students.name stu_name,t_students.sex
        from t_subjects join t_stu_sub
        on t_subjects.id = t_stu_sub.subject_id
        join t_students
        on t_students.id = t_stu_sub.student_id
    </sql>

    <select id="querySubjectById" resultMap="Subject_map">
        <include refid="subject_all"></include>
        where t_subjects.id=#{id}
    </select>


    <select id="querySubjectByName" resultMap="Subject_map">
        <include refid="subject_all"/>
        where t_subjects.name =#{name}
    </select>
  • 通过标签能抽取到重复的sql语句,简化代码书写,在业务逻辑发生改变时,修改代码时只需要修改sql标签中的sql语句就可以,不需要重复修改大量的sql语句
查询结果
image-20200617083238203

if标签

另外对于查询方法而言,我们可能需要很多的查询方法,如果我们为每个方法都定义一个Dao的方法,那么我们的方法就会很多,MyBatis允许我们把这些特别相似的方法合并为一个方法

对于前面这两个方法,我们通过MyBatis来做合并方法

SubjectDao
image-20200617090326409

mapper映射文件

<!--    <select id="querySubjectById" resultMap="Subject_map">-->
<!--        <include refid="subject_all"></include>-->
<!--        where t_subjects.id=#{id}-->
<!--    </select>-->


<!--    <select id="querySubjectByName" resultMap="Subject_map">-->
<!--        <include refid="subject_all"/>-->
<!--        where t_subjects.name =#{name}-->
<!--    </select>  
<!-- MyBatis动态sql的方法合并-->
    <!-- 这里因为我们查询的参数是一个Subject的对象,我们需要通过对象的属性来查询
    我们约定要通过那个属性查询,那么就只(只给这一个属性赋值)的方式来查询 -->
    <select id="querySubjectBySubject" resultMap="Subject_map">
        <include refid="subject_all"/>
        where
        <if test="id!=null">
            t_subjects.id=#{id}
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

炒冷饭

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

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

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

打赏作者

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

抵扣说明:

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

余额充值