sql怎么把json直接转成list_数据库JSON怎么改?一个SQL函数让你的操作瞬间高大上...

3bd1c3b3a88afd2dcfd29948dd4110b6.png

网图侵删

场景描述

不知道各位小伙伴有没有遇到过这样的情况:mysql表中有一个字段res_content 是一个由longtext类型(可以理解为一个更长的varchar)保存的巨大的JSON对象,但是,由于录入的疏忽,导致这个json对象中的有一个属性值错误,需要重新修改这个json对象的属性值,于是,你就不得不将整个json对象,也就是res_content字段重新替换了一遍。=。= |||

一个json中小小的属性需要更新,却要替换整个json对象,仅仅因为它在数据库中是以一个字段存储的!!?这也太傻x了!

9452ada7aaed0e6a32eff2ca73aecedc.png

网图侵删

我是拒绝的

这样做虽然简单粗暴,但很明显不符合我追求完美的性格,既然只有一个属性出错,那为什么不能直接替换这个JSON中具体的属性呢?而且这样的解决办法,如果处理上千万条JSON还可以减小mysql的性能开销,岂不美哉!?

JSON_REPLACE(...)

官方描述

官方的第一句解释是:Replaces existing values in a JSON document and returns the result。就冲这句话,基本可以锁定它就是我要找的解决方案。我们来看一下官方的示例:

8f26abf016c7f2746191924097f5f24b.png

案例一

上面的例子很好理解,首先,它定义了一个JSON字符串变量,然后通过JSON_REPLACE函数将这个变量中的属性a的值由1 改为了10,然后将属性c的值改为了‘[true, false]’,但由于json字符串中并没有属性 c 因此只有属性 a 修改成功了。(这里需要注意,mysql函数仅仅是做数据转换,并不涉及到真正的增删改查,因此还需要配合具体的UPDATE才能够真正更新数据)

看过这个例子之后,我思考了一下我的应用场景,只需要在更新的sql语句中调用JSON_REPLACE函数,将json对象所对应的字段比作上面的JSON字符串变量,然后通过 ‘$xxx’ 匹配到我所希望修改的值,然后就可以成功修改JSON对象中的属性了。

验证测试

现在我有一张employee表,它的last_name字段是一个简单的JSON字符串:

db626652018e7a74a2b04efd42d0ec3a.png

employee表

现在,我希望修改emp_id = 1的记录,将这条记录中last_name中的name改成“Harry”,gender改成 “”。于是我执行了下面的SQL:

UPDATE employee SET last_name = json_replace(last_name, '$.name', "Harry
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于SSM框架+Mysql的企业CRM客户关系管理系统项目源码+数据库+项目说明.zip # 关于项目 该项目是基于SSM实现的客户关系管理系统 ## 1️⃣技术栈 Spring+SpringMVC+MyBatis+Thymeleaf+Vue+JS+Jquery+Axios+Json 服务器: Tomcat_9.0.60 数据库: MySQL_8.0.28 开发工具:IDEA_2021.3.3 页面:Bootstrap_3.3.0 ## 2️⃣已实现的功能 **:star: 账号登录** **:star: 市场活动** ## 3️⃣日志 ### 2022/4/2 - 实现基本的登录功能: 1. 使用@RequestBody接收Axios传来的Json对象时,可以用一个Map对象接收,也可以用一个POJO类对象接收 2. 使用@RequestBody接收Axios传来的Json对象时,必须设置请求报文中的Content-Type属性为application/json,否则报HTTP:415 3. 导入js静态文件(vue.js,jquery.js等)时,不要直接使用相对路径,使用thymeleaf或者使用绝对路径 ### 2022/4/3 - 记住密码,退出登录,验证登录状态: 1. 使用@RequestBody接收Axios传来的Json对象时,接收到的checked属性为一个Boolean类型,而不是一个String 2. 在用户不需要记住密码时,调用setMaxAge方法将cookie的生命周期设置为0,即可销毁cookie 3. 由于使用thymeleaf暂时没找到操作cookie的方法,故此导入vue-cookie包,使用vue操作cookie 4. 在vue中,不能用$cookies.get('loginAct') && $cookies.get('loginPwd')为checked赋值,此时值为$cookies.get('loginPwd')。应该用!!($cookies.get('loginAct') && $cookies.get('loginPwd')),此时值为一个布尔类型 ### 2022/4/4 - 工作台主页显示,市场活动主页面显示,创建市场活动: 1. 输入日期的input标签中应该加上autocomplete="off",否则历史记录的下拉列表会覆盖日历 2. vue无法在实现了bootstrap日历功能的input标签上使用v-model进行双向绑定,会出现值消失的情况。建议ref选择标签用value直接获取日期值 3. bootstrap日历插件汉化包不能正常加载,出现乱码,解决办法:将汉化包中的代码复制到Script标签下 ### 2022/4/7 - 市场活动的分页查询与展示,条件查询: 1. 项目视频上有错误,查询市场活动的sql语句中的limit后面应该用${beginNo},${pageSize},而不是#{}.此外limit的起始索引应该为0,而不是1 2. vue中调用钩子函数beforeMount(),在页面渲染之前向服务器发送axios异步请求,注意:此时页面还没有渲染,所以无法获取页面中的标签 3. vue中使用v-for,根据列表动态的显示html标签 ### 2022/4/8 - 翻页功能,全选功能,删除市场活动: 1. 进行翻页操作的时候,注意要把选中的条目和全选重置 2. 从axios返回给Java的json对象中的数组是一个List对象而不是一个数组,在controller中强一下可以直接传入service 3. Mybatis,foreach标签中的collection属性应该填list,表示的是List类型 ### 2022/4/9 - 修市场活动,导出全部市场活动: ### 2022/4/10 - 导入市场活动,市场活动备注的增删查: 1. 文件上传用到MultipartFile类,需要引入相关插件并在MVC配置文件中配置multipartResolver解析器bean 2. 将thy

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值