我们可以用MybatisPlus的apply方法进行匹配。
selectPage(reqVO, new LambdaQueryWrapperX<ReviewProcessCommentTempDO>()
.apply(StrUtil.isNotEmpty(reqVO.getBsTypeCode()),"JSON_CONTAINS(bs_type_code,'[\"" + reqVO.getBsTypeCode() + "\"]')"));
再把获得的数据以JSON解析就可以得到数据了。
List<String> BsTypeCodeList = JsonUtils.parseArray(reviewProcessCommentTempDO.getBsTypeCode(), String.class);
比如:
如果要匹配下图中json里的bodySeal数组中的id字段,
sql语句
SELECT * FROM system_flow_form_annex
WHERE JSON_CONTAINS(expand_attribute,'{"bodySeal":[{"id":2}]}') ;
java代码
selectList(new LambdaQueryWrapperX<FlowFormAnnexDO>()
.apply(id != null, "JSON_CONTAINS(expand_attribute,'{\"bodySeal\":[{\"id\":" + id + "}]}')"));
如果要匹配下图中json里的username字段,
sql语句
SELECT *FROM system_project_participants
WHERE JSON_CONTAINS(manager, (SELECT JSON_ARRAY(JSON_OBJECT('username', '0749'))));
java代码
projectParticipantsMapper.selectList(
new LambdaQueryWrapperX<ProjectParticipantsDO>()
.and(StrUtil.isNotEmpty(username),
wrapper -> wrapper.apply("JSON_CONTAINS(manager,(SELECT JSON_ARRAY(JSON_OBJECT(\'username\', \'" + username + "\'))))")
));