mybatis plus QuerManager使用 FIND_IN_SET

前言:

新项目要做一个根据用户数据权限查询用户列表接口,查询逗号分割的数据用like查询会导致数据不准确,然后公司用的是mybatis-plus 我把解决问题过程中的一个坑记录一下,防止大家入坑。

问题解析:

说白了就是 一个字段里面的数据是用(,)逗号隔开的,比如:A100,A1001,A1002,B100,B1001,B1002 之类的数据, 然后使用A100去查询 不能查询出来A10010,所以就想到了 FIND_IN_SET ,由于本人比较懒直接百度了下,然后就是看到千篇一律的博客,最后执行sql报错,下面我为大家看下我的解决过程。

问题展示:


这位博主和大多数博主几乎是一样的代码,我就随便粘过来一个。可能是考虑的东西太少导致了一些BUG

博主代码:

wrapper.apply(crmSupInfoDTO.getCooperative() != null,"FIND_IN_SET ("+crmSupInfoDTO.getCooperative()+",cooperative)");

注意问题:

如果数据库存的是数字,那么运行是没有问题的。下面看我的运行结果。

数据库数据结构:

在这里插入图片描述

接下来是字符串的数据
在这里插入图片描述

数据库数据结构:

在这里插入图片描述

解决问题:

出现这个问题的时候我感觉很奇怪,我怕用程序员最严格的开发规范 Ctrl+c Ctrl+v 来进行的开发,因为之前已经写过一个类似的功能,感觉不会有问题,没想到阴沟翻船。

1. 对比sql
执行正确sql:

SELECT
*
FROM
	expert_info 
WHERE
	FIND_IN_SET ( 1, specialty_or_field ) 

执行错误sql:

SELECT
	id,
	user_code,
	direction_authorization_code,
	direction_authorization_name,
	scope_authorization,
	no_scope_authorization,
	remark,
	create_time,
	update_time,
	DATA,
	data_user_code,
	data_user_name 
FROM
	user_authorization 
WHERE
	FIND_IN_SET ( JT0137000, DATA )

最后发现 入参 JT0137000 字符串没加引号(’’)

然后修改代码:

修改前:

        queryWrapper.apply(branchCode != null,"FIND_IN_SET ("+branchCode+",data)");

修改后:

        queryWrapper.apply(branchCode != null,"FIND_IN_SET ('"+branchCode+"',data)");

然后就万事大吉,一路高歌没bug



结论:

大家以后有需要 查询符号分割的数据结构时候,用 like 会查询到多余数据,大家可以使用FIND_IN_SET 函数,切记一定要加冒号,我把正确的代码写在下面,大家可以自行copy

正确的代码:

queryWrapper.apply( 入参 != null,"FIND_IN_SET ('"+ 入参 +"', 字段名 )");
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值