我这里说的生成pojo是指在已经设计好数据表结构后, 通过执行 mvn appfuse:gen-model 命令根据表生成相应的pojo.
开始时我用的是 mysql 数据库, 设计好数据表后通过上面的命令能正确的生成所有我自己创建的表对应的 pojo, 但如果重复执行上面的命令, 系统也会按规按矩的再次重复生成所有的 pojo, 而如果我只是新加了一个表, 也会重复生成以前生成过的 pojo.
当然这还不是问题, 因为最后还是能得到要得到的结果.
后来我把数据库换成 sqlserver 2000, 这次的问题不只是上面的问题, 而且上面的命令会生成部分系统表对象的 pojo, 这显然不是我要的了, 不过这个问题其实也很好解决, 不就是多生成了几个 pojo嘛, 直接在源代码里删了就行了. 当然还是其他更"正规"点的解决办法.
下面就看"正规"点的解决办法:
找到生成项目的 myproject/target/test-classes/hibernate.reveng.xml 文件.
里面的内容大眼一看差不多能懂, 有定义类型映射的, 有按表名过滤表的.
原始文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-reverse-engineering
SYSTEM "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd" >
<hibernate-reverse-engineering>
<type-mapping>
<!-- jdbc-type is name fom java.sql.Types -->
<sql-type jdbc-type="VARCHAR" length='1' hibernate-type="yes_no"/>
<!-- length, scale and precision can be used to specify the mapping precisly -->
<sql-type jdbc-type="NUMERIC" precision='1' hibernate-type="boolean"/>
<!-- the type-mappings are ordered. This mapping will be consulted last,
thus overriden by the previous one if precision=1 for the column -->
<sql-type jdbc-type="BIGINT" hibernate-type="java.lang.Long"/>
<sql-type jdbc-type="INTEGER" hibernate-type="java.lang.Long"/>
<sql-type jdbc-type="NUMERIC" hibernate-type="java.lang.Long"/>
</type-mapping>
<!-- BIN$ is recycle bin tables in Oracle -->
<table-filter match-name="BIN$.*" exclude="true"/>
<!-- Exclude AppFuse tables from all catalogs/schemas -->
<!-- 按表名过滤表 -->
<table-filter match-name="app_user" exclude="true"/>
<table-filter match-name="role" exclude="true"/>
<table-filter match-name="user_role" exclude="true"/>
</hibernate-reverse-engineering>
现在, 如果我要过滤掉 teacher 表 和 系统表, 则可以修改如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-reverse-engineering
SYSTEM "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd" >
<hibernate-reverse-engineering>
<schema-selection match-schema="dbo"/>
<type-mapping>
<!-- jdbc-type is name fom java.sql.Types -->
<sql-type jdbc-type="VARCHAR" length='1' hibernate-type="yes_no"/>
<!-- length, scale and precision can be used to specify the mapping precisly -->
<sql-type jdbc-type="NUMERIC" precision='1' hibernate-type="boolean"/>
<!-- the type-mappings are ordered. This mapping will be consulted last,
thus overriden by the previous one if precision=1 for the column -->
<sql-type jdbc-type="BIGINT" hibernate-type="java.lang.Long"/>
<sql-type jdbc-type="INTEGER" hibernate-type="java.lang.Long"/>
<sql-type jdbc-type="NUMERIC" hibernate-type="java.lang.Long"/>
</type-mapping>
<!-- BIN$ is recycle bin tables in Oracle -->
<table-filter match-name="BIN$.*" exclude="true"/>
<!-- Exclude AppFuse tables from all catalogs/schemas -->
<table-filter match-name="app_user" exclude="true"/>
<table-filter match-name="role" exclude="true"/>
<table-filter match-name="user_role" exclude="true"/>
<table-filter match-name="teacher" exclude="true"/>
<table-filter match-name="dtpro.*" exclude="true"/>
<table-filter match-name="sys.*" exclude="true"/>
</hibernate-reverse-engineering>
这样, 再次运行 mvn appfuse:gen-model 命令时就会过滤掉 teacher表, 以及以 dtpro 和 sys 开头的表.
还需要注意的是通配符写法.
这样就能生成自己想生成的 pojo了.
分享到:
相关推荐
利用Appfuse的Ant构建脚本,我们可以根据POJO类生成数据库表。通过执行特定的任务,XDoclet会解析POJO类的元数据,然后生成对应的Hibernate映射文件,最后创建数据库表。 3. **建立新的DaoTest来对你的DAO运行...
在AppFuse这样的快速应用开发框架中,开发者首先创建POJOs,这些类代表了应用的核心数据模型,然后框架会根据这些POJOs自动生成数据库访问代码和其他服务层代码。 接下来,我们探讨DLL。DLL主要用于Windows平台,它...
3. **生成POJO与CRUD代码**: - 使用AppFuse提供的脚本或工具,可以自动为数据库表生成相应的Java对象(POJO)以及增删改查(CRUD)操作所需的代码。 - 通过这种方式,开发者可以大大减少重复性的编码工作,更加...
在给定的“POJO.rar”压缩包中,我们可以推测它包含了一个基于Java Swing的软件工具,该工具专门用于自动生成POJO类。Swing是Java提供的一种用于创建图形用户界面(GUI)的库,它提供了丰富的组件和可定制性,使...
2. **使用 Ant 根据对象产生数据库表** - 使用 Ant 构建工具自动生成数据库表结构。这一步通常是通过读取 Hibernate 映射文件并生成相应的 SQL 语句来实现的。 3. **建立新的 DaoTest 来对你的 DAO 运行 JUnit ...
- 输入完成后,XDoclet将通过Hibernate middlegen生成POJO,并进一步生成DAO、Service、Controller(Spring MVC)、JSP页面以及相应的配置文件。 以上步骤提供了关于如何使用AppFuse框架进行开发的基本指南,包括...
生成的文件由模板自动生成,用户可以根据需要定制这些模板。例如,在`extras/appgen/src/Form_jsp.xdt`文件中,可以看到以下代码片段: ```xml <!-- 生成标题 --> <title><fmt:message key=...