目录

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

总共需要创建五个JAVA文件,其中包括主子表实体类、主子表Mapper接口、控制器。

创建主表实体类

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

代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
/**
 * 主表实体类
 * @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。

代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
/**
 * 子表实体类
 * @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)类。

代码如下:

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

}

创建子表Mapper接口

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

代码如下:

1
2
3
4
5
6
7
8
9
/**
 * 子表Mapper接口
 * @author VVulpes
 * @CreateDate 2023-12-28
 */
@Mapper
public interface Order extends BaseMapper<Order> {

}

创建控制器类

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

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

具体代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * 用户订单数据存储接口
 * @author VVulpes
 * @CreateDate 2023-12-28
 */
@RestController
public class UserOrderController {
    // 向接口类中注入字段,否则为空
    @Autowired
    private UserMapper userMapper;

    @Autowired
    private 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数据

格式如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
{
"user_name":"用户06",
"user_id":7899,
"orders":[
    {
        "order_id":6,
        "order_time":"2023-01-03 11:35:56",
        "order_val":46,
        "user_id":""
    }
]
}
警告
本文最后更新于 January 8, 2024,文中内容可能已过时,请谨慎使用。若内容或图片失效,请留言反馈。部分素材来自网络,如不慎触及您的利益,请联系删除。