欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

在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

 

结果如下:

在mybatis和PostgreSQL Json字段作为查询条件的解决方案