[Java] Mybatis向Mysql插入主副表JSON数据


👉原文阅读


目录

    • 👉[原文阅读](https://b1ankc-mov.github.io/posts/mybatisplusmysql/)
  • 📘正文开始
    • 创建主表实体类
    • 创建子表实体类
    • 创建主表Mapper接口
    • 创建子表Mapper接口
    • 创建控制器类
    • 演示JSON数据


📘正文开始

创建主表实体类

首先创建一个entity包下的主表实体类,这里命名为User。

代码如下:

/*** 主表实体类* @author VVulpes* @CreateDate 2023-12-28*/
@Data
// Mybatis规定了如果类名与表名一致,会自动找寻对应的数据表,如果不一致,需要加一个注解告诉它对应的表格名称
@TableName("t_user")
public class User {// 这个注解告诉了Mybatis字段id为主键,且自增,使得代码中能拿到主键的值@TableId(type = IdType.AUTO)private Integer id;private String username;// 该字段为与子表相连的外键,需要注意的是,使用Mybatis写SQL语句时,类中的属性名一定要和表中的字段名相同,如果不同,可以使用@TableField("字段名")进行注解private Integer user_id;// 为子表数据创建虚拟字段,这里用来存放JSON格式数据中传入的子表内容,后面再通过控制器一一插入子表字段@TableField(exist = false)private List<Order> orders;}

创建子表实体类

类似地,在entity包下创建子表实体类Order。

代码如下:

/*** 子表实体类* @author VVulpes* @CreateDate 2023-12-28*/
@Data
@TableName("t_order")
public class Order {@TableId(type = IdType.AUTO)private Integer id;private Long order_id;private String order_time;private Float order_val;private Integer user_id;}

创建主表Mapper接口

接下来,在mapper包下为主表创建一个接口(interfac)类。

代码如下:

/*** 主表Mapper接口* @author VVulpes* @CreateDate 2023-12-28*/
@Mapper
// 由于Mybatis内置了很多的语句,已经帮我们写好了增删改查等操作,我们这里不需要写任何方法,只需要继承Mybatis的BaseMapper,接着在控制器中调用方法即可
public interface User extends BaseMapper<User> {}

创建子表Mapper接口

类似地,在mapper包下创建子表Mapper接口。

代码如下:

/*** 子表Mapper接口* @author VVulpes* @CreateDate 2023-12-28*/
@Mapper
public interface Order extends BaseMapper<Order> {}

创建控制器类

接下来就到了重头戏和主要实现部分——控制器

首先在controller包下创建一个控制器类,这里命名为UserOrderController。

具体代码如下:

/*** 用户订单数据存储接口* @author VVulpes* @CreateDate 2023-12-28*/
@RestController
public class UserOrderController {// 向接口类中注入字段,否则为空@Autowiredprivate UserMapper userMapper;@Autowiredprivate OrderMapper orderMapper;// 由于传入数据为JSON格式,需要加一个@RequestBody注解@PostMapping("/insertuserorder")public String save(@RequestBody User user){// 插入数据,i代表着插入的数据条数int i= userMapper.insert(user);List<Order> orders = User.getOrders();if(orders != null){for(Order order : orders){order.setUser_id(User.getUser_id());orderMapper.insert(order);}}if(i>0){return "插入成功";}else {return "插入失败";}}}

演示JSON数据

格式如下:

{
"user_name":"用户06",
"user_id":7899,
"orders":[{"order_id":6,"order_time":"2023-01-03 11:35:56","order_val":46,"user_id":""}
]
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/24535.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis7.0.x与mysql8.0.x离线docker镜像制作

目录 概述实践离线资源redismysql 概述 redis与mysql离线镜像安装包制作。如有疑问&#xff0c;详细请参考 docker镜像的导入导出 实践 离线资源 如果懒得弄&#xff0c;直接从此下载&#xff0c;redis链接&#xff0c;mysql链接 redis 先找一台装有 docker 的上网机器。 …

[职场] 美术学就业方向和前景 #经验分享#学习方法

美术学就业方向和前景 2011年国务院学位委员会、教育部颁布了新的《学位授予和人才培养学科目录》&#xff0c;艺术学首次从文学门类中独立出来&#xff0c;成为新的第13个学科门类&#xff0c;即艺术学门类。其中&#xff0c;美术学又是艺术学门类下的五个一级学科之一。但是…

亿发软件:信息化与数字化,相互交织的科技双引擎

在现代科技发展的浪潮中&#xff0c;信息化和数字化是两个频繁被提及的关键词。尽管它们在很多情况下被视为同义词&#xff0c;但其实两者有着本质的区别和相互影响的关系。究竟是信息化推动了数字化&#xff0c;还是数字化引领了信息化的进程&#xff1f;本文将深入探讨信息化…

代码随想录刷题笔记-数组篇

文章目录 代码随想录刷题笔记-数组篇27 移除元素力扣地址题目描述题目实例解题思路代码实现 26. 删除有序数组中的重复项力扣地址题目描述题目示例解题思路代码实现 283. 移动零力扣地址题目描述题目实例解题思路代码实现 代码随想录刷题笔记-数组篇 27 移除元素 力扣地址 h…

数字驱动:企业发展的火箭助推器!

​ 在这个数字经济时代&#xff0c;数据就像火箭燃料&#xff0c;而数字驱动则是那强大的火箭助推器&#xff01;它正以惊人的力量助力企业飞速发展&#xff01; 数字驱动&#xff0c;助力企业发展的超强引擎&#xff01; 用数据说话&#xff0c;决策不再盲目&#xff01; 以数…

Vue CLI 环境变量使用指南

一、简介 Vue CLI 是一个强大的前端工程化工具&#xff0c;它提供了丰富的配置选项&#xff0c;包括环境变量的管理。环境变量允许开发者根据不同的运行环境&#xff08;如开发、测试和生产&#xff09;应用不同的配置&#xff0c;而无需更改代码。本文将详细介绍如何在 Vue C…

redis 03 RDB AOF

1.数据库状态 2.为什么会出现RDB 3.什么是RDB 5.1 5.2 6 6.1 6.2 6.2.1 6.2.2 6.2.3 7 8. 8.1 9 9.1 9.2 9.3 9.4 9.5

心链12-----队伍页业务完善+匹配算法实现随机匹配(最短距离算法)

心链 — 伙伴匹配系统 搜索队伍 我们选择vant组件库里的基础搜索框&#xff0c;复制到TeamPage页面&#xff0c;同时还有查询为空时&#xff0c;显示的无结果页面&#xff08;用户页面以写过&#xff09; 因为&#xff0c;我们一次性挂载本质性也是搜索队伍&#xff0c;所以…

@Validated 前端表单数据校验

1. 整合 1.1 依赖引入 <dependency><groupId>org.hibernate.validator</groupId><artifactId>hibernate-validator</artifactId></dependency>1.2 控制层 /*** 新增胎架计划** param subsectionPlanVo* return*/PostMapping("/sched…

数据结构复习指导之外部排序

目录 外部排序 复习提示 1.外部排序的基本概念 2.外部排序的方法 2.1对大文件排序时使用的排序算法&#xff08;2016&#xff09; 3.多路平衡归并与败者树 4.置换-选择排序&#xff08;生成初始归并段&#xff09; 4.1置换-选择排序生成初始归并段的实例(2023) 5.最佳…

【经验】Ubuntu上离线安装VsCode插件浏览Linux kernel源码

1、下载VsCode离线安装包 1.1 下载 下载地址:https://marketplace.visualstudio.com/vscode 本人安装的插件: C/C++ checkpatch Chinese clangd kconfig Makefile Tools Perl Perl Toolbox注意:C/C++插件要安装Linux 64版本 1.2 安装 将离线安装包拷贝到Ubuntu中,执…

SpringCloud整合OpenFeign实现微服务间的通信

1. 前言 1.1 为什么要使用OpenFeign&#xff1f; 虽说RestTemplate 对HTTP封装后, 已经⽐直接使⽤HTTPClient简单⽅便很多, 但是还存在⼀些问题. 需要拼接URL, 灵活性⾼, 但是封装臃肿, URL复杂时, 容易出错. 代码可读性差, ⻛格不统⼀。 1.2 介绍一下微服务之间的通信方式 微…

使用 stress 命令进行Linux CPU 压力测试

大家好&#xff0c;在现代计算机系统中&#xff0c;对系统性能和稳定性的评估是至关重要的。特别是在服务器环境中&#xff0c;我们需要确保系统能够在高负载情况下稳定运行&#xff0c;以满足用户的需求。而 CPU 是系统中最关键的组件之一&#xff0c;其性能直接影响着整个系统…

Python 快速查找并替换Excel中的数据

Excel中的查找替换是一个非常实用的功能&#xff0c;能够帮助用户快速完成大量数据的整理和处理工作&#xff0c;避免手动逐一修改数据的麻烦&#xff0c;提高工作效率。要使用Python实现这一功能&#xff0c; 我们可以借助Spire.XLS for Python 库&#xff0c;具体操作如下&am…

GAN网络理论和实验(二)

文章目录 一、说明二、什么是生成对抗网络&#xff1f;三、判别模型与生成模型四、生成对抗网络的架构五、你的第一个 GAN六、准备训练数据七、实现鉴别器八、实现生成器九、训练模型十、检查 GAN 生成的样本十一、使用 GAN 生成手写数字十二、准备训练数据十三、实现鉴别器和生…

笔记-2024视频会议软件技术选型方案

一、背景 视频会议系统是一种现代化的办公系统&#xff0c;它可以使不同会场的实时现场场景和语音互连起来&#xff0c;同时向与会者提供分享听觉和视觉的空间&#xff0c;使各与会方有“面对面”交谈的感觉。随着社会的发展&#xff0c;视频会议的应用越来越广泛&#xff0c;…

BC6 小飞机

BC6 小飞机 废话不多说先上题目&#xff1a; 代码如下&#xff1a; #include<stdio.h> int main() {printf(" ## \n############\n############\n # # \n # # \n");return 0; }这是用一个printf打印我们还可以用多个printf发打印代码如下…

Django框架中级

Django框架中级 – 潘登同学的WEB框架 文章目录 Django框架中级 -- 潘登同学的WEB框架 中间件自定义中间件常用中间件process_view() 使用中间件进行URL过滤 Django生命周期生命周期分析 Django日志日志配置filter过滤器自定义filter 日志格式化formatter Django信号内置信号定…

Ansible——setup模块

目录 主要用途 参数总结 语法示例 1. 收集所有主机的信息 2. 过滤特定信息 3. 列出所有内存信息 4. 收集特定变量的信息 5. 使用 gather_subset Playbook示例 基本语法 使用示例 1. 基本使用 2. 使用 gather_subset 参数 3. 使用 filter 参数 4. 使用 register 捕…

笔记:Mysql的安全策略

1&#xff0c;安装安全插件 1.检查是否已安装该插件 SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME validate_password;2.安装插件 INSTALL PLUGIN validate_password SONAME validate_password.so;3.修改配置文件 vi /etc/my.cn…