我有一个非常简单的对象图,我想使用 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.
}
Schema:
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)
);
Mapper:
INSERT INTO node (
name
)
SELECT #{name};
SELECT node_id id,
name
FROM node
WHERE node_id=#{id};
Ibatis/Mybatis 不是一个 ORM,只是一个 DataMapper,并且这种简单性/局限性在这些场景(对象图)中特别表现出来:它(基本上)不了解对象图。
我采取的一种方法是:
I have:
一层轻量级 POJO 对象(“DTO 对象”),每个对象对应一个数据库表(一个对象 数据库表的一条记录),它们只不过是属性(如您的 BatisNode 和 BatisNodeDetail 示例)
一个 DAO 层,每个 DTO 一个服务对象(例如,BatisNodeDAO 和 BatisNodeDetailDAO),并注入数据源,以及标准的 insert/loadById/delete 和 select 方法(iBator可以在这里帮助你)
服务层除了具有典型的服务类(通常是单例)之外,还定义了一些它们处理的重量级对象(“域对象”),这些对象通常对应于 DTO 对象的图(在您的示例中,是一个 BatisNodeWithDetails )。这些域对象知道如何加载/保存包装的 DTO 的图、调用 DAO(以及处理事务、检测“脏”对象等)。请注意,对于不同的服务方法或用例,可以有多个包装相同 DTO(即不同的图)的“域类”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)