在mybatis和PostgreSQL Json字段做爲查詢條件的解決方案

Date:2019-11-15數據庫

 讀前思考:json

     你沒想到解決辦法?後端

    PostgreSQL 數據庫自己就支持仍是另有解決辦法?app

 

 說明:首先此次數據庫使用到Json數據類型的緣由,此次由於咱們在作了一個app 推送的業務,推送的時候,後端給app 推送 好幾個字段的內容。 咱們這裏就直接使用了jsonb數據類型。ui

使用推送技術:極光推送spa

如今開始正事了,code

以下:blog

"rule":{
    "tags": {
        "target": "logon"
    },
    "time": "2019-11-15 10:00:00",
    "method": "scheduled",
    "source": "backend",
    "aliases": [],
    "sendType": "tag",
    "registrationIds": []
}

如今我想獲取 rule 字段 裏面的  sendType="tag",那如今怎麼搞?get

代碼以下:io

 

 

  #####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

 

結果以下:

相關文章
相關標籤/搜索