我工作的一个项目的域模型。 我有了一个名为UserType和性能的一个类的类名为用户。 我知道,当我想选择所有用户,我会用联接拿起所有相应usertypes。 我该怎么办插入? 我必须写USERTYPE处理程序? 或者,我可以这样做
INSERT INTO users(... usertype_id ...) VALUES(... #{usertype.usertype_id}...)
请帮忙;
我花了一整天时间摸不着头脑。 我使用iBATIS 3.0和我是新来ibatis的。
我工作的一个项目的域模型。 我有了一个名为UserType和性能的一个类的类名为用户。 我知道,当我想选择所有用户,我会用联接拿起所有相应usertypes。 我该怎么办插入? 我必须写USERTYPE处理程序? 或者,我可以这样做
INSERT INTO users(... usertype_id ...) VALUES(... #{usertype.usertype_id}...)
请帮忙;
我花了一整天时间摸不着头脑。 我使用iBATIS 3.0和我是新来ibatis的。
ibatis的是不是一个完整的ORM框架,所以它不知道对象的关系。 所以,是的,你必须,如果你想直接与不完全对应于你的表中的记录域对象的工作写类似的INSERT; 即,如果你在ibatis的正在映射用户对象不具有getUsertypeId()
方法(即返回对应于表的列usertype_id的值),而是一个getUserType()
方法。
(当然你也可以写一个getUsertypeId()
在内部调用方法getUserType().getId()
...只是到此为止,不要假装也做出setUserTypeId(int id
)在内部尝试加载UsertypeId从数据库,等等等等......这对故障电话。最终你会重塑JPA /休眠)。
我不认为一个类型处理器是正确的做法,该功能是更倾向于将非平凡的类型,与其说是处理人际关系。
另一个有效的方法是将具有相对低的级别的哑的POJO层,大致为每个表中,与直接映射到您的表列(比方说,一个属性UserDb
与对象userTypeId
属性和无getUserType()
方法,和没有经营业务智能化,在上层或持久性的知识),然后依赖关系,在此基础之上,更丰富的“真实的”的域对象的一个层,其每一个包装的那些“哑”的POJO的(通常很小)曲线图,并具有必要用于调用持久层的情报(例如DAO)加载/保存的曲线图(也许懒惰地)。
这种方法的一个优点是,实际ibatis的映射(在SQL编码)的核心可以用相当自动完成Ibator -它甚至创建一个从数据库架构中的POJO的代码。
对于大量读取其中涉及许多表(报告)的数据,您可以创建其他trviial特设的POJO(直接对应到你选择的列,或许有一些基本的情报显示值 - 有点像“视图模型”) ...甚至包含HashMap。
PS:你可能想了解DDD (和概念,如“实体”,“值对象”,“视图”,“环境”,“富域对象”与“贫血域对象的” 如 )。 ibatis的为您提供了很大的灵活性,以学习和沿着这条线实施。