Mybatis中关于字符串字段的判断不为空且不为null(简单方式)
在开发过程中我们一般遇到的是对入参的判断不为空且不为null,例:<if test="status != null and status != ''">andrf.status = #{status}</if>本次说的是对查询字段的判断,例:-- a为用户,b为角色,c为组织,该sql模拟查询已绑定组织和角色的用户SELECTa.*, b.role_type,c.`name
·
在开发过程中我们一般遇到的是对入参的判断不为空且不为null,例:
<if test="status != null and status != ''">
and rf.status = #{status}
</if>
本次说的是对查询字段的判断,例:
-- a为用户,b为角色,c为组织,该sql模拟查询已绑定组织和角色的用户
SELECT
a.*, b.role_type,
c.`name`
FROM
user a
LEFT JOIN role b ON a.role_id = b.id
LEFT JOIN group c ON a.group_id = c.id
WHERE
a.`status` = '0'
AND a.role_id <> ''
AND a.role_id IS NOT NULL
AND a.group_id <> ''
AND a.group_id IS NOT NULL
看起来是不是很臃肿,现在我们来对它进行简化
-- a为用户,b为角色,c为组织,该sql模拟查询已绑定组织和角色的用户
SELECT
a.*, b.role_type,
c.`name`
FROM
user a
LEFT JOIN role b ON a.role_id = b.id
LEFT JOIN group c ON a.group_id = c.id
WHERE
a.`status` = '0'
--AND a.role_id <> ''
--AND a.role_id IS NOT NULL
--AND a.group_id <> ''
--AND a.group_id IS NOT NULL
AND IFNULL(a.role_id,'')<>''
AND IFNULL(a.group_id ,'')<>''
--当然,这个是mysql的语法函数,sqlServer类似的函数是isnull(value1,value2),
Oracle类似的函数是nvl(value1,value2) ,用法大同小异
还有更简单的:
-- a为用户,b为角色,c为组织,该sql模拟查询已绑定组织和角色的用户
SELECT
a.*, b.role_type,
c.`name`
FROM
user a
LEFT JOIN role b ON a.role_id = b.id
LEFT JOIN group c ON a.group_id = c.id
WHERE
a.`status` = '0'
--AND a.role_id <> ''
--AND a.role_id IS NOT NULL
--AND a.group_id <> ''
--AND a.group_id IS NOT NULL
--AND IFNULL(a.role_id,'')<>''
--AND IFNULL(a.group_id ,'')<>''
AND a.role_id > ''
AND a.group_id > ''
是不是很简单粗暴呢,多多支持哈!
更多推荐
已为社区贡献2条内容
所有评论(0)