公司开发中,遇到一个问题,数据库中保存一个字段用逗号拼接,前端传的是拼接的某个元素,用Wrapper.in(“字段名”,“前端传的值”),查询不出来
问题具体描述:在公司开发中,前端有一个查询需求(分页查询,用的是mybatisplus,Wrapper()),其中有一个查询字段里面是列表数据,鉴于数据库没有List的数据类型,将数据用逗号拼接成字符串然后保存。
这样前端在查询的时候传过来的是某一个值,使用Wrapper.in();查询是查询不到的,因为数据库存的是字符串,而不是list,无法用in
有一个方法就是查询前,先将该字段,用逗号分割,转成list,但是由于本人比较固执,执意要用Wrapper的方法进行查询
经过本人研究,终于找到一个方法用queryWrapper.apply()的方式进行查询:
具体代码如下:
LambdaQueryWrapper<ClassInfo> queryWrapper = Wrappers.<ClassInfo>lambdaQuery();
queryWrapper.apply(ObjectUtils.isNotEmpty(classInfoPageListDTO.getClassCatalogId()),
"FIND_IN_SET(" + classInfoPageListDTO.getClassCatalogId() + ",class_catalog_id)");
代码简单的解说一下:Apply()中的第一个字段是查询的条件,第二个字段是查询语句,括号里面的第一个字段是传过来的值,第二个字段是数据库的字段值。