首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ibatis领域建模

ibatis领域建模
EN

Stack Overflow用户
提问于 2010-04-26 21:46:04
回答 1查看 1.6K关注 0票数 1

我正在处理一个项目的域模型。我有一个名为user的类,其中一个属性是名为UserType的类。我知道当我想要选择所有用户时,我会使用join来选择所有相应的用户类型。我该如何做插入?我必须为userType编写一个处理程序吗?或者我可以做像这样的事情

代码语言:javascript
运行
复制
INSERT INTO users(... usertype_id ...) VALUES(... #{usertype.usertype_id}...)

请帮帮忙;

我花了一整天的时间试图弄清楚这一点。我使用的是ibatis 3.0,我对ibatis还不熟悉。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-04-26 22:37:21

Ibatis不是一个完整的ORM框架,所以它不知道对象之间的关系。因此,是的,如果您希望直接使用与表中的记录不完全对应的域对象,则必须编写类似于INSERT的代码;也就是说,如果您在Ibatis中映射的用户对象没有getUsertypeId()方法(它返回对应于表列usertype_id的值),而是具有getUserType()方法。

(当然,您也可以编写一个内部调用getUserType().getId()getUsertypeId()方法...但就停在这里,不要假装自己也做了一个setUserTypeId(int id),它内部试图从Db加载UsertypeId,等等……这会带来麻烦的。您将结束重新发明JPA/Hibernate。)

我不认为TypeHandler是正确的方法,该功能更多地面向转换非平凡的类型,而不是处理关系。

另一种有效的方法是让一层相对低级的非智能POJO,大约每个表一个,具有直接映射到表列的属性(例如,一个具有userTypeId属性但没有getUserType()方法的UserDb对象,没有业务智能、对上层的依赖或持久性知识),然后,在此之上,有一层更丰富的“真实”域对象,每个域对象包装那些“非智能”POJO的一个(通常很小的)图形,并且具有调用持久层(例如DAO)来加载/保存图形(可能是惰性的)所需的智能。

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

对于涉及许多表(报告)的大量数据读取,您可以创建其他传统的即席POJO(直接对应于您的SELECT列,并且可能具有一些基本的智能来显示值-类似于'ViewModel')……或者甚至是HashMaps。

PS:您可能想要了解DDD (以及诸如“实体”、“值对象”、“视图”、“上下文”、“富领域对象”与“贫血域对象”eg等概念)。Ibatis为您提供了很大的灵活性,让您可以按照这种方式进行学习和实现。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2713912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档