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

作者站长头像
站长
· 阅读数 7
创建表的这个字段是这样子的
`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","161tipId = ["1615

回复
1个回答
avatar
test
2024-07-11

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 + "\"')");
    }
});
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容