`

给hibernateTools写个插件

阅读更多

CowNew开源团队网站 http://www.cownew.com
作者 杨中科 是CowNew开源团队发起人之一,邮箱about521  at 163 dot com
论坛 http://www.cownew.com/newpeng/
转载请注明此版权信息


   最近准备把进销存项目激活,这样一方面可以让更多的人有机会参与到开源开发中来,另一方面也把SQL翻译器、SQL优化器、JDBMonitor应用到这个项目中,这样这三个基础模块就可以在实际项目应用中得到验证和增强。
    我准备用hibernate实现持久层,于是到hibernate的网站上把hibernate3下载下来,看了看有个hibernatetools,是个hibernate在eclipse下的辅助工具,也down了下来,用了用感觉不错。可以直接从数据库表生成POJO和hbm.xml(其实我不是很喜欢这种开发方式,我更喜欢我用建模工具来写POJO,然后用工具生成hbm.xml和DDL,不过好像hibernate3现在还没有这种工具,如果哪位朋友知道有这种工具,希望赐教)。
美中不足的是它生成的javabean的字段名是完全和数据库字段名一致、生成的javabean的类名是完全和数据库表名一致。出于清晰以及可移植的考虑(也是公司的开发规范养成的习惯),我设计的表名全部以"T_"开头,中间再加上子系统名,最后才是表意的表名,比如用“T_PS_BOM”表示生产管理系统中的物料清单表;字段名全部以“F”开头,比如FId,FName。
这样就导致生成了如下的javabean:

public class TPSBOM
{
   .......
   public String getFID()
   ...
   public String getFNumber()
}


    看起来很不直观。我刚刚想放弃这个工具,想了想,“拿来就用,不好用就换”可不是做开源人该有的精神呀。钻研一下。
看看了Hibernate Code Generation页签中有一个“reveng Strategy”,什么意思?“反向工程策略”??好像有门儿,点击“Browse”弹出一个类选择对话框,竟然看到了它默认显示的“DefaultReverseEngineeringStrategy”类了,我在hibernatetools的安装目录找来找去,终于在plugins\org.hibernate.eclipse_3.2.0.beta6\lib\tools下的hibernate-tools.jar中找到了这个类的影子,用反编译工具反编译一下(懒得去网上下源码了,呵呵)。一个个方法名展现在我面前:
tableToClassName
columnToPropertyName
columnToHibernateTypeName
。。。
    这不就是在把数据库相应的项映射成java相应的项吗?
    开工!
    新建一个类CowNewReverseEngineeringStrategy,继承自DefaultReverseEngineeringStrategy,override  tableToClassName、
columnToPropertyName这两个方法,在这两个方法中写入自己的转换逻辑。
然后打包成jar包,放到plugins\org.hibernate.eclipse_3.2.0.beta6\lib\tools下,然后在plugins\org.hibernate.eclipse_3.2.0.beta6\lib\tools\MANIFEST.MF中把这个新增包的内容加上,关闭eclipse,加个-clean参数启动eclipse,然后点击“Hibernate Code Generation”,把“reveng Strategy”填成“com.cownew.DevTools.hibtools.RevEng.CowNewReverseEngineeringStrategy”,“Run”!!!
晕倒,竟然报错“com.cownew.DevTools.hibtools.RevEng.CowNewReverseEngineeringStrategy
Exception while generating code
Reason   org.hibernate.console.HibernateConsoleRunTimeException:Could not create or find com.   with one argument deleate constructor”

看来是反射调用的时候出了问题,重新打开hibernate-tools.jar,仔细观察,竟然发现了一个DelegatingReverseEngineeringStrategy,它多    了一个参数为“ReverseEngineeringStrategy delegate”的构造函数,而其他调用都是转发给ReverseEngineeringStrategy了,晕倒,搞不懂它在做什么,也没时间研究了,给CowNewReverseEngineeringStrategy也曾街一个参数为“ReverseEngineeringStrategy delegate”的构造函数,重新打包,重新启动eclipse,哈哈,一切搞定,终于生成我可爱的,
public class PersonInfo

  public String getNumber()。。。
  public String getId()。。。

了。
    附全部代码:

 

package com.cownew.DevTools.hibtools.RevEng;

import java.beans.Introspector;

import org.hibernate.cfg.reveng.DefaultReverseEngineeringStrategy;
import org.hibernate.cfg.reveng.ReverseEngineeringSettings;
import org.hibernate.cfg.reveng.ReverseEngineeringStrategy;
import org.hibernate.cfg.reveng.ReverseEngineeringStrategyUtil;
import org.hibernate.cfg.reveng.TableIdentifier;
import org.hibernate.util.StringHelper;

public class CowNewReverseEngineeringStrategy extends
  DefaultReverseEngineeringStrategy {

 public CowNewReverseEngineeringStrategy(ReverseEngineeringStrategy delegate) {
  super();
 }

 private ReverseEngineeringSettings settings = new ReverseEngineeringSettings();

 public String tableToClassName(TableIdentifier table) {
  String tableName = table.getName();
  if (tableName != null && tableName.toUpperCase().startsWith("T_")) {
   String pkgName = settings.getDefaultPackageName();
   int lastIndex = tableName.lastIndexOf('_');
   tableName = tableName.substring(lastIndex + 1, tableName.length())
     + "Info";

   String className = toUpperCamelCase(tableName);

   if (pkgName.length() > 0)
    return StringHelper.qualify(pkgName, className);
   return className;

  } else {
   return super.tableToClassName(table);
  }
 };

 public String columnToPropertyName(TableIdentifier table, String column) {
  if (column != null && column.toUpperCase().startsWith("F")) {
   String cownewColName = column.substring(1, column.length());

   String decapitalize = Introspector
     .decapitalize(toUpperCamelCase(cownewColName));
   return keywordCheck(decapitalize);
  } else {
   return super.columnToPropertyName(table, column);
  }
 }

 private String keywordCheck(String possibleKeyword) {
  if (ReverseEngineeringStrategyUtil
    .isReservedJavaKeyword(possibleKeyword))
   possibleKeyword += "_";
  return possibleKeyword;
 }

 public void setSettings(ReverseEngineeringSettings settings) {
  super.setSettings(settings);
  this.settings = settings;
 }

 public static void main(String[] args) {
  TableIdentifier table = new TableIdentifier("T_BD_Person");
  // TableIdentifier table = new TableIdentifier("T_Person");
  // TableIdentifier table = new TableIdentifier("Person");
  CowNewReverseEngineeringStrategy revEng = new CowNewReverseEngineeringStrategy(
    null);
  String className = revEng.tableToClassName(table);
  System.out.println(className);
  System.out.println(revEng.columnToPropertyName(table, "FId"));
  System.out.println(revEng.columnToPropertyName(table, "Id"));
 }
}

分享到:
评论

相关推荐

    HibernateTools-3.2.4

    在HibernateTools 3.2.4版本中,它包含了一系列的特性与插件,以支持更便捷地进行对象关系映射(ORM)管理和数据库交互。 一、Hibernate Tools的主要功能: 1. **逆向工程(Reverse Engineering)**:能够从现有的...

    hibernate tools插件安装

    【hibernate tools插件安装】是关于Java开发中的一款实用工具,主要目的是为了提高开发效率,特别是针对使用Hibernate框架的项目。Hibernate Tools是Hibernate官方提供的一个扩展,它集成了Eclipse、IntelliJ IDEA等...

    Eclipse离线安装 Hibernate Tools和Maven插件打包文件,实现快速安装和配置

    这两个工具在Java开发中扮演着重要角色:Hibernate Tools帮助开发者管理数据库和ORM(对象关系映射)操作,而Maven则是一个项目管理和综合工具,负责构建、依赖管理和项目信息管理。 离线安装Eclipse插件是一种方便...

    Eclipse 在线配置 Hibernate Tools

    3. 你会看到一个名为 "Hibernate Tools" 的插件,它是 JBoss 开发的。选择 "Install" 来开始安装过程。 4. 选择你需要的组件,通常是 "Hibernate Tools",然后按照向导的提示逐步完成安装。 5. 安装完成后,Eclipse ...

    hibernate tools源码运行或修改需要的jar

    Hibernate Tools 是一个强大的开发工具,它为Hibernate ORM框架提供了丰富的集成开发环境支持,包括逆向工程(从数据库生成实体类)、代码生成、JPA支持以及HQL和SQL查询的调试等。要运行或修改Hibernate Tools的...

    eclipse 下的hibernate tools

    3. **Hibernate Tools安装**:在Eclipse中,可以通过“Help” > “Eclipse Marketplace”或“Install New Software”菜单项来搜索并安装Hibernate Tools插件。 4. **模型类生成**:Hibernate Tools可以根据现有...

    Hibernate Tools使用指南

    **Hibernate Tools使用指南** 在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。为了提升开发效率,Hibernate提供了一系列的工具,即Hibernate Tools,帮助开发者进行逆向...

    hibernatetools-3.1.0.beta5

    这个版本,即hibernatetools-3.1.0.beta5,包含了对早期版本的改进和新功能,旨在提升开发者的生产力。 1. **Eclipse集成**: Hibernate Tools 3.1.0.beta5作为Eclipse的一个插件,无缝融入了Eclipse的开发环境,...

    HibernateTools-3.2.4.Beta1-R200810311334.zip

    HibernateTools是Java开发者的重要辅助工具,它为Hibernate框架提供了一系列实用的集成开发环境(IDE)插件和命令行工具,极大地简化了数据操作和对象关系映射(ORM)的工作流程。在本次分享中,我们将深入探讨...

    hibernatetools-Update-4.1.1.zip

    对于版本管理,4.1.1版的Hibernate Tools集成了Eclipse的Maven插件,使得项目构建和依赖管理变得更加便捷。开发者可以直接在IDE内进行Maven操作,无需离开开发环境,这在多模块大型项目中尤其重要。 还有就是代码...

    使用Hibernate tools,生成带中文注释的类和hbm文件

    下载并安装hibernate tools插件,下载地址:...安装完Hibernate tools插件后,在eclipse安装目录下搜索并替换hibernate-tools-5.2.0.Beta1.jar文件,即可生成带中文注释的类和hbm文件

    Hibernatetools_Reference_Guide

    Hibernatetools_Reference_Guide 是一个详细的文档,旨在介绍 Hibernate Tools 的各种特性和使用方法。此指南覆盖了从下载安装到具体功能使用的各个方面,是开发人员利用 Hibernate Tools 进行数据库操作时的重要...

    Eclipse 3.7(Indigo)hibernate Tools

    Eclipse 3.7(Indigo)中的Hibernate Tools是一个强大的集成开发环境插件,它为开发者提供了在Eclipse中高效地处理Hibernate ORM框架的能力。这个插件极大地简化了与Hibernate相关的开发任务,如实体类的生成、...

    如何安装使用hibernate tools

    【hibernate Tools】是Java开发中用于简化Hibernate框架使用的工具集,它为Eclipse提供了对Hibernate项目的集成支持。在本文中,我们将详细介绍如何安装和使用hibernate Tools,以便在开发过程中更高效地处理...

    HibernateTools-3.2.4.rar

    HibernateTools不仅可以在命令行下运行,还支持集成到Eclipse、NetBeans等主流IDE中,提供丰富的插件功能,使得在IDE内就可以完成上述所有操作,大大提升了开发体验。 五、其他功能 除了上述主要功能外,Hibernate...

    自定义 Hibernate Tools 的模板

    - 在Hibernate Tools的配置文件中(通常是hibernatetool.xml或maven插件配置),指定自定义模板的位置。例如,你可以添加如下配置: ```xml *.hbm.xml"/> ``` - `config`属性指定了模板文件的位置,`...

    hibernatetools-Update-4.1.1.Final_2013-12-08_01-06-33-B605

    本篇文章将详细介绍Hibernate Tools 4.1.1.Final版本的更新内容及其实用功能,帮助开发者更高效地利用这个插件。 1. **更新内容解析:** Hibernate Tools的4.1.1.Final版本发布于2013年12月,这次更新可能包含性能...

    eclipse安装hibernate的jboss tools插件

    标题中的“eclipse安装hibernate的jboss tools插件”指的是在Eclipse集成开发环境中安装用于支持Hibernate的JBoss Tools扩展。这个过程是开发者为了提高在Eclipse中使用Hibernate框架进行开发的便利性,通过添加插件...

    hibernatetools-Update-4.1.1.Final_2013-12-08_01-06-33-B605.zip

    总之,"hibernatetools-Update-4.1.1.Final_2013-12-08_01-06-33-B605.zip"是一个强大的Eclipse插件,它为Java开发者提供了全面的Hibernate支持,使数据库操作和管理变得轻松高效。无论是新手还是经验丰富的开发者,...

Global site tag (gtag.js) - Google Analytics