【问题标题】:Inserting child objects in MyBatis在 MyBatis 中插入子对象
【发布时间】:2011-01-25 00:43:15
【问题描述】:

我有一个非常简单的对象图,我想使用 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. }

架构:

创建表节点( node_id int auto_increment 主键, 名称 varchar(255) ); 创建表 node_detail( node_detail_id int auto_increment 主键, 名称 varchar(255) );

映射器:

插入节点 ( 姓名 ) 选择#{名称}; 选择 node_id id, 姓名 从节点 WHERE node_id=#{id};

【问题讨论】:

    标签: java ibatis mybatis


    【解决方案1】:

    Ibatis/Mybatis 不是 ORM,只是一个 DataMapper,并且在这些场景(对象图)中特别显示了简单性/限制:它(基本上)不了解对象图。

    我采取的一种方法是:

    我有:

    1. 一层轻量级 POJO 对象(“DTO 对象”),每个对应一个数据库表(一个对象 一个 db 表的一个记录),它们只有属性(例如您的 BatisNode 和BatisNodeDetail 示例)

    2. 一个 DAO 层,每个 DTO 的一个服务对象(例如,BatisNodeDAO 和 BatisNodeDetailDAO)注入数据源,以及标准的 insert/loadById/delete 和 select 方法(iBator 可以在这里为您提供帮助)

    3. 1234563在你的例子中,一个 BatisNodeWithDetails)。这些域对象知道如何加载/保存包装 DTO 的图形、调用 DAO(以及处理事务、检测“脏”对象等)。请注意,对于不同的服务方法或用例,可以有多个“域类”包装相同的 DTO(即不同的图)。

    【讨论】:

    • 感谢您的建议。这是我的第一个 batis 项目。这听起来像是两个对象的相当多的工作......我在现实生活中还有更多。在这里休眠会是更好的选择吗?
    • 仅凭这些信息是不可能在 Hibernate 和 iBatis 之间做出决定的。对象的数量在这里并不重要(实际上,如果有很多对象,我的方法会付出更多)。更相关的是在您的服务方法中操作的对象图的复杂性,检测“脏”子对象的需要等。iBatis 比 Hibernate/JPA 更轻/简单/低级,这总是有好处(更容易理解和维护;更少的意外或神秘的错误)和缺点(需要更多的管道代码,更少的功能和功能,难以实现复杂的用例)
    猜你喜欢
    • 2016-01-28
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    相关资源
    最近更新 更多