我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SpringBoot中如何处理MySQL中存储的JSON数据?

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SpringBoot中如何处理MySQL中存储的JSON数据?

目录

一、MySQL中如何保存JSON类型的数据

1.1 建表

1.2 保存一条带json的记录

1.3 查询

二、Springboot操作当前数据库表

2.1 方式一(推荐)

2.2 方式二


JSON(JavaScript Object Notation)是一种轻量级的数据交换格式 。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。它易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

一、MySQL中如何保存JSON类型的数据

1.1 建表

CREATE TABLE `steel` (  `id` int unsigned NOT NULL AUTO_INCREMENT,  `steel_grade` json NOT NULL COMMENT '钢种,json数组',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

1.2 保存一条带json的记录

INSERT INTO steel (steel_grade)VALUES ('["Q235", "PWB", "P610L"]');

1.3 查询

SELECT * FROM steel;

 

 当需要检索JSON类型字段中数据的某个具体值时,可以使用“->”和“->>”符号。

SELECT steel_grade -> '$[0]'FROM steel;SELECT steel_grade ->> '$[0]'FROM steel;

其中->>则是反序列化后的结果。

二、Springboot操作当前数据库表

导入依赖这里就不赘述了,然后就是Application.yaml配置文件,这些都是和原来一样的。

我们通过代码生成器,自动生成实体类、controller、service、mapper这些基本结构。

话不多说,我们直接看关键的部分。

2.1 方式一(推荐)

实体类

@Data@TableName("steel")@ApiModel(value = "Steel对象", description = "")public class Steel implements Serializable {    private static final long serialVersionUID = 1L;    @TableId(value = "id",type = IdType.AUTO)    private Integer id;    @ApiModelProperty("钢种,json数组")    @TableField("steel_grade")    private String steelGrade;    }

我们可以用String类型去接收数据库的JSON类型。因为JSON就是以字符串的形式存储的嘛。 

controller

@Api(tags = "钢信息")@RestController@RequestMapping("/steel")public class SteelController {    @Resource    private SteelService steelService;    @ApiOperation("新增一条数据,测试保存json")    @PostMapping("save")    public Result save(String[] steelGrade){        steelService.saveData(steelGrade);        return Result.success();    }    @ApiOperation("查询数据")    @PostMapping("selectOne")    public Result selectSteelById(Integer id){        Steel steel = steelService.selectSteelById(id);        return Result.success(steel);    }}

 service

@Servicepublic class SteelServiceImpl extends ServiceImpl implements SteelService {    @Transactional    @Override    public void saveData(String... steelGrade) {        String jsonString = JSON.toJSONString(steelGrade);        Steel steel = new Steel();        steel.setSteelGrade(jsonString);        baseMapper.insert(steel);    }    @Override    public Steel selectSteelById(Integer id) {        Steel steel = baseMapper.selectById(id);        String steelGrade = steel.getSteelGrade();        List list = JSON.parseArray(steelGrade, String.class);        String str = "";        for (int i = 0; i < list.size(); i++) {            if (i == list.size() -1){                str += list.get(i);            }else {                str += list.get(i) + "、";            }        }        steel.setSteelGrade(str);        return steel;    }}

存数据的时候,我们要将集合转成JSON字符串,进行序列化,这样才方便后面解析。 

查询的时候,我们进行反序列化,由于存的是字符串类型的JSON数组,所有直接反序列化成数组即可。

测试保存

保存成功,数据增加了一条记录,对应的json数据格式正确。

 测试查询

 

查询成功。

值得注意的是,因为我们保存的是json格式的,那么获取的时候也一定要进行反序列化,解析成我们需要的格式即可。

2.2 方式二

使用MybatisPlus提供的字段类型处理器

具体的,实体类上按照如下设置即可。

@Data@Accessors(chain = true)@TableName(autoResultMap = true)public class User {    private Long id;    ...        @TableField(typeHandler = JacksonTypeHandler.class)    // @TableField(typeHandler = FastjsonTypeHandler.class)    private OtherInfo otherInfo;}

注解对应了 XML 中写法为

ok,我们在自己的项目中试验一下。

实体类

@Data@TableName(value = "steel",autoResultMap = true)@ApiModel(value = "Steel对象", description = "")public class Steel implements Serializable {    private static final long serialVersionUID = 1L;    @TableId(value = "id",type = IdType.AUTO)    private Integer id;    @ApiModelProperty("钢种,json数组")    @TableField(value = "steel_grade",typeHandler = FastjsonTypeHandler.class)    private List steelGrade;}

controller

controller不变

service

service层不需要我们自己再转成json,或者解析json了。通过实体类的注解参数就帮我们搞定了。

@Servicepublic class SteelServiceImpl extends ServiceImpl implements SteelService {    @Transactional    @Override    public void saveData(String... steelGrade) {        Steel steel = new Steel();        steel.setSteelGrade(Arrays.asList(steelGrade));        baseMapper.insert(steel);    }    @Override    public Steel selectSteelById(Integer id) {        Steel steel = baseMapper.selectById(id);        List steelGrade = steel.getSteelGrade();        steel.setSteelGrade(steelGrade);        return steel;    }}

测试保存

 测试查询

注意:查询出来的steelGrade集合的元素都带有双引号,说明返回的是JSON字符串格式,也意味着没有进行反序列化操作。我们还需要额外处理。

因此个人而言,我更倾向于方法一。

来源地址:https://blog.csdn.net/YuanFudao/article/details/130729611

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SpringBoot中如何处理MySQL中存储的JSON数据?

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL中使用JSON存储数据的实现示例

目录1.概述:2.使用:3.查询:4.修改5.删除6.排序7.索引8.实现原理:参考资料:1.概述:mysql从5.7版本开始引入了对jsON数据类型的原生支持。这个增强功能使开发人员能够直接在数据库中存储、操作和查询JSON数据。My
2023-09-21

一文详解如何在MySQL中处理JSON数据

目录前言1. mysql中的jsON数据类型2. JSON函数和运算符3. 创建JSON列的表4. 插入JSON数据5. 查询JSON数据6. 复杂查询和聚合7. JSON 数据的索引8. 总结前言在当今的大数据时代,JSON(JavaS
一文详解如何在MySQL中处理JSON数据
2024-08-19

如何使用PHP进行JSON数据的处理?(PHP中如何处理JSON格式的数据?)

PHPJSON处理指南使用PHP处理JSON数据,实现轻松高效的数据交换。解码JSON:使用json_decode()将字符串转换为PHP变量。编码JSON:使用json_encode()将PHP变量转换为字符串。自定义选项:JSON_UNESCAPED_UNICODE:不转义Unicode字符。JSON_NUMERIC_CHECK:将数字字符串转换为数字。错误处理:json_last_error():获取错误代码。json_last_error_msg():获取错误消息。安全注意事项:验证JSON数据以
如何使用PHP进行JSON数据的处理?(PHP中如何处理JSON格式的数据?)
2024-04-02

MariaDB中如何处理JSON数据类型

如何处理MariaDB中的JSON数据类型MariaDB支持JSON数据类型,可用于存储和操作复杂数据结构。本文介绍了如何创建、访问、修改和查询JSON数据,以及最佳实践和内置JSON函数和运算符的使用。通过使用JSON数据类型,可以存储复杂数据、简化查询并增强应用程序灵活性。
MariaDB中如何处理JSON数据类型
2024-04-12

MariaDB中如何处理JSON数据类型

在MariaDB中,JSON数据类型可以用来存储和查询JSON格式的数据。要处理JSON数据类型,可以使用各种函数和操作符来操作JSON数据。以下是一些常用的JSON处理函数和操作符:1、JSON_EXTRACT: 用于从JSON数据中提
MariaDB中如何处理JSON数据类型
2024-04-09

MySQL中如何存储小数?

要在MySQL中存储小数,你需要了解这两个参数。语法如下 -DECIMAL(yourTotalDigit,yourDigitsAfterDecimalPoint);例如 -DECIMAL(4,2),表示总共可以取 4 位数字,小数点后 2
2023-10-22

MongoDB的JSON数据如何存储与查询

MongoDB是一种文档数据库,它以JSON格式存储数据。在MongoDB中,数据以文档的形式存储在集合中。每个文档是一个键值对的集合,类似于JSON对象。存储JSON数据:要存储JSON数据到MongoDB中,首先需要连接到数据库,选
MongoDB的JSON数据如何存储与查询
2024-05-07

如何在Python中处理JSON数据的问题

如何在Python中处理JSON数据的问题,需要具体代码示例引言JSON(JavaScript Object Notation)是一种常用的数据交换格式,广泛应用于各种编程语言和平台之间的数据传输。在Python中,我们可以使用内置的jso
2023-10-22

PHP数据结构:JSON数据处理,理解数据交换与存储的标准

json是用于数据交换和存储的文本数据格式,php 提供了 json_encode() 和 json_decode() 函数来处理 json 数据。这些函数允许您将 php 变量编码为 json 字符串和将 json 字符串解码为 php
PHP数据结构:JSON数据处理,理解数据交换与存储的标准
2024-05-14

编程热搜

目录