mybatis-plus使用apply进行字符串拆分后进行包含查询

首先数据库是 PostgreSql,有一个字段要进行模糊查询,我们一般是通过 like 就好了,但是偏偏这个字段是逗号分割的字符串,这个时候如果使用 like 也可以,只有字符串唯一,比如是 uuid 这类,但是啊,但是,条件不是一个字符串,而是多个字符串,总不能直接扔进去 like 吧,例如有个字段存了一个学生选修的课程,选修的课程可多个,这个时候要查询,想要查询选修了历史或者语文的学生信息出来(注意是或者)

id        name         courses
1         张三		   语文、历史、数学
2         王五          历史、数学、物理
3         赵六		   化学、政治、英语

其实简单的办法就是用两个 or 去查询后去重
例如:

select  distinct * from student where courses like '%语文%' or courses like '%历史%'

其实还有一种写法就是使用 @> 运算符,先将 courses 这个字段以逗号截取成一个数组,然后再通过 @> 运算符 判断包含关系,例如:

select * from student where regexp_split_to_array(courses , ',') @> array['语文', '历史']::text[]")

如果转化到 mybatis-plus 的 api 中如下:

String str = "\'语文\', \'历史\'";
LambdaQueryWrapper<Student> queryWrapper = new QueryWrapper<Student>().lambda()
.apply(" regexp_split_to_array(courses, ',') @> array[" + str + "]::text[]")})
.... 其他条件

你可能感兴趣的:(java,mybati-plus,mybatis,java)