Java ->在mybatis和PostgreSQL Json字段作为查询条件的解决方案
读前思考:
你没想到解决办法?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字段作为查询条件的解决方案的更多相关文章
- PostgreSQL Json字段作为查询条件案例
业务扩展字段在数据库中经常会使用json格式的数据来存储,这就涉及到一个头疼的问题,假设要使用扩展字段里的某个值作为查询条件怎么办,原来PostgreSQL本身就支持这种查询方式. 例子:假设业务扩展 ...
- mybatis 使用记录(二) 动态拼接查询条件
2016-12-16 阅读项目代码时,在项目的xml文件中发现如下写法: SELECT student_user_id FROM tbr_student_class WHERE 1=1 <if ...
- thinkphp 同一字段不同查询条件实现
搞定了 另外区间查询还可以支持更多的条件,只要是针对一个字段的条件都可以写到一起,例如:$map['name'] = array(array('like','%a%'), array('like',' ...
- Spark SQL解析查询parquet格式Hive表获取分区字段和查询条件
首先说一下,这里解决的问题应用场景: sparksql处理Hive表数据时,判断加载的是否是分区表,以及分区表的字段有哪些?再进一步限制查询分区表必须指定分区? 这里涉及到两种情况:select SQ ...
- 【mysql】mysql5.7支持的json字段查询【mybatis】
mysql5.7支持的json字段查询 参考:https://www.cnblogs.com/ooo0/p/9309277.html 参考:https://www.cnblogs.com/pfdltu ...
- 【mysql】 mybatis实现 主从表 left join 1:n 一对多 分页查询 主表从表都有查询条件 【mybatis】count 统计+JSON查询
mybatis实现 主从表 left join 1:n 一对多 分页查询 主表从表都有查询条件+count 需求: ======================================= ...
- Java更新Oracle的clob类型字段
Java更新Oracle的clob类型字段 1.查询该clob字段 2.处理该clob字段查询结果 3.更新该clob字段查询结果 1.查询该clob字段 <select id="se ...
- SQL性能优化-查询条件与字段分开执行,union代替in与or,存储过程代替union
PS:概要.背景.结语都是日常“装X”,可以跳过直接看优化历程 环境:SQL Server 2008 R2.阿里云RDS:辅助工具:SQL 审计 概要 一个订单列表分页查询功能,单从SQL性能来讲,从 ...
- mybatis&plus系列------Mysql的JSON字段的读取和转换
mybatis&plus系列------Mysql的JSON字段的读取和转换 一. 背景 在平常的开发中,我们可能会有这样的需求: 业务数据在存储的时候,并不是以mysql中的varchar丶 ...
随机推荐
- linux服务器搭建--将win10换成linux
在这里说记录一下自己装linux的步骤,如果也有需要的朋友可以参看下: 1.目前win10的系统装成inux系统有3个解决办法: 第一:win10装linux子系统,网上已经有很多教程,步骤很简单 第 ...
- 数据挖掘:关联规则的apriori算法在weka的源码分析
相对于机器学习,关联规则的apriori算法更偏向于数据挖掘. 1) 测试文档中调用weka的关联规则apriori算法,如下 try { File file = new File("F:\ ...
- snkrs web端分析,canvas中的fingerpint
snkrs web端分析,canvas中的fingerpint 代码如下 (()=>{ const canvas = document.createElement("canvas&qu ...
- Halcon一日一练:获取程序运行时间
很多时候,我们需要知道每个函数的运算周期,以提高程序的运行效率.知道运行时间对于图像算法处理很重要 Halcon提供相关的算子,我们先来看代码: **获取图像处理时间 read_image(Image ...
- python字符的各种处理,不用内置函数总结
一.字符的逆序,可变字符长度的最大值,自然数列表相加 # e=input("输入自然数字字符串:") # result=0 # for x in e: # result+=eval ...
- 远程控制服务(SSH)之Linux环境下客户端与服务端的远程连接
本篇blog将讲述sshd服务提供的两种安全验证的方法,并且通过这两种方法进行两台Linux虚拟机之间的远程登陆. 准备工作: (1) 准备两台安装有Linux系统的虚拟机,虚拟机软件采用VM ...
- Leetcode(2)两数相加
Leetcode(2)两数相加 [题目表述]: 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两 ...
- 使用 pdf.js 跨域问题的处理方法1
在<使用 pdf.js 在网页中加载 pdf 文件>中详细介绍了 pdf.js 的使用与集成网页开发的基本方法.展示效果如下图: 站点的目录为 http://localhost:8033/ ...
- Java基础(二十四)Java IO(1)输入/输出流
在Java API中,可以从其中读入一个字节序列的对象称作输入流,而可以向其中写入一个字节序列的对象称为输出流. 输入流的指向称为源,程序从指向源的输入流中读取数据. 输出流的指向是字节要去的目的地, ...
- (记录)Ubuntu系统中运行需要导入jar包的Java程序
在学习Redis的过程中,在学到Redis客户端Jedis的时候,考虑到能不能在ubuntu下用Vim编写Java程序并且能够运行呢? 于是,首先在网上调研了一番用Vim写Java程序的可实现性. 相 ...