`
落花虽有意
  • 浏览: 185613 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

appfuse2 根据表生成自己想生成的pojo

阅读更多

我这里说的生成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了. 

 

 

1
0
分享到:
评论
2 楼 落花虽有意 2009-08-23  
teamojiao 写道
用这个能生产的基于annotation的pojo吗?  就是没有*.hbm文件的那种比如:

@Table(name="USER")
public class User{

}


这个是能的,至少我用的 2.0.2是支持的,1.x的就不知道了,
具体方法如下:
1.1 先写好带有注解的pojo,,放在 model包中
1.2 在资源文件夹中修改 hibernate.cfg.xml ,增加前面的model类映射到该文件,
如:<mapping class="com.mycompany.app.model.User"/>
    在 src/META-INF/persistence.xml 下加入实体映射,
如:<class>com.mycompany.app.model.User</class>
1.3 在该项目根目录下运行命令:mvn test-compile hibernate3:hbm2ddl

在通过其他命令生成 service  和 dao。

如果是通过数据库表生成 pojo 的话,生成出来就是 基于 annotation的,不会产生 .hbml.xml 文件。

1 楼 teamojiao 2009-08-20  
用这个能生产的基于annotation的pojo吗?  就是没有*.hbm文件的那种比如:

@Table(name="USER")
public class User{

}

相关推荐

    Appfuse开发教程

    利用Appfuse的Ant构建脚本,我们可以根据POJO类生成数据库表。通过执行特定的任务,XDoclet会解析POJO类的元数据,然后生成对应的Hibernate映射文件,最后创建数据库表。 3. **建立新的DaoTest来对你的DAO运行...

    appfuse先pojo再dll_中山大学新华学院论坛

    在AppFuse这样的快速应用开发框架中,开发者首先创建POJOs,这些类代表了应用的核心数据模型,然后框架会根据这些POJOs自动生成数据库访问代码和其他服务层代码。 接下来,我们探讨DLL。DLL主要用于Windows平台,它...

    AppFuse

    3. **生成POJO与CRUD代码**: - 使用AppFuse提供的脚本或工具,可以自动为数据库表生成相应的Java对象(POJO)以及增删改查(CRUD)操作所需的代码。 - 通过这种方式,开发者可以大大减少重复性的编码工作,更加...

    POJO.rar_pojo_pojo java_swing_swing framework

    在给定的“POJO.rar”压缩包中,我们可以推测它包含了一个基于Java Swing的软件工具,该工具专门用于自动生成POJO类。Swing是Java提供的一种用于创建图形用户界面(GUI)的库,它提供了丰富的组件和可定制性,使...

    Appfuse教程Appfuse开发.pdf

    2. **使用 Ant 根据对象产生数据库表** - 使用 Ant 构建工具自动生成数据库表结构。这一步通常是通过读取 Hibernate 映射文件并生成相应的 SQL 语句来实现的。 3. **建立新的 DaoTest 来对你的 DAO 运行 JUnit ...

    appfuse开发框架(myapp)使用说明文档

    - 输入完成后,XDoclet将通过Hibernate middlegen生成POJO,并进一步生成DAO、Service、Controller(Spring MVC)、JSP页面以及相应的配置文件。 以上步骤提供了关于如何使用AppFuse框架进行开发的基本指南,包括...

    精通Hibernate

    生成的文件由模板自动生成,用户可以根据需要定制这些模板。例如,在`extras/appgen/src/Form_jsp.xdt`文件中,可以看到以下代码片段: ```xml &lt;!-- 生成标题 --&gt; &lt;title&gt;&lt;fmt:message key=...

Global site tag (gtag.js) - Google Analytics