mybatis plus如何匹配纯数组和对象数组?

创建表的这个字段是这样子的

`goods_tips_id_list` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '',

数据库里面存储这样一条数据,下面这个不是数组,是一段json字符串的数组

["1615226392250040321","1617784249885577217","1617784414117744641"]

前端传过来一个字符串过来匹配,发现用like可以匹配出来,因为这条数据在数据库里面已经是一个json字符串了,所以like是没有问题的,但是总感觉这个不是办法,因为不是精准匹配的,万一数据传过来的是77217这一小段字符串也是会匹配到的,有什么办法可以匹配纯数组,还有数组对象

wrapper.like("goods_tips_id_list", tipId);

因为用like方法的话,如果前端传过来

tipId = 1617784249885577217,可以匹配到
tipId = 77217,也可以匹配到

甚至感觉传过来的是下面两种情况都能匹配到了,毕竟里面是一段字符串

tipId = 321","161
tipId = ["1615


回答:

mybatis plus只是根据代码自动生成sql执行而已,你的这个需要用到数据库层面的对json支持的能力,我不知道你的数据库是什么,但是看你这个建表语句应该是mysql,从5.7.8版本开始mysql提供了对原生JSON数据类型的支持,可以使用json_contains来判断

String tipId = "1617784249885577217";

wrapper.and(new Consumer<QueryWrapper<Object>>() {

@Override

public void accept(QueryWrapper<Object> queryWrapper) {

queryWrapper.last("json_contains(goods_tips_id_list,'\"" + tipId + "\"')");

}

});


回答:

我认为,你这样存储goods_tips_id_list text的目的,仅仅是为了:冗余数据,方便读取。而不是用来作为查询条件。

这明显就是一个多对多的关系,既然用了关系型数据库,为啥还要这样存储。


假如强行用于查询,这明显就没办法建立索引,全表扫描的话,查询效率是个问题。


回答:

在两边加上双引号再去匹配呢

以上是 mybatis plus如何匹配纯数组和对象数组? 的全部内容, 来源链接: utcz.com/p/944939.html

回到顶部