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

4 篇文章 0 订阅
2 篇文章 0 订阅

场景

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<String> owners;
    // 其它字段。。。。。。
}

查询时:

        ExpressionList<Task> 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中别忘了加反斜线\进行转义。

查询成功截图:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值