61MyBatis - where、trim元素

简介: 61MyBatis - where、trim元素

映射文件中编写的 SQL 后面都加入了“where 1=1”的条件,那么到底为什么要这么写呢?如果将 where 后“1=1”的条件去掉,那么 MyBatis 所拼接出来的SQL将会如下所示。

select * from t_customer where and username like concat('%',?, '%')

上面SQL中,where后直接跟的是and,这在运行时肯定会报SQL语法错误,而加入了条件“1=1”后,既保证了where后面的条件成立,又避免了where后面第一个词是and或者or之类的关键词。

那么在MyBatis中,有没有什么办法不用加入“1=1”这样的条件,也能使拼接后的SQL成立呢?

针对这种情况,MyBatis提供了< where>元素来处理这样的问题。

where 元素
<select id="findCustomerByNameAndJobs"
        parameterType="com.po.Customer"
        resultType="com.po.Customer">
    select * from t_customer
    <where>
        <if test="username!=null and username!=''">
            and username like concat('%',#sername, '%')
        </if>
        <if test="jobs!=null and jobs!=''">
            and jobs= #{jobs}
        </if>
    </where>
</select>
trim元素

除了使用< where>元素外,还可以通过< trim>元素来定制需要的功能,上述代码还可以修改为如下形式:

<select id="findCustomerByNameAndJobs"
        parameterType="com.po.Customer"
        resultType="com.po.Customer">
    select * from t_customer
    <trim prefix="where" prefixOverrides="and">
        <if test="username!=null and username!=''">
            and username like concat('%',#sername, '%')
        </if>
        <if test="jobs!=null and jobs!=''">
            and jobs= #{jobs}
        </if>
    </trim>
</select>

上述配置代码中,同样使用< trim>元素对“where 1=1”条件进行了替换,< trim>元素的作用是去除一些特殊的字符串,它的 prefix 属性代表的是语句的前缀(这里使用 where 来连接后面的SQL片段),而prefixOverrides属性代表的是需要去除的那些特殊字符串(这里定义了要去除SQL中的and),上面的写法和使用< where>元素基本是等效的。

目录
相关文章
|
11月前
|
SQL Java 数据库连接
mybatis的trim标签insert标签update标签
mybatis的trim标签insert标签update标签
|
3月前
|
SQL
条件构造器,MybatisPlus支持各种复杂的where条件,其实就是Wrapper,eq是等于的意思,相当于等于那个数值,ne就是不等于,gt大于的意思,ge大于等于,QueryWrapper是做
条件构造器,MybatisPlus支持各种复杂的where条件,其实就是Wrapper,eq是等于的意思,相当于等于那个数值,ne就是不等于,gt大于的意思,ge大于等于,QueryWrapper是做
|
9天前
|
SQL XML Java
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
文章介绍了MyBatis中动态SQL的用法,包括if、choose、where、set和trim标签,以及foreach标签的详细使用。通过实际代码示例,展示了如何根据条件动态构建查询、更新和批量插入操作的SQL语句。
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
|
3月前
|
SQL
自定义SQL,可以利用MyBatisPlus的Wrapper来构建复杂的Where条件,如何自定义SQL呢?利用MyBatisPlus的Wrapper来构建Wh,在mapper方法参数中用Param注
自定义SQL,可以利用MyBatisPlus的Wrapper来构建复杂的Where条件,如何自定义SQL呢?利用MyBatisPlus的Wrapper来构建Wh,在mapper方法参数中用Param注
|
11月前
|
Java 数据库连接 mybatis
mybatis的where标签
mybatis的where标签
|
SQL Java 数据库连接
mybatis trim标签的使用
mybatis trim标签的使用
88 0
|
12月前
|
SQL
29MyBatis - 动态SQL的 where标签
29MyBatis - 动态SQL的 where标签
42 0
|
SQL Java 数据库连接
MyBatis动态SQL中if、where、trim、choose、when、otherwise、foreach标签及sql标签范例
MyBatis动态SQL中if、where、trim、choose、when、otherwise、foreach标签及sql标签范例
122 0
|
SQL 测试技术
MyBatis-13MyBatis动态SQL之【where、set、trim】
MyBatis-13MyBatis动态SQL之【where、set、trim】
71 0
|
21天前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)