栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java ebean 查询mysql中的json字段中的数组是否包含某个元素

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java ebean 查询mysql中的json字段中的数组是否包含某个元素

场景:

java ebean,把一个List用mysql中的json格式存储,然后要查询这个json字段是否包含某个元素。
PS:如果存储的不是List,而是实体类或者Map,则使用jsonEqualTo()方法来查询,具体请参考:
java ebean 用jsonEqualTo 查询mysql的json字段

废话不多说,直接上代码:

存储时:

public class Task {
    // @DbJson直接将List转成mysql中的json字段存储
    @DbJson
    @Column(name = "owners")
    private List owners;
    // 其它字段。。。。。。
}

查询时:

        expressionList expressionList = db.find(Task.class).where();
        // json字段owners存储形式:["owner1","owner2"],sql语句形式:where JSON_ConTAINS(owners, CONCAt('"owner1"')),双引号需要转义
        String str = "'"".concat("要查询的元素").concat(""'"); //
        expressionList.raw(String.format("JSON_ConTAINS(owners, CONCAt(%s))", str));
        return expressionList.eq("deleted", 0)
                .orderBy()
                .desc("id")
                .findList();
原理:
  1. mysql支持JSON_CONTAINS来对json字段进行查询:
select * from taskwhere JSON_CONTAINS(owners, CONCAT('"要查询的关键词"'));
  1. json字段owners存储形式:[“owner1”,“owner2”],每一个元素都有双引号,所以查询时要带双引号。另外双引号外面再带一个单引号,用于标识是字符串(两者反过来不行):
JSON_CONTAINS(owners, CONCAT('"owner1"'))
  1. 双引号在java中别忘了加反斜线进行转义。

查询成功截图:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/694717.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号