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();
- mysql支持JSON_CONTAINS来对json字段进行查询:
select * from taskwhere JSON_CONTAINS(owners, CONCAT('"要查询的关键词"'));
- json字段owners存储形式:[“owner1”,“owner2”],每一个元素都有双引号,所以查询时要带双引号。另外双引号外面再带一个单引号,用于标识是字符串(两者反过来不行):
JSON_CONTAINS(owners, CONCAT('"owner1"'))
- 双引号在java中别忘了加反斜线进行转义。
查询成功截图:



