mybatis -动态SQL

本文介绍了MyBatis中的动态SQL功能,包括if、choose、trim、where、set、foreach、bind标签的使用,以及.sql片段和include标签的应用,旨在简化SQL拼接,提高代码维护性。
摘要由CSDN通过智能技术生成

为什么会有动态sql的出现?

如果采用JDBC进行处理,需要根据条件是否取值进行SQL语句的拼接,一般情况下是使用StringBuilder类及其append方法实现,还是有些繁琐的。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL语句的痛苦。例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。 MyBatis在简化操作方法提出了动态SQL功能,将使用Java代码拼接SQL语句,改变为在XML映射文件中截止标签拼接SQL语句。相比而言,大大减少了代码量,更灵活、高度可配置、利于后期维护 MyBatis中动态SQL是编写在mapper.xml中的,其语法和JSTL类似,但是却是基于强大的OGNL表达式实现的。

简单的创建一个pojo实例对象,通过实例的结构查询MySQL数据库中的数据。

public class People {
   
    private int id; //id
    private String name;//姓名
    private String address;//家庭地址
    }

1、if标签

通过if处理用户多变的查询条件,mapper映射文件通过if进行判断参数的属性是否为null。
<if>标签的test属性值为OGNL(对象导航图语言)表达式,通过对象属性名可以快速获取到对象属性值。

  <select id="selectIf" resultType="People">
        select * from people where 1=1
        <if test="name!=null">
            and name=#{
   name}
        </if>
        <if test="address!=null">
            and address=#{
   address}
        </if>
    </select>

注:
​ name!=null : OGNL 表达式,直接写属性名可以获取到属性值。不需要添加${}或#{}
​ name=#{name} 中name是SQL的列名。#{name}是MyBatis获取参数对象属性值的写法(之前学习的)。
​ where 1=1 中1=1是为了保证SQL语法的正确性。如果if成立没有1=1最后的SQL就是where and name=xxx 这种写法是不对的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值