【Jsp精品源码栏目提醒】:网学会员--在 Jsp精品源码编辑为广大网友搜集整理了:自定义myeclipse逆向工程模板的代码自动生成规则 - 其它资料绩等信息,祝愿广大网友取得需要的信息,参考学习。
在项目中,往往会用到 myeclipse 的自动生成代码功能,比如本人项目用其从数据库表生成对应的实体类和映射文件,但是,由于数据库表字段名称很不规范,无业务含义很难认,用myeclipse 默认的规则生成得到的实体属性名是驼峰命名, 很难由此推断出对应的数据库表字段名,故项目制定统一规范, 实体类属性名为表字段名小写。
需要修改默认的代码生成规则。
网上找了不少资料以及文档,方法总结如下:方法一:修改 myeclipse 中自动生成代码的模板文件在 myeclipse 目录中搜索关键字templates,可以找到一个如 myeclipse_templates_6.0.1GA.zip的包,解压即可得到自动生成代码用到的所有模板文件,如需修改其中几个模板文件,则按原目录结构只留下修改的模板文件。
在 Hibernate Reverse-Engineering 的对话框中,钩选 Usecustom templates,输入你存放修改后模板文件的文件夹(custom_myeclipse_templates)路径,就可以使用到自定义的模板了。
具体看参考该包的说明文档。
方法二:集成并自定义反转策略类自定义一个类,继承自 org.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy,覆盖其中生成代码的方法。
具体参考方法一中那个包的说明文档。
我把其中一个例子贴出来如下,在自动生成的所有实体属性名前加ME_前缀下:5.6 sing a custom reverse engineering strategy Add the MyEclipse Persistence Tools library to your project.Right click your project and select Properties. On the Java Build Path page choose Add Library... on the Libraries tab. Choose MyEclipse Libraries and then MyEclipse Persistence Tools. Press Finish. Figure 16. Adding the MyEclipse Persistence Tools library Create a new class in your project which extends theorg.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy class. Define the single argument constructor and override a method of interest for examplecolumnToPropertyName.Heres an example which prefixes all generated propertes with ME_MyStrategy.javapackagecom.genuitec.hibernate importorg.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy importorg.hibernate.cfg.reveng.ReverseEngineeringStrategy importorg.hibernate.cfg.reveng.TableIdentifier public classMyStrategy extendsDelegatingReverseEngineeringStrategy publicMyStrategyReverseEngineeringStrategystrategy superstrategy publicString columnToPropertyNameTableIdentifier table String columnName returnME_ super.columnToPropertyNametable columnName Figure 17. MyStrategy.java Source Code Listing On page 2 of the reverse engineering wizard specify the class you just created Figure 18. Specifying the reverse engineering strategy附资料一:自定义 Struts 的
JSP 模板和 Hibernate 的 DAO 模板这一阵子在 MyEclipse 里做项目,用到了 Struts 和 hibernate 功能,起初,对自动生成赞不绝口,但后来,发现自动生成的代码也有不方便的地方,比如:一 Struts 当 new 一个
JSP,使用 Standard
JSP using Struts 1.2时,生成的页面代码中只包含了 Struts 标签但很多时候, 我们需要在页面中使用到 JSTL 标签, 我们应该把常用的几个 JSTL 标签加到
JSP 页 面中,就像这样: 其次,Struts1.2的 似乎有些问题,它表示的地址是当前页面的地址,而不是应用程序的根目录,因此,这个 base 我们还是得用内嵌的 Java 代码得到,就像这样:String path request.getContextPath String basePath request.getScheme://request.getServerName: request.getServerPortpath/然后在之间加入 base 标签:这样,用起来才比较方便一点但每次都改页面,显然做了很多重复的劳动,我想 MyEclipse在生成这样的页面时,肯定用到了模板那么到底是那个模板呢?我们来搜搜看首先说明一下,我用的不是 MyEclipse 的 All-In-One 安装,所以有两个目录,一个是 Eclipse的解压目录,另一个才是 MyEclipse 的安装目录:MyEclipse 5.5.1 GA 如果用的 All-In-One安装,可能只有一个目录,就是 MyEclipse 5.5.1 GA 这里,我就把这个目录称为安装目录了在安装目录下搜索:Struts-1_2.vtl,可以得到这个文件,打开看看,其头部结构与生成的页面很相似,因此,我们只需要在适当的地方添上自己的代码即可修改前还是要注意备份二 hibernate使用 Hibernate Reverse Engineering 最大的好处就是它可以自动生成 PO 和 DAO 的
源码,以及映射配置文件但是看看 DAO 的代码,才发现里面的数据库操作方法都是实例 方法,用起来还必须先 new 一个 DAO,个人觉得没有这个必要,使用静态方法就可以了,但我不可能给每个 DAO 的每个方法都加一个 static 吧于是, 跟上面一样,改模板首先得分析一下,生成的 DAO 是继承的 BaseHibernateDAO,而 BaseHibernateDAO 是扩展的 IBaseHibernateDAO 接口,在这个接口中,定义了 getSession 方法要把数据库操作方法改成 static,这个 getSession 方法也必须是 static,但是在接口中不能定义是 static 的方法,那么唯一的办法就是不管 IBaseHibernateDAO 接口,在 BaseHibernateDAO 类中自己实现一个静态的 getSession 方法BaseHibernateDAO 有 模 板 文 件 , 但 是 没 有 必 要 改 它 , 因 为 一 个 工 程 只 用 得 到 一 个BaseHibernateDAO 我们要改的模板文件是用于 生成具体 DAO 类的然而在安装目录下用hibernate 关键字搜一搜,并没有发现哪个文件与我们的 DAO 有关,难道 MyEclipse 把生成规则写死 在代码里了吗?我不相信 MyEclipse 的开发人员那么糊涂,于是用 templates 关键字搜索了一下,发现了这个: myeclipse_templates_5.5GA.zip,打开一点,发现里面全部是有关 hibernate 的模板文件,另外有一个 readme 的说 明,关键部分如下:2 Edit the velocity templates you wish to customize. Note: POJO templates are present in thepojo folder DAO template in the dao folder HBM templates in the hbm folder 3 Optional:Though not necessary it is recommended that you delete the velocity templates you do not plan tocustomize. This will prevent future confusion over which templates are being processed byMyEclipse. 4 Invoke the JPA/EJB3/Hibernate Reverse-Engineering wizard and select Usecustom templates. Manually enter or click the browse button to select themyeclipse_templates_5.5GA folder.上面的意思是:把解压之后的文件夹放在一个方便的地方(不需要放在原目录下,那样找起来很不方便) ,修改它,然后删掉其他你没有修改的文件,以免发生可能的冲突,最后,在Hibernate Reverse-Engineering 的对话框中,钩选 Use custom templates,输入你解压后的文件夹(myeclipse_templates_5.5GA)路径,就可以使用到自定义的模板了照这个意思,我修改了 DAO 文件夹下的 daohome.vm 和 facadeif.vm,在其中所有的 public标识后加上了 static(我也不知道哪 些是 hibernatet 真正用到的,反正我不用 EJB 和 JPA)然后照它的意思试 了一把,果然,DAO 方法全变成了 static附资料二:Hibernate Reverse Engineering 向导Java src folder 选中映射文件 POJO 和 DAO 生成后所在的项目和
源码文件夹.Java package 映射文件 POJO 和 DAO 生成后所在的包.Hibernate mapping file 从选中的表格生成映射文件.Update hibernate configuration 将生成后的映射文件添加到 Hibernate 配置文件中.Java Data Object 为映射文件和表格生成对应的数据对象 POJO.Create abstract class 为每个数据对象生成一个抽象的父类. 这个抽象类将在以后的重新生成过程中覆盖掉 但是对应的子类将不会被覆盖掉.Base persistence class 如果需要的话 输入生成的 POJO 所要集成的父类的完整名称.Java Data Access Object 生成便于访问映射后的类和表格的数据访问对象. 用户可以在 BasicSpring 和 JNDI DAO 中选择一种.Generate precise findBy methods 为映射类中的每个属性生成一个 findBy 方法. 例如findByFirstNamenameUse custom templates 覆盖 MyEclipse 的内部 velocity 模版为你自己的版本.参考 使用模版来更好的调节生成的代码 来获取更多信息.Template directory 包含了自定义模版的目录树的根节点.图 14. Hibernate Reverse Engineering 向导 - 第 2 页第 2 页可以使用默认的设置 选择 Next.表 5 - Hibernate Reverse Engineering 向导 - 第 2 页Rev-eng settings file 这个文件包含了反向工程的配置和选项以供以后使用. 点击 Setup... 按钮来选择现有的文件或者创建一个新的文件.如果找不到一个这样的配置文件的话向导将会自动创建此文件.Custom rev-eng strategy 允许你指定一个自定义的反向工程策略类. 这个类允许你用编程的方式来自定义反向工程处理过程的各个方面. 参考 使用自定义反向工程策略 来获取详细信息.Type Mapping 决 定 是 否 在 类 型 映 射 属 性 中 使 用 Java 或 者 Hibernate 类 型 例 如java.lang.String 对应 string. 这个设置只能在向导第 3 页的 Customized Type Mappings 列表中没有指定更多信息时才能使用.ID Generator ID Generator 是 Hibernate 映射文件必须有的内容. 它定义了持久类实例的唯一主键生成器 Jaav 类. 参考 资源 部分里面的 Hibernate 文档链接 里面描述了每个 ID生成器的详细信息.如果留空或者更详细的配置在这个向导的第 3 页没有配置 Hibernate 映射引擎将自动为你选择一个 ID 生成器.Generate basic typed composite IDs 如果数据库表格包含有多个列的主键 将总是使用 映射.如果这个选项启用并且有对应的多个外键 每个主键列将依然会被作为简单的标量 string long 等 而不是引用到一个实体. 将会创建 元素 但是它们将会标记为非可更新和非可插入的字段.如果你禁用这个选项默认推荐用这种方式 将会创建 元素来代替上面的生成内容.Generate version and timestamp tags 如果启用 名为 version 和 timestamp 的列将会在生成的映射文件中作为 和 标记出现.Customized Type Mappings 允许你来指定一个自定义的 JDBC 类型到 Hibernate 类型的转换 使用 Length Scale Precision 和 Nullability 作为精度控制对应原来的 JDBC 类型. 再第 3 页页可以使用默认的设置 选择 Finish 将启动反向工程处理.图 15. Hibernate Reverse Engineering 向导 - 第 3 页表 6 - Hibernate Reverse Engineering 向导 - 第 3 页Class name 对应当前数据库表格的数据对象类的完整名称.ID Generator 想要对当前表所使用的 ID 生成器.JDBC type 对当前列所使用的 JDBC 类型覆盖.Property name 对应当前列所生成的属性名.Hibernate type 对应当前列的 Hibernate 类型.Include referenced / referencing tables 包含反向工程时当前数据库表引用的表格以及其它引用到当前表的数据库表.Generate support for ListedTablefk-UnlistedTable and UnlistedTablefk-ListedTable 生成关联到当前表格的关联表的尚未反向工程过的代码 这些表在当前配置页面尚未被显示.在这个向导完成之后将会进行下面所列的操作: 创建类 AbstractEchoMessage . 这个抽象类提供了所需的 Hibernate 兼容的功能例如public 的读取器和设置器方法 这些方法对应的持久化属性和 ECHO_MESSAGE 数据库表格中的列相对应. 创 建 了 一 个 EchoMessage Java 类 是 AbstractEchoMessage 类 的 一 个 具 体 的 子 类 .EchoMessage 的目的是为了被修改后提供额外的业务和验证逻辑 并且不会被后续的生成代码过程所覆盖. 创建了 EchoMessage.hbm.xml Hibernate 映射描述符. 这个文件指示 Hibernate 如何将EchoMessage Java 类和 ECHO_MESSAGE 数据库表格中的数据相互映射. 在文件 hibernate.cfg.xml 中注册 EchoMessage.hbm.xml 映射描述符. 创建了 Java 类 EchoMessageDAO. 这个类提供了对 EchoMessage 数据对象类的方便的访问和操作. 创建 IBaseHibernateDAO 接口和 BaseHibernateDAO 类. 这些类对基本的 DAO 来说是必 要 的 因 为 它 使 用 了 添 加 Hibernate 功 能 时 候 所 生 成 的 Session 工 厂 类com.genuitec.hibernate.HibernateSessionFactory来获取 Hibernate 会话. 图 15 高亮显示了所生成的类 关键方法和映射文件 以及被添加到 hibernate.cfg.xml 文件中的对生成的映射文件的引用. 图 15. Hibernate 反向工厂向导执行结束后更新过的项目内容5.5 使用模版调整生成更好的代码 e.doc/html/quickstarts/hibernate/myeclipse_templates_5.5GA.zip这个文件到你的电脑的文件系统上. 按照 README.txt 文件中的说明来自定义这个模版. 调用反向工程向导 在第 1 页选择启用 Use custom templates 选项 然后将 Templatedirectory 指向到包含模版树的文件夹 e.5.6 使用自定义反向工程策略 1. 向你的项目中添加 MyEclipse Persistence Tools 类库. 右键点击你的项目然后选择 Properties. 在 Java Build Path 页面 在 Libraries 面板下选择 Add Library.... 选择 MyEclipse Libraries 接着选中 MyEclipse Persistence Tools. 点击 Finish. 图 16. 添加 MyEclipse Persistence Tools 类库 2. 在 你 的 项 目 中 创 建 一 个 新 类 让 这 个 类 继 承 自org.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy 类. 3. 定 义 一 个 单 参 数 的 构 造 器 然 后 覆 盖 其 中 的 感 兴 趣 的 一 个 或 者 多 个 方 法 例 如 columnToPropertyName. 这里是一个例子 将在所有生成的属性前添加一个 ME_ 前缀. MyStrategy.java package com.genuitec.hibernate import org.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy import org.hibernate.cfg.reveng.ReverseEngineeringStrategy import org.hibernate.cfg.reveng.TableIdentifier public class MyStrategy extends DelegatingReverseEngineeringStrategy public MyStrategyReverseEngineeringStrategy strategy super strategy public String columnToPropertyNameTableIdentifier table String columnName return ME_ super.columnToPropertyNametable columnName 图 17. MyStrategy.java 源代码清单 4. 在反向工程向导的第 2 页 选中刚才所创建的类 图 18. 指定反向工程策略5.7 编辑映射文件MyEclipse 包含了定制过的 XML 编辑器来专门用于修改 Hibernate 映射文件 .hbm.xml.当双击映射文件的时候编辑器将会自动打开. 你也可以通过右键点击文件然后选择 OpenWith MyEclipse Hibernate Mapping Editor.功能 超链接浏览到引用到的类和属性. 类名自动完成提示. 属性名自动完成提示. 映射文件元素 属性和值的内容完成提示. 图 19. Hibernate 映射文件编辑器