读前思考:

  你没想到解决办法?PostgreSQL 数据库本身就支持还是另有解决办法?

使用JOSNB作为字段类型。现在开始,,,,,,,,,,,,,,,,,,

json如下:

"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

结果如下:

再看如下的json串:

--如何获取title,description呢--------

----------pre- zh en app----------
"pre": {
"zh": {
"app": {
"title": "test",
"description": "test",
"images": [
"https://www.baidu.com/",
"https://www.baidu.com/1"
]
}
},
"en": {
"app": {
"title": "test",
"description": "test",
"images": [
"https://www.baidu.com/",
"https://www.baidu.com/1"
]
}
}
---------------pre zh en web------------------------------------
"pre": {
"zh": {
"web": {
"title": "test",
"description": "test",
"images": [
"https://www.baidu.com/",
"https://www.baidu.com/1"
]
}
},
"en": {
"web": {
"title": "test",
"description": "test",
"images": [
"https://www.baidu.com/",
"https://www.baidu.com/1"
]
}
}
}
如何写sql? 把语言和端作为一个变量传进去...
SELECT
    uuid, address,pre,
    pre :: json -> '${lunguage}' -> '${device}' ->> 'title' AS title,
    pre :: json -> '${lunguage}' -> '${device}' ->> 'description' AS description
FROM
  "ban".test j

获取 zh-web不为空的内容:

lunguage 传  zh,device传 web
SELECT
    uuid,address, pre,
    pre :: json -> '${lunguage}' -> '${device}' ->> 'title' AS title,
    pre :: json -> '${lunguage}' -> '${device}' ->> 'description' AS description
FROM
  "ban".test j where pre :: json -> '${lunguage}' -> '${device}' is not null

获取 zh-web-images数组里面的第一个图片信息不为空的内容:

SELECT 
uuid,address, pre,
    pre :: json -> '${lunguage}' -> '${device}' ->> 'title' AS title,
    pre :: json -> '${lunguage}' -> '${device}' ->> 'description' AS description,
pre :: json -> '${lunguage}' -> '${device}' ->>0::'images' AS images
FROM
 "ban".test j where pre :: json -> '${lunguage}' -> '${device}' is not null

总结:PostgreSQL 本身就支持以json作为sql的查询条件。

Java ->在mybatis和PostgreSQL Json字段作为查询条件的解决方案的更多相关文章

  1. PostgreSQL Json字段作为查询条件案例

    业务扩展字段在数据库中经常会使用json格式的数据来存储,这就涉及到一个头疼的问题,假设要使用扩展字段里的某个值作为查询条件怎么办,原来PostgreSQL本身就支持这种查询方式. 例子:假设业务扩展 ...

  2. mybatis 使用记录(二) 动态拼接查询条件

    2016-12-16 阅读项目代码时,在项目的xml文件中发现如下写法: SELECT student_user_id FROM tbr_student_class WHERE 1=1 <if ...

  3. thinkphp 同一字段不同查询条件实现

    搞定了 另外区间查询还可以支持更多的条件,只要是针对一个字段的条件都可以写到一起,例如:$map['name'] = array(array('like','%a%'), array('like',' ...

  4. Spark SQL解析查询parquet格式Hive表获取分区字段和查询条件

    首先说一下,这里解决的问题应用场景: sparksql处理Hive表数据时,判断加载的是否是分区表,以及分区表的字段有哪些?再进一步限制查询分区表必须指定分区? 这里涉及到两种情况:select SQ ...

  5. 【mysql】mysql5.7支持的json字段查询【mybatis】

    mysql5.7支持的json字段查询 参考:https://www.cnblogs.com/ooo0/p/9309277.html 参考:https://www.cnblogs.com/pfdltu ...

  6. 【mysql】 mybatis实现 主从表 left join 1:n 一对多 分页查询 主表从表都有查询条件 【mybatis】count 统计+JSON查询

    mybatis实现 主从表 left join  1:n 一对多 分页查询   主表从表都有查询条件+count 需求: ======================================= ...

  7. Java更新Oracle的clob类型字段

    Java更新Oracle的clob类型字段 1.查询该clob字段 2.处理该clob字段查询结果 3.更新该clob字段查询结果 1.查询该clob字段 <select id="se ...

  8. SQL性能优化-查询条件与字段分开执行,union代替in与or,存储过程代替union

    PS:概要.背景.结语都是日常“装X”,可以跳过直接看优化历程 环境:SQL Server 2008 R2.阿里云RDS:辅助工具:SQL 审计 概要 一个订单列表分页查询功能,单从SQL性能来讲,从 ...

  9. mybatis&plus系列------Mysql的JSON字段的读取和转换

    mybatis&plus系列------Mysql的JSON字段的读取和转换 一. 背景 在平常的开发中,我们可能会有这样的需求: 业务数据在存储的时候,并不是以mysql中的varchar丶 ...

随机推荐

  1. mysql锁表处理语句

    show OPEN TABLES where In_use > 0; -- 查询是否锁表show processlist; -- 查询到相对应的进程===然后killidSELECT * FRO ...

  2. pod setup 不顺利

    JerryMacBook:~ jerry$ pod setup Setting up CocoaPods master repo $ /usr/bin/git clone https://github ...

  3. 算数运算符and数据类型转换

    一元(单目)运算符有且只有一个运算参数,二元(双目)运算符有且只有两个运算参数. 二元运算符:+(加).-(减).*(乘)./(求商).%(求余) 一元运算符:+(正),-(负),++(自增),--( ...

  4. PowerUp攻击模块实战

    PowerUp攻击模块实战   1.将PowerUp.ps1脚本上传至目标服务器,然后在本地执行 2.使用IEX在内存中加载此脚本,执行以下命令,脚本将进行所有的检查. powershell.exe ...

  5. ‎Cocos2d-x 学习笔记(15.1) EventDispatcher

    EventDispatcher对监听器进行管理,围绕着监听器工作.可以添加.删除.暂停/恢复监听器.分发事件到监听器. 1. 一些成员 /** 把ListenerID和同ID监听器的容器对应 */ s ...

  6. LeetCode初级算法--排序和搜索01:第一个错误的版本

    LeetCode初级算法--排序和搜索01:第一个错误的版本 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.cs ...

  7. ASP.NET Core 使用 JWT 自定义角色/策略授权需要实现的接口

    目录 ① 存储角色/用户所能访问的 API ② 实现 IAuthorizationRequirement 接口 ③ 实现 TokenValidationParameters ④ 生成 Token ⑤ ...

  8. vue实现跑马灯效果

    vue实现跑马灯效果为阿中哥哥应援 1.效果图 2.实现代码 <!DOCTYPE html> <html lang="en"> <head> & ...

  9. 记录一次gdb debug经历

    目录 问题描述 查看core文件 使用gdb查看core文件 总结 问题描述 今天在写代码时,运行时奔溃了.segment fault,而且是在程序退出main()函数后,才报的. 唯一的信息是:Se ...

  10. Java基础(三十)泛型程序(Generic Programming)

    一.泛型程序的定义和使用 1.为什么要使用泛型程序设计 泛型程序设计意味着编写的代码可以被很多不同类型的对象所重用.同时,使得程序具有更好的可读性和安全性. ArrayList<String&g ...