【问题标题】:ibatis domain modellingibatis领域建模
【发布时间】:2010-04-26 13:46:03
【问题描述】:

我正在研究一个项目的域模型。我有一个名为 user 的类,它有一个名为 UserType 的类作为属性之一。我知道当我想选择所有用户时,我会使用连接来选择所有相应的用户类型。如何进行插入?我必须为 userType 编写处理程序吗?或者我可以做类似的事情

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

请帮忙;

我花了一整天的时间试图弄清楚这一点。我正在使用 ibatis 3.0,我是 ibatis 的新手。

【问题讨论】:

    标签: model dns ibatis


    【解决方案1】:

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

    (当然你也可以编写一个getUsertypeId() 方法,它在内部调用getUserType().getId()...但只是停在这里,不要假装也创建一个setUserTypeId(int id),它在内部尝试从Db,等等,等等......这需要麻烦。您将结束重新发明 JPA/Hibernate。)

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

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

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

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

    PS:您可能想了解DDD(以及“实体”、“值对象”、“视图”、“上下文”、“富域对象”与“贫血域对象”eg 等概念)。 Ibatis 为您提供了沿此思路学习和实施的很大灵活性。

    【讨论】:

    猜你喜欢
    • 2011-04-19
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 2014-07-12
    • 2019-07-19
    • 1970-01-01
    • 2019-01-05
    • 2010-12-20
    相关资源
    最近更新 更多