使用MiddleGen-Hibernate工具自动生成Hibernate的映射xml文件
一 使用Hibernate的基本思路
- 建立数据库模型,生成数据库
- 根据数据库来生成Hibernate的映射xml文件
- 根据映射xml文件生成Java的对象模型
- 使用Hibernate进行数据库的增删改查
这里就只说怎么用MiddleGen-Hibernate工具来自动生成映射的xml文件。
二 怎么根据数据库来生成Hibernate的映射xml文件
2.1 下载Middlegen-Hibernate工具
这个可以在网上找,我本来打算找一个官方的网址贴出来,但是网上搜索出来的官方网址我试过的都不可用,所以这里就不给出了,可以自己Google一下,关键字就是Middlegen-Hibernate。
2.2 Middlegen-Hibernate工具的配置
我下载的是一个zip包解压出来就是一个文件夹,文件夹里面有很多文件,其中的config/database文件夹里面全部是一些数据库的配置文件,支持的数据库的类型很多,这里我们以mysql为例。
打开config/database文件夹下的mysql.xml文件,其中:
·property name="database.driver.file" 这里的value用来指定你的mysql驱动包地址
·property name="database.url" 这里的value用来指定database的连接字符串,示例格式:value="jdbc:mysql://localhost/Sample",其中的localhost是ip,然后Sample是数据库名
·property name="database.userid" 指定数据库登录名
·property name="database.password" 指定数据库登陆密码
至于其他的我都是采用默认的,具体的用途要用的时候查一下就OK了,这个因为只需要配置这么多就可以使用了,而我这篇文章的主要目的就是告诉怎么样能让Hibernate非常简单的work起来,而不是说很深的原理,至于原理以后再深究,呵呵……
然后就是配置根目录下的build.xml文件:
- 第24行如果你没看到!ENTITY database SYSTEM这个标签那么你就可以搜索!ENTITY关键字然后你会找到这个标签,这里是配置目标数据库文件地址的,也就是我们刚才配置的mysql.xml文件的地址,一般默认的是hsqldb.xml,我们将其修改成mysql.xml就行,这里的地址都用的是相对地址所以你看到的是"file:./config/database/mysql.xml"
- 第52行也就是property name="build.classes.dir"标签,他是指定输出目录的,可以修改成你想要的地址。
- 第185行也就是package="${name}.hibernate",这里是指定包名,hibernate 节点package 属性的默认设置实际上是由前面的Application Name (${name})和“.hibernate”组合而成包名你可以指定成你的calss将要放置的包的名。这里还有一个属性genXDocletTags,如果设置为true,则生成的代码将包含 xdoclet tag。
- 第33行property name="name",这里是指定应用名。
其他的基本都可以按默认的,上面只设置这么些基本就可以了,至于其他的一些配置这里不做深究,因为这个是就ant运行的,所以有兴趣的可以去研究研究ant的配置文件及其里面的各个标签的含义。
2.3 Middlegen-Hibernate工具的运行
进行了上面的一些配置,这里我们可以运行Middlegen-Hibernate工具了,那这个怎么运行呢,上面也说到了这个是基于ant的,所以当然需要使用ant工具来运行。
这里给几个ant运行的基本语法:
·ant –v 查看ant版本信息
·ant –f build.xml 运行某个build.xml的默认task
·ant –f build.xml task1 运行build.xml中指定的task1
看了上面的ant的几个命令相信你应该指定怎么运行了吧。运行起来是这个样子的:
这里我的数据库名是Sample,里面就只有一个表t_user,其中只有两个字段id和name。选中表元素我们就可以调整各个数据库表的属性了。
·Domain class name 对应的POJO的类名
·Key generator 主键产生器的类型,(我们这里选identity,至于这些具体都是什么意思我也没有深究,不过感兴趣的可以研究下,有时间了我也去研究下)如果需要采取自定义的主键产生算法,则在此配置主键生成器,主键生成器必须实现net.sf.hibernate.id.IdentifierGenerator接口。
·Schema Name 数据库schema name.
·Persister 自定义持久类实现类类名,如果系统中还需要Hibernate之外的持久层实现机制,如通过存储过程得到目标数据集,甚至从LDAP中获取数据来填充我们的POJO。
·Enable Proxies 是否使用代理(用于延迟加载[Lazy Loading])
·Dynamic Update 如果选定,则生成Update SQL时不包含未发生变动的地段属性,这样可以在一定程度上提升SQL的效率。
·Mutable 类实例是否可变,默认未选定状态(可变),如果不希望应用程序对此类对应的数据记录进行修改(如对于数据库视图),则可取消其选定状态,之后对此类的Delete和Update操作都将实效。
·Implement the LifeCycle interface 是否实现LifeCycle接口。LifeCycle接口提供了数据固化过程中的控制能力,通过实现LifeCycle接口,我们可以在数据库操作中加入(Callback)机制,如在数据库操作之前或者之后触发指定操作。
·Implement the Validatable interface 是否实现validatable接口,通过实现validatable接口,我们可以在数据被固化到数据库表之前对其合法性进行验证。值得注意的是,通过实现lifecycle接口,我们同样可以在数据操作之前验证数据的合法性,不同的是,validatable接口中定义的validate方法可能会被调多次,因此设计中应避免在Validatable接口的validate方法实现中加入业务逻辑的验证。
以上是针对Class的设置,在Middlegen中我们同样可以对字段属性进行设置。在Middlegen中选定某个字段,界面下方就会显示字段映射属性的设置栏。如图:
其中:
·Hibernate mapping specialty
映射类型:
key:主键
Property:属性
Version:用于实现乐观锁(optimistic locking)
·Java property name 字段对应的java属性名
·Java type 字段对应的java数据类型
·Column updateable 生成Update SQL时是否包含本字段
·Column insertable 生成Insert SQL时是否包含本字段
然后单击窗口顶部的Generate按钮,MiddleGen就会生成这些数据表对应的Hibernate映射文件。然后在上面你配置的生成路径下就可以看到对应的Tuser.hbm.xml映射文件,在这个文件中定义了Tuser类和t_user表的映射关系。