首页 > 数据库 >mysql存json数据时的查询办法

mysql存json数据时的查询办法

时间:2023-12-11 18:05:05浏览次数:40  
标签:featureMap 查询 featureMaps json InventoryMainTypeCode key mysql query public


很多时候mysql的一列当中存的是json格式的数据,这时候如果要查询某个key对应的值的时候要如何查询呢,这里记录一种查询方法:

json列的值:
{“InventoryMainTypeCode”: 1, “InventoryMainTypeName”: “GOOD”}

现在要查询InventoryMainTypeCode为xxx或者InventoryMainTypeName为xxx的数据:(这里以springboot+mybatis为例子)

代码:
请求类:

Query query = new Query();
@Data
public class Query implements Serializable {

    
    private Map<String, Object> featureMap = new HashMap<>();

    public void setFeature(String feature) {
        if (StringUtils.isNotBlank(feature)) {
            featureMap = JSON.parseObject(feature, Map.class);
        }
    }

    public void addFeature(String key, Object value) {
        if (StringUtils.isBlank(key)) {
            return;
        }
        this.featureMap.put(key, value);
    }
    public void addFeatureMap(Map<String, Object> featureMaps) {
        if (MapUtils.isNotEmpty(featureMaps)){
            this.featureMap.putAll(featureMaps);
        }
    }
}

在代码中将key添加到Feature中:

query.addFeature(DicConst.InventoryMainTypeCode.name(), 1);
List<ResultDTO> dTOS = dictionaryManager.queryDicByParam(query);

mapper文件:

List<CnbDictionaryDO> queryDicByParam(CnbDictionaryQuery query);

xml:

<select id="queryDicByParam" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List"/>
        from
        <include refid="Table_Name"/>
        <where>
            <if test="id != null">
                and id = #{id}
            </if>
         
            <if test="featureMap != null and featureMap.size > 0">
                <foreach collection="featureMap" index="key" item="value">
                    <if test="value != null">
                        <![CDATA[and feature->'$.${key}' = #{value}]]>
                    </if>
                </foreach>
            </if>
        </where>
    </select>


标签:featureMap,查询,featureMaps,json,InventoryMainTypeCode,key,mysql,query,public
From: https://blog.51cto.com/u_15980129/8776423

相关文章

  • Cesium 加载倾斜摄影模型记录(osgb切片,shp拔高切片、模型加载、鼠标移入选中、点选查
    一、shp模型拔高切片shp如果数据量过大,做分类处理,加载会异常慢,所以需要先对其进行分割之后再进行切片(用qgis即可)切片规则设置1、记得勾选构造底面 2、如果你的shp数据中有高度字段的话,可以选择高度字段,如果没有的话,设置固定高度的高度比你的模型稍微高一点,可以保证包着整个模型,......
  • 报错:Client does not support authentication protocol requested by server; consider
    IDEA启动项目登录时显示用户或密码错误或者连接mysql数据库时报错原因:mysql8之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password,所以可以需要改变mysql的加密规则打开cmd窗口,登录mysql;mysql-uroot-h127.0.0.1-P3306-p......
  • Chrome 浏览器开启 Json 数据格式化显示
    Chrome浏览器开启Json数据格式化显示默认格式安装扩展程序JSONView......
  • Hibernate查询数据库记录自动修改的问题
    问题描述在项目中使用了hibernate进行查询记录,但是每次查询了记录后,发现控制台打印的sql不仅有select查询语句,还有update语句,但代码中并没有执行update的代码,就很奇怪???分析排查通过对方法内代码的debug调试,发现在跳出service方法后update语句sql才执行,这时候我就想到了spring的......
  • PostgreSQL 执行动态crosstab查询
    在本文中,我们将介绍如何在PostgreSQL中执行动态crosstab查询。crosstab查询是一种将行转换为列的查询方式,常用于生成交叉表格。使用动态crosstab查询可以根据查询结果自动调整生成的表格结构,使其更加灵活和可扩展。 什么是动态crosstab查询?动态crosstab查询是一种使用动态SQL......
  • MySQL中的日期函数
    1.查看日期/时间1.1查看当前的日期/时间(1)NOW():返回当前的日期时间;(2)CURDATE():返回当前的日期;(3)CURTIME():返回当前的时间;SELECTNOW(),CURDATE(),CURTIME();NOW()/CURDATE()/CURTIME()1.2提取指定的日期/时间成分(1)YEAR():提取年份;(2)MONTH():提取月份;(3)DAY():提取天(号/日);(4......
  • liunx二进制包安装5.6MySQL数据库
    官网下载对应的二进制版本安装包https://downloads.mysql.com/archives/community/#解压二进制压缩包[root@localhost~]#wgethttps://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.20-linux-glibc2.5-x86_64.tar.gz[root@localhost~]#tarxfmysql-5.5.32-linux2.......
  • 查询 id名 长度等
    variables{dwordcontextCAN=0x00010000;//报文名字dwordcontextLIN=0x00050000;//固定的dwordcontextMOST=0x00060000;dwordcontextFLEXRAY=0x00070000;dwordcontextBEAN=0x00080000;dwordcontextJ1708=0x00090000;dwordid;//报文ID......
  • Confluence7.4.6突然爆事务隔离级别问题-解决方案-MySQL session isolation level 'RE
    MySQLsessionisolationlevel'REPEATABLE-READ'isnolongersupported.Sessionisolationlevelmustbe'READ-COMMITTED'.Seehttp://confluence.atlassian.com/x/GAtmDg  成功解决方案:查看http://confluence.atlassian.com/x/GAtmDgFORMYSQL8.X......
  • C# mysql where in 查询时参数化的问题
    大家都知道写代码查询sql的时候是需要对传入的变量参数化的,否则就会有sql注入的风险具体的原因是拼接传入的字符串会被当做sql语句进行解析,如果在传入的参数上做点手脚,就会导致sql的执行超出预期,具有很大的安全隐患,比如当登陆时传入的sql语句是selectcount(*)fromtablewher......