`
piliskys
  • 浏览: 4461 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hibernate自动生成xml,vo,dao(oracle

阅读更多
以前写的一个,现一起发下,增加一发帖数
--------------------------------------------------------------
在做东西之前,感觉现在很多公司很多项目中都要对hibernate中的hbm.xml,vo,dao进行手工编写,也有很多项目中为了方便省去了dao,用hql直接编写, 在此,感觉如果用hql操作的话,不利用调试(没有

sql的一些工具可对数据库直接操作,如pl/sql等 )
对于此三种文件,只是代码的一些参数的变化,逻辑操作基本相同,因此本人就想写一程序直接生成这三

种文件,当我们程序员操作hibernate时,甚至不要求懂hibernate,只要求懂得一些接口,对vo如何操作

,这样的话,可以把hibernate的使用错误率降低,可以减少程序员学习hibernate的时间,减少程序员写

xml,vo,dao的时间,也有利于项目的稳定,让程序员有更多时间了解业务.
     当然这样的工具在很多公司都自主开发了,作为公司产品的一部分,也就不可能任何人都得到了。
可能有人会说网上不是很多自动生成vo,xml等的东西吧,像MiddleGen,xdoclet等,但是它们虽然灵活,

但不能生成一整套文件,像MiddleGen,我不知道如果有上千个表的话,它会不会死,反正我运行一次六七

百个表进就死了,界面化的东西,而且要手工干预,感觉不是很好。
     因此本人还是决定写一写此程序,不管它的运用是否能成功,开始,本人用erwin生成的xml文件解

析来操作分析,当然通过此xml文件完成是可以得到你要生在的三种文件的所有信息的,它不仅包括数据

库中的物理结构,而且定义的逻辑结构也在此xml文件中,这样的话,就可以实现一些表名的中注释,而

且定义表的字段的大小写也清晰分明,而且对文件操作可以与数据库相脱离,感觉是一个很好的选择。
但当运用后发现,xml定义要很规范,(如果是对于专一用户来说是很容易实现),而且当今用数据建模

的工具太多,而且就算用erwin建模也可能定义的很不一样。因此决定用直接从数据库出发。
    相对erwin的xml文件,数据库的不足是没有逻辑结构,因此不可能有一些表的中方对应注释,而且表

名和字段名都变大写,大小写很难与原意相同,如定义的字段为FisrtName,在数据库中都变为大写,就很

难还原成此字符串,但好在此多数下不会影响操作。
     因此,本人定义的vo中,表名 为 ab_cd_ef 对应的vo就是AbCdEfVO,也就是首字大写有下划线的后

一字母大写,最后加上大定的'VO'二字符。
在hbm.xml文件中,本人只定义one-to-many,而其它many-to-one或one-to-one是在vo中找出此表对应外

键的vo,个人感觉:虽然hibernate中有多种对应关系,但是作为从本条结果出生,就为两种,to-many和

to-one,
在vo中,本个引入了一个hashMap,nulllist主要是为了一些查询、更新、或删除时,用于字段设置为空时

进行操作。
  主要接口
其中有一个接作接口,


public interface DataStore {
      /** *//**
         * 删除单个vo
         * @param obj   需要设置主键
         * @throws com.piliskys.exception.DAOException
         */
    public  void delete(Object obj)
        throws DAOException;
          /** *//**
           * 删除一系列vo
           * @param obj 所有字段可设置null, 若属性为字符串,可设置为 %,自动删除匹配的VO
           * @return  删除后返回的行数
           * @throws DAOException
           */
    public  int deleteByVO(Object obj)
        throws DAOException;
         /** *//**
          * 单个vo更新
          * @param obj 要设置主键(作为查询条件) 其它set属于更新字段
          * @throws DAOException
          */

    public  int update(Object obj)
        throws DAOException;
         /** *//**
          * 条件可如是字符串可设置带%,其它可设置null,不能设置为''字符串
          * 以前一对像做为条件进行批量更新后一对象设置的值
          * @param obj 条件
          * @param obj1  要更新的值
          * @throws DAOException
          */
     public  int update(Object obj,Object obj1)
        throws DAOException;
          /** *//**
           * 插入一VO
           * @param obj 要设置一些相应的属性
           * @return
           * @throws DAOException 违反插入操作报错
           */

    public  Serializable insert(Object obj)
        throws DAOException;

           /** *//**
            * 返回设置最大个数的vo
            * @param class1
            * @return
            * @throws DAOException
            */
    public  List selectAll(Class class1)
        throws DAOException;

            /** *//**
             * 根据主键查找vo
             * @param obj 要设置主键
             * @return  返回一相应的vo
             * @throws DAOException
             */
    public  Object selectByPK(Object obj)
        throws DAOException;

            /** *//**
             * 根据对象设置的属性的值进行查找
             * @param obj 可设置null,字符串字段可设置带%字符串
             * @return   对应的list
             * @throws DAOException
             */
    public  List selectByVO(Object obj)
        throws DAOException;

            /** *//**
             * 根据对象设置的属性及起始和结束的个数的值进行查找
             * (用于分页)
             * @param obj
             * @param i  开始的行
             * @param j  结束的行
             * @return   对应的list
             * @throws DAOException
             */
    public  List selectByVO(Object obj, int i, int j)
        throws DAOException;

             /** *//**
              * hibernate的事物管理
              * @return  hibernate事物
              */
    public  Transaction currentTransaction()   throws DAOException;;

             /** *//**
              * hibernate中直接调用sql语句(用于update和delete)
              * @param s  sql字符串
              * @return   更新或删除的个数
              * @throws DAOException
              */

    public  int sqlExcute(String s)
        throws DAOException;
              /** *//**
               * hibernate中直接调用sql语句(用于update和delete)
               * @param s  带“?”的字符串
               * @param list  参数的设置
               * @return   更新或删除的个数
               * @throws DAOException
               */
    public  int sqlExcute(String s, List list)
        throws DAOException;
              /** *//**
               * 利用sql中带参数的查询
               * @param s 带 “?”字符的字符串
               * @param list 参数集合
               * @return  List 含map的list,key为字段全部小写
               * @throws DAOException
               */
    public List selectBySQL(String s, List list)
            throws DAOException;
               /** *//**
                * HQL查询
                * @param s
                * @param list   参数对应值系列
                * @return
                * @throws DAOException
                */
    public  List selectByQuery(String s, List list)
        throws DAOException;
    /** *//**
     *
     * @param s   HQL
     * @param list  参数对应值系列
     * @param i  结果集开始数
     * @param j  结果集数
     * @return
     * @throws DAOException
     */
    public  List selectByQuery(String s, List list,int i,int j)
        throws DAOException;
    public   void flush()
        throws DAOException;
    public   void close();
    public   void open();


========================================================================================
DataStore ds =     DataManager.getInstance();//得到一个操作的实像,现在你就可以用此类进行以

上操作
如:Transaction tx =   ds.currentTransaction() ;//得到此事务
现在我们假设有一个person类(id,name,address),id为主键
1,要查出id为'2323'的person  ds.selectByPK( new PersonVO('2323') );
2, 要查出所有姓'李'的person集合
   PersonVo per = new PersonVo();
   per.setName('刘%');
List list =  ds.selectByVO(per) ;
3, 要查出所有姓'李'的,地址为空的person集合
   PersonVo per = new PersonVo();
   per.setName('刘%');
   per.setAddress(null);
List list =  ds.selectByVO(per) ;
以上可以任意组合,deleteByVO同样适用以上方法。
其它请参看以上接口类。
====================================================================================
若你需要以程序:请发邮件给我,但请注意:若你索取程序的同时,代表你同意以下信息,
  1,请不要以任何形式转发此程序给他人。
  2,如果你认为此程序很有缺陷,请指出,以便进行解决。
=====================================================================================
最后:希望得到你的支持与理解,更希望得到你的意见和建议。
本人邮件(piliskys@itpub.net)
分享到:
评论
5 楼 piliskys 2006-12-06  
作为一个架构,我感觉以业务驱动是不太可取的,毕竟业务是会变的,而我们使用hibernate,主要是用它与数据库操作,对于一些业务操作当然是不应该放在此中的,hibernate是一种资源,而不应该掺杂其它更多的东西,应该考虑的是如何整合与其它框架,
DAO中是太多的东西可以通用,这只是一个模式,甚至可以省去, 一个东西自动生成的话,就不容易出错,质量就更容易保证,复杂不复杂也无关紧要,反正是计算机去做,只要保证人做的事简单就好
4 楼 leelun 2006-12-06  
用Eclipse的一个插件hibernatesynchronizer,就可以解决问题呀,很好用
3 楼 抛出异常的爱 2006-12-06  
以业务为中心的开发才是正路
以表结构的开发.....
很容易就变成了以表驱动开发的工程了
(那样的工程用jbuild写EJB...的样子就可以达到)
PS:xml可以用myeclipse开发
DAO中的增删查大多可以通用
并写在一个DAO中
而特殊的条件查询,统计查询又不能通用单写最好
VO这种东西与页面,逻辑关系大对数据库关系弱...
自动怎么才能生成?
2 楼 gkm422 2006-12-06  
先看下再回,再讨论,呵呵
1 楼 piliskys 2006-12-06  
唉,没人讨论一下,失败

相关推荐

    hibernate自动生成

    在描述中提到的“hibernate自动生成”是指Hibernate提供的代码生成工具,能够帮助我们快速创建Entity(实体)、映射文件(Mapping Files)以及DAO(数据访问对象)等关键组件。这一特性使得开发过程更加便捷,减少了...

    六步骤轻松完成Hibernate中生成VO.xml

    Middlegen-Hibernate是一款强大的代码生成工具,主要用于基于数据库表结构自动生成Java实体类(Value Object, VO)以及对应的Hibernate配置文件。首先,我们需要访问其官方网站或其他可信源下载最新版本的Middegen-...

    myeclipse中自动生成hibernate的POJO、DAO和hbm.xml文件

    MyEclipse中自动生成Hibernate的POJO、DAO和hbm.xml文件 MyEclipse是一款功能强大且流行的集成开发环境(IDE),它提供了许多实用的功能来帮助开发者快速构建和维护项目。其中,MyEclipse提供了对Hibernate的支持,...

    hibernate自动生成dao,配置文件等的学习笔记,在myeclipse下实现

    在本教程中,我们将探讨如何在MyEclipse环境下利用Hibernate工具自动生成DAO(数据访问对象)、POJO(Plain Old Java Object)以及配置文件。 首先,我们需要确保MyEclipse已经集成了Hibernate支持。这可以通过右键...

    Hibernate自动生成持久化类和映射文件

    "Hibernate自动生成持久化类和映射文件"这个话题主要涉及如何利用myEclipse这款集成开发环境的反向工程功能,快速地根据数据库中的表结构生成对应的Hibernate配置文件、映射文件以及持久化类。下面将详细介绍这一...

    hibernate dao 生成工具

    Hibernate DAO(Data Access Object)生成工具是用于自动化创建数据访问层对象的实用程序,它可以显著提高开发效率,尤其是在处理大量数据库交互的项目中。DAO模式是一种设计模式,它提供了对数据库操作的抽象,使得...

    利用hibernate自动生成hbm.xml文件和entity类.doc

    Hibernate 反向工程是指使用 Hibernate 工具将数据库表结构反向生成对应的 Entity 类和 hbm.xml 文件的过程。这种方法可以大大简化开发过程,提高开发效率。 二、 Hibernate 反向工程的步骤 1. 切换到 MyEclipse ...

    hibernate代码自动生成

    而“Hibernate代码自动生成”则是指利用Hibernate的工具或者第三方库,自动生成与数据库表对应的Java实体类、DAO(数据访问对象)层、Service层以及相关的SQL语句,从而减少手动编写这些重复性代码的工作量,提高...

    build.xml 手写自动生成Hibernate映射文件和配置文件源代码

    build.xml 手写自动生成Hibernate映射文件和配置文件源代码

    hibernate自动生成数据库文件

    本文将深入探讨Hibernate如何自动生成数据库文件,以及相关知识点。 首先,Hibernate的核心概念是对象关系映射(ORM),它通过元数据(如XML配置文件或注解)将Java类与数据库表进行绑定。当需要自动生成数据库文件...

    java根据数据库自动生成vo 类

    通过配置Hibernate的`hbm.xml`映射文件,可以自动生成对应的Java类。使用Hibernate的逆向工程工具,如`hibernate-tools`,可以快速从数据库中生成实体类。这个过程包括读取数据库模式,创建Java类,并自动添加字段、...

    Hibernate关系映射XML生成工具

    关系映射XML生成工具,如"Middlegen-Hibernate-r5",则是为了简化这一过程而设计的。这些工具能够自动生成Hibernate所需的配置文件,包括映射文件(.hbm.xml),这些文件定义了Java类和数据库表之间的映射关系。 ...

    自动生成Hibernate类文件和hbm.xml文件

    通过myeclipse自动生成Hibernate类文件和hbm.xml文件,链接数据库库自动生成

    hibernate eclipse插件生成dao样例

    这个插件能够帮助开发者更便捷地使用Hibernate,比如自动创建实体类、配置映射文件(hbm.xml)以及生成对应的DAO和Service类。通过插件自动生成的DAO样例,开发者可以快速理解如何设计和实现DAO接口及其实现类,以...

    Hibernate自动生成配置文件

    点击“Next”和“Finish”,MyEclipse会自动生成对应的Hibernate配置文件(`hibernate.cfg.xml`)、实体类(如`User.java`)和映射文件(`User.hbm.xml`)。 生成的`hibernate.cfg.xml`文件包含了数据库连接信息,...

    基于HIbernateTemplate的代码自动生成

    `HibernateTemplate`是Spring框架对Hibernate ORM(对象关系映射)的一种封装,它简化了与数据库交互的复杂性,而"基于HibernateTemplate的代码自动生成"正是为了进一步提升开发效率而设计的一种技术手段。...

    Hibernate 映射文件自动生成

    【标题】:“Hibernate 映射文件自动生成” 在Java开发中,Hibernate是一个广泛使用的对象关系映射(ORM)框架,它极大地简化了数据库操作。Hibernate通过XML或注解方式将Java类与数据库表进行映射,使得开发者可以...

    myeclipse与hibernate―反向生成实体类和DAO

    MyEclipse与Hibernate反向生成实体类和DAO MyEclipse是一个基于Eclipse平台的集成开发环境(IDE),它提供了很多实用的功能和插件来帮助开发者快速开发Java应用程序。Hibernate是一个流行的对象关系映射(ORM)框架...

Global site tag (gtag.js) - Google Analytics