java灵活使用mysql中json类型字段存储数据详解

 更新时间:2024年09月19日 08:34:56   作者:科大306晓岩  
在数据库设计中,面对一对多的关系,如订单和商品,可以考虑使用单表存储而非传统的分表方式,这篇文章主要介绍了java灵活使用mysql中json类型字段存储数据的相关资料,需要的朋友可以参考下

日常数据库存储数据时经常会碰见一对多的数据结构类型,例如一笔订单中包含多个商品数据,一般情况下,可能会设计一个order表,一个sku表,但如果就想用一个表去存储这些订单和商品数据,那么应该如何去设计order表呢?这种情况下就可以使用万能json类型字段进行存储订单与商品一对多的数据结构了.

建表语句:

CREATE TABLE `bd_order` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `orderId` varchar(55) DEFAULT NULL COMMENT '订单id',
  `nick` varchar(55) DEFAULT NULL COMMENT '用户昵称',
  `skuInfo` json DEFAULT NULL COMMENT '商品信息',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='订单表';

数据如下:

存入数据:

商品实体类:

@Data
public class SkuInfo {
    
    private String name;
    private String price;
    private String skuId;

}

订单实体类:

@Data
public class BdOrder {
    private Long id;
    private String orderId;
    private String nick;
    @TableField(value = "skuInfo",typeHandler = FastjsonTypeHandler.class)
    private Object skuInfo;

}

存入数据库: 直接构造数据结构,插入数据库即可

List<SkuInfo> list = new ArrayList<>();
SkuInfo skuInfo = new SkuInfo();
skuInfo.setName("华为mate70");
skuInfo.setPrice("6000.00");
skuInfo.setSkuId("12345678");
list.add(skuInfo);

BdOrder bdOrder = new BdOrder();
bdOrder.setOrderId("111");
bdOrder.setNick("张三");
bdOrder.setSkuInfo(list);
//执行插入sql

从数据库查询数据:  需要通过json去解析转为list

//查询bd_order表得到如下数据
BdOrder bdOrder = 查询的数据
JSONArray jsonArray = JSONUtil.parseArray(bdOrder.getSkuInfo);
List<SkuInfo> skuInfoList = jsonArray.toList(SkuInfo.class);
//这样就得到了skuInfoList ,也是订单对应的多个商品数据

 上述使用的json工具类是hutool工具,如果想使用可以在pom引入依赖:

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.7.3</version>
</dependency>

以上就是mysql的json类型存储数据的插入和查询。

到此这篇关于java灵活使用mysql中json类型字段存储数据的文章就介绍到这了,更多相关java mysql中json字段存储数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java实现哈希表的基本功能

    Java实现哈希表的基本功能

    今天教大家怎么用Java实现哈希表的基本功能,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-05-05
  • java反射机制最详解

    java反射机制最详解

    这篇文章主要介绍了Java 反射机制原理与用法,结合实例形式详细分析了Java反射机制的相关概念、原理、基本使用方法及操作注意事项,需要的朋友可以参考下
    2021-08-08
  • Springboot集成JAXB返回xml格式

    Springboot集成JAXB返回xml格式

    这篇文章主要为大家详细介绍了Springboot如何集成JAXB返回xml格式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-12-12
  • SpringBoot3集成Quartz的示例代码

    SpringBoot3集成Quartz的示例代码

    Quartz由Java编写的功能丰富的开源作业调度框架,可以集成到几乎任何Java应用程序中,并且能够创建多个作业调度,在实际的业务中,有很多场景依赖定时任务,比如常见的:订单超时处理,业务识别和预警通知等,本文介绍了SpringBoot3如何集成Quartz
    2023-08-08
  • SpringBoot实现物品点赞功能

    SpringBoot实现物品点赞功能

    这篇文章主要介绍了SpringBoot物品点赞功能实现,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Java中Comparator升序降序的具体使用

    Java中Comparator升序降序的具体使用

    本文主要介绍了Java中Comparator升序降序的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Springboot+Redis实现API接口防刷限流的项目实践

    Springboot+Redis实现API接口防刷限流的项目实践

    本文主要介绍了Springboot+Redis实现API接口防刷限流的项目实践,通过限流可以让系统维持在一个相对稳定的状态,为更多的客户提供服务,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • 解决idea找不到setting.xml文件的问题

    解决idea找不到setting.xml文件的问题

    这篇文章主要介绍了解决idea找不到setting.xml文件的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Java静态代理和动态代理详解

    Java静态代理和动态代理详解

    这篇文章主要介绍了Java静态代理和动态代理,本文通过代码示例给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-11-11
  • Mybatis设置sql打印日志的多种方法

    Mybatis设置sql打印日志的多种方法

    这篇文章主要介绍了Mybatis设置sql打印日志,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08

最新评论