找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 182|回复: 0

Mybatis系列之WHERE标签

[复制链接]

373

主题

55

回帖

1944

积分

管理员

积分
1944
发表于 2020-8-27 11:14:29 | 显示全部楼层 |阅读模式
WHERE 标签主要用于做查询判断的时候使用,正常的一个查询语句结构如下SELECT *
FROM table
WHERE field1 = 1 AND field2 = 2 AND field3 = 3


如果直接使用一个动态SQL 的话
SELECT *
FROM table
WHERE
<if test="username != null and username.length > 0">
        username = #{username, jdbcType=VARCHAR}
</if>
<if test="name != null and name != ''">
        AND name = #{name}
</if>

1、首先第一个问题,如果说条件判断全部不满足,期望是查询所有的结果集,但是实际上查询语句多出了where ,会报错
2、第二个问题,如果说第一个条件不满足,满足了第二个条件,那么查询语句会多出一个AND ,会报错
以上两种情况都可以通过在WHERE 后面加一个1=1,固定查询语句,然后所有的标签条件语句都加AND 前缀就可以解决。

这种情况下TRIM 不能完全替代WHERE 标签,因为WHERE 标签除了可以自动清除前面的AND/OR 外,如果查询条件全部不满足还会自动清除where


更新: 是可以使用trim 标签去替代WHERE标签的
<trim prefix="WHERE" prefixOrverrides="AND |OR"></trim>
即可, 如果说trim 标签内没有内容,也不会添加WHERE 的





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Comsenz Inc.

GMT+8, 2024-9-20 09:04 , Processed in 0.036111 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表