gpt4 book ai didi

java - 在 MyBatis 中插入子对象

转载 作者:行者123 更新时间:2023-11-30 07:35:01 26 4
gpt4 key购买 nike

我有一个非常简单的对象图,我想使用 MyBatis 将其存储在数据库中。如果我制作一个全新的对象图(一个有两个细节的 BatisNode),我该如何编写代码来确保子对象被创建?以下是详细信息:


public class BatisNode {
protected int id;
protected List details;
protected String name;
//Constructor and getters.
}

public class BatisNodeDetail {
protected int id;
protected BatisNode parent;
protected String name;
//Constructor and getters.
}

架构:

CREATE TABLE node (    node_id int auto_increment primary key,    name varchar(255));CREATE TABLE node_detail(    node_detail_id int auto_increment primary key,    name varchar(255));

映射器:

            INSERT INTO node (  name)SELECT #{name};                SELECT node_id id,nameFROM nodeWHERE node_id=#{id};                        

最佳答案

Ibatis/Mybatis 不是 ORM,只是一个 DataMapper,这种简单性/局限性在这些场景(对象图)中特别表现出来:它(基本上)不知道对象图。

我采用的一种方法是:

我有:

  1. 一层轻量级的 POJO 对象(“DTO 对象”),每个对象对应一个数据库表(一个对象 <-> 一个数据库表的一条记录),它们除了属性(比如你的 BatisNode 和BatisNodeDetail 示例)

  2. 一个 DAO 层,每个 DTO(比如 BatisNodeDAO 和 BatisNodeDetailDAO)的一个服务对象,注入(inject)了数据源,以及标准的插入/loadById/删除和选择方法(iBator 可以在这里帮助你)

  3. 服务层除了具有典型的服务类(通常是单例)之外,还定义了一些重量级对象(“域对象”),它们处理这些对象,并且通常对应于 DTO 对象图 (在你的例子中,一个 BatisNodeWithDetails)。这些域对象知道如何加载/保存包装的 DTO 图、调用 DAO(并处理事务、检测“脏”对象等)。请注意,对于不同的服务方法或用例,可以有多个“领域类”包装同一个 DTO(也就是说,不同的图)。

关于java - 在 MyBatis 中插入子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4788886/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com