java灵活使用mysql中json类型字段存储数据详解
作者:科大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字段存储数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!