在mybatis和PostgreSQL Json字段作为查询条件的解决方案
程序员文章站
2022-04-14 19:58:42
Date:2019-11-15 读前思考: 你没想到解决办法? PostgreSQL 数据库本身就支持还是另有解决办法? 说明:首先这次数据库使用到Json数据类型的原因,这次因为我们在做了一个app 推送的业务,推送的时候,后端给app 推送 好几个字段的内容。 我们这里就直接使用了jsonb数据 ......
date:2019-11-15
读前思考:
你没想到解决办法?
postgresql 数据库本身就支持还是另有解决办法?
说明:首先这次数据库使用到json数据类型的原因,这次因为我们在做了一个app 推送的业务,推送的时候,后端给app 推送 好几个字段的内容。 我们这里就直接使用了jsonb数据类型。
使用推送技术:极光推送
现在开始正事了,
如下:
"rule":{ "tags": { "target": "logon" }, "time": "2019-11-15 10:00:00", "method": "scheduled", "source": "backend", "aliases": [], "sendtype": "tag", "registrationids": [] }
现在我想获取 rule 字段 里面的 sendtype="tag",那现在怎么搞?
代码如下:
#####mybatis##### <select id="selectpushdatalist" resultmap="baseresultmap" parametertype="com.jpc.jpushdata" > select <include refid="base_column_list" /> from jp_push jpt <where> delete_flag=1 and (rule::json->>'sendtype')::text = 'tag' <if test="name != null and name !=''" > and name =#{name,jdbctype=varchar} </if> order by create_time asc limit ${pagesize} offset ${(currentpage - 1) * pagesize} </where> </select> ####postgresql sql#### select uuid, create_user, create_time, update_user, update_time, delete_flag, name, type, push, rule, status from jp_push jpt where jpt.delete_flag = 1 and ( jpct.rule :: json ->> 'sendtype' ) :: text = 'tag' and jpt.name = 'testname' order by jpt.create_time asc limit 20 offset 0
结果如下: