MyBatis 中为什么不建议使用 where 1=1?(2)

简介: MyBatis 中为什么不建议使用 where 1=1?(2)

正确的改进方式


其实不用,在 MyBatis 中早已经想到了这个问题,我们可以将 SQL 中的 where 关键字换成 MyBatis 中的标签,并且给每个标签内都加上 and 拼接符,这样问题就解决了,如下代码所示:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper">
    <select id="list" resultType="com.example.demo.model.User">
        select * from user
        <where>
            <if test="name!=null">
               and name=#{name}
            </if>
            <if test="password!=null">
                and password=#{password}
            </if>
        </where>
    </select>
</mapper>


代码改造完成之后,接下来我们来测试一下所有的请求场景。


不传任何参数的请求


此时我们可以不传递任何参数(查询所有数据),如下图所示:


微信图片_20220120234157.jpg


生成的 SQL 语句如下:


微信图片_20220120234213.jpg


传递 1 个参数的请求


也可以传递 1 个参数,根据 name 进行查询,如下图所示:


微信图片_20220120234227.jpg

相关文章
|
5月前
|
SQL
条件构造器,MybatisPlus支持各种复杂的where条件,其实就是Wrapper,eq是等于的意思,相当于等于那个数值,ne就是不等于,gt大于的意思,ge大于等于,QueryWrapper是做
条件构造器,MybatisPlus支持各种复杂的where条件,其实就是Wrapper,eq是等于的意思,相当于等于那个数值,ne就是不等于,gt大于的意思,ge大于等于,QueryWrapper是做
|
3月前
|
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标签的用法
|
2月前
|
SQL XML Java
Mybatis的<where>,<if>等标签用法
这篇文章详细解释了Mybatis中<where>和<if>等标签的用法,展示了如何在SQL动态构建中有效地过滤条件和处理逻辑分支。
254 1
|
5月前
|
SQL
自定义SQL,可以利用MyBatisPlus的Wrapper来构建复杂的Where条件,如何自定义SQL呢?利用MyBatisPlus的Wrapper来构建Wh,在mapper方法参数中用Param注
自定义SQL,可以利用MyBatisPlus的Wrapper来构建复杂的Where条件,如何自定义SQL呢?利用MyBatisPlus的Wrapper来构建Wh,在mapper方法参数中用Param注
|
Java 数据库连接 mybatis
mybatis的where标签
mybatis的where标签
|
SQL Java 数据库连接
61MyBatis - where、trim元素
61MyBatis - where、trim元素
49 0
|
SQL
29MyBatis - 动态SQL的 where标签
29MyBatis - 动态SQL的 where标签
49 0
|
SQL XML Java
Mybatis中$ {} 和 # {}的区别,动态SQL之if、where、set、trim、foreach标签的使用
Mybatis中$ {} 和 # {}的区别,动态SQL之if、where、set、trim、foreach标签的使用
217 0
Mybatis中$ {} 和 # {}的区别,动态SQL之if、where、set、trim、foreach标签的使用
|
SQL Java 数据库连接
MyBatis动态SQL中if、where、trim、choose、when、otherwise、foreach标签及sql标签范例
MyBatis动态SQL中if、where、trim、choose、when、otherwise、foreach标签及sql标签范例
140 0
|
SQL 测试技术
MyBatis-13MyBatis动态SQL之【where、set、trim】
MyBatis-13MyBatis动态SQL之【where、set、trim】
85 0