此工具可能会引发一些哲理性问题, 因为该工具是更侧重于数据库表,而不是实体类。 我们将采取几个段落来谈论这种做法。
首先,这个工具做什么。我们不是在做任何有关项目应该或不应该是结构化这种说法的。 在一般情况下我们支持富实体类, 但创建一个富实体类和是否应该坚持这种模式完全不是一码事。
如果您特定的设计理念是实体类驱动所有的决策,数据库设计是屈从于实体类, 那么这个工具 - 和MyBatis本身 - 可能不适合您的应用程序。 在这种情况下,我们建议您认真考虑 Hibernate - 他可能更贴近您的应用程序和设计理念。
但并非所有的项目都适合这种模式。很少有真正的企业级应用程序会这么做。 MyBatis对那些将数据库表设计和实体对象设计看做一样的项目有很大的帮助。 MyBatis不是对象关系映射,并且不会尝试去持久化对象。所以他着眼于应用开发人员编写SQL和数据库表进行交互。
在大型或企业级的项目,其中的许多因素是很常见:
从这些主要的指标来看,对您的应用来说 MyBatis 是一个非常不错的候选工具,MyBatis Generator 可以在这类项目起到重要的影响。 那么,在这种情况下应该如何使用MyBatis?
数据访问对象(DAO)模式仍然是一种主要的模式。MyBatis Generator可以生成一组基本的和每个表对应的对象。 生成的代码是和事务无关的。这意味着如果在一个事务中涉及多个表参与,可以很容易的扩展生成的代码。 或者您可以创建另一个DAO(或服务方法),更紧密地匹配实体对象的持久性需求,并可以再一个事务中使用一个或多个生成的对象。
举个例子,考虑一个典型的 Order 对象,典型的标题和细节的问题。 在某些环境中这种对象将保存到至少四个表 - 两个关键表、"标题"表和"详细信息"表 (再次声明,我们不做任何种类的关于这是否"正确"的语句设计,只在陈述一个事实)。 您的应用程序还应与 Order 对象进行交互, 并且可能在某个地方(在OrderDAO 或者在一个Service对象)存在一个saveOrder(Order order)方法 该方法将与所涉及的4个表生成的代码进行交互。
在这种情况下,代码生成器给我们带来什么? 有以下几种: