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>


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


不传任何参数的请求


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


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


生成的 SQL 语句如下:


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


传递 1 个参数的请求


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


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

上一篇:php连接sql2005


下一篇:没有Hyper-V服务,WP Emulator无法启动