Model ibatis域建模

Model ibatis域建模,model,dns,ibatis,Model,Dns,Ibatis,我正在为一个项目开发域模型。我有一个名为user的类,它有一个名为UserType的类作为属性之一。我知道当我想要选择所有用户时,我将使用连接来选择所有相应的用户类型。我该怎么做?我必须为userType编写处理程序吗?或者我能做些类似的事情吗 INSERT INTO users(... usertype_id ...) VALUES(... #{usertype.usertype_id}...) 请帮忙 我花了一整天的时间想弄明白这一点。我正在使用ibatis 3.0,而且我是ibatis新

我正在为一个项目开发域模型。我有一个名为user的类,它有一个名为UserType的类作为属性之一。我知道当我想要选择所有用户时,我将使用连接来选择所有相应的用户类型。我该怎么做?我必须为userType编写处理程序吗?或者我能做些类似的事情吗

INSERT INTO users(... usertype_id ...) VALUES(... #{usertype.usertype_id}...)
请帮忙


我花了一整天的时间想弄明白这一点。我正在使用ibatis 3.0,而且我是ibatis新手。

ibatis不是一个完整的ORM框架,所以它不知道对象之间的关系。 所以是的,如果您想直接处理与表中的记录不完全对应的域对象,您必须编写类似于INSERT的内容;也就是说,如果您在Ibatis中映射的用户对象没有
getUsertypeId()
方法(返回与表列usertype\u id对应的值),而是
getUserType()
方法

(当然,您也可以编写一个
getUsertypeId()
方法,该方法在内部调用
getUserType().getId()
…但只需停在这里,不要假装也创建一个
setUserTypeId(int-id
)它在内部尝试从数据库加载UsertypeId,等等……这会带来麻烦。您将结束重新发明JPA/Hibernate。)

我认为TypeHandler不是正确的方法,该特性更倾向于转换非平凡类型,而不是处理关系

另一种有效的方法是使用一层相对低级的哑POJO,每个表大约一个,其属性直接映射到表列(例如,一个
UserDb
对象,具有
userTypeId
属性,没有
getUserType()
method,无业务智能,依赖上层或持久性知识),然后,在上面是一层更丰富的“真实”域对象,每个对象包装一个(通常很小的)那些“哑”POJO的图,并具有调用持久性层(如DAO)加载/保存图所需的智能(也许是懒洋洋地)

这种方法的一个优点是,实际的ibatis映射(SQL编码)的核心可以相当自动地完成,它甚至可以从DB模式创建POJO的代码

对于涉及多个表(报表)的海量数据读取,您可以创建其他Trvial即席POJO(它直接对应于SELECT的列,并且可能具有一些基本的智能来显示值,比如“ViewModel”),甚至可以创建哈希映射


PS:您可能想了解(以及“实体”、“价值对象”、“视图”、“上下文”、“富域对象”与“贫乏域对象”等概念)。Ibatis为您提供了更多的灵活性,可以按照这一思路进行学习和实施。

一些供通过DDD的人使用的链接和ibator替换链接。