您的位置:首页 > 其它

使用xdoclet开发Hibernate程序

2006-11-21 16:13 489 查看
[align=left] [/align]
[align=left]使用xdoclet开发J2EE[/align]
[align=left] [/align]
[align=left]1).使用Xdoclet生成hbm文件.[/align]
[align=left] 首先下载xdoclet的包.然后更改下面配置文件的xdoclet.root.dir文件属性[/align]
[align=left] [/align]
[align=left]<?xml version="1.0" encoding="utf-8"?>[/align]
[align=left]<projectname="XDoclet Examples"default="hibernate"basedir=".">[/align]
[align=left] <propertyname="xdoclet.root.dir"value="C:/Documents and Settings/liujs/桌面/xdoclet/xdoclet-1.2.3"/>[/align]
[align=left] <propertyname="xdoclet.lib.dir"value="${xdoclet.root.dir}/lib"/>[/align]
[align=left] <pathid="myclasspath">[/align]
[align=left] <filesetdir="${xdoclet.lib.dir}">[/align]
[align=left] <includename="*.jar"/>[/align]
[align=left] </fileset>[/align]
[align=left] </path>[/align]
[align=left] <taskdef[/align]
[align=left] name="hibernatedoclet"[/align]
[align=left] classname="xdoclet.modules.hibernate.HibernateDocletTask"[/align]
[align=left] classpathref="myclasspath"[/align]
[align=left] />[/align]
[align=left] <targetname="hibernate"description="Generate mapping documents">[/align]
[align=left]<echo>+---------------------------------------------------+</echo>[/align]
[align=left] <echo>| |</echo>[/align]
[align=left] <echo>| R U N N I N G H I B E R N A T E D O C L E T |</echo>[/align]
[align=left] <echo>| |</echo>[/align]
[align=left] <echo>+---------------------------------------------------+</echo>[/align]
[align=left]<hibernatedoclet[/align]
[align=left] destdir="./src"[/align]
[align=left] excludedtags="@version,@author,@todo,@see"[/align]
[align=left] addedtags="@xdoclet-generated at ${TODAY},@copyright The XDoclet Team,@author XDoclet,@version ${version}"[/align]
[align=left] force="false"[/align]
[align=left] verbose="true">[/align]
[align=left] <filesetdir="./src">[/align]
[align=left] <includename="**/*.java"/>[/align]
[align=left] </fileset>[/align]
[align=left] <hibernateversion="3.0"/>[/align]
[align=left] </hibernatedoclet>[/align]
[align=left] </target>[/align]
[align=left]</project>[/align]

[align=left]2).使用hibernate生成从hbm文件生成SQL语句.[/align]
<property name="hbm2ddl.auto">create</property>
如果值为create-drop时当session被显示关闭后数据库中的表会被删除掉
当值为create时会每次都重新建立数据库

3)Pojo中写放xdoclet

[align=left]package com.jianshe.model;[/align]
[align=left] [/align]
[align=left]/**[/align]
[align=left] [/align]
[align=left] *@hibernate.class table="jianshe" [/align]
[align=left] *[/align]
[align=left] *@authorliujs[/align]
[align=left] */[/align]
[align=left]publicclass User {[/align]
[align=left] private String id;[/align]
[align=left] [/align]
[align=left] /**[/align]
[align=left] *@hibernate.id[/align]
[align=left] * generator-class="uuid.hex"[/align]
[align=left] * length=32[/align]
[align=left] */[/align]
[align=left] public String getId() {[/align]
[align=left] returnid;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] publicvoidsetId(String id) {[/align]
[align=left] this.id = id;[/align]
[align=left] }[/align]
}

4)常用的xdoclet写法

在类前声明表名:

*@hibernate.classtable="app_user"

以下写法均在get方法前
4.1 主键的写法
[align=left]/**[/align]
[align=left]* @hibernate.idcolumn="id"generator-class="uuid.hex "unsaved-value="null"[/align]
[align=left]* [/align]
[align=left]*/[/align]
建议使用generator-class="uuid.hex" 主键生成器

4.2 属性的写法

[align=left]/**[/align]
[align=left]*@hibernate.propertylength="50"not-null="true"unique="true"[/align]
[align=left] [/align]
[align=left]*/[/align]
[align=left] [/align]
4.3 一对多的写法

[align=left]private Set entries;[/align]
[align=left] [/align]
[align=left]/**[/align]
[align=left]* @hibernate.set[/align]
[align=left]* lazy="true"[/align]
[align=left]* cascade="all"[/align]
[align=left]*[/align]
[align=left]* @hibernate.collection-one-to-many[/align]
[align=left]* class="com.xdocletbook.blog.pojo.Entry"[/align]
[align=left]*[/align]
[align=left]* @hibernate.collection-key[/align]
[align=left]* column="blog"[/align]
[align=left]*/[/align]
[align=left]public Set getEntries() {[/align]
[align=left]return entries;[/align]
[align=left]}[/align]

如果使用了一对多,可被控方就要使用多对一,这样,插入数据的时候会执行一条SQL结约性能
[align=left]private Blog blog;[/align]
[align=left]/**[/align]
[align=left]* @hibernate.many-to-one[/align]
[align=left]*/[/align]
[align=left] [/align]
[align=left] [/align]
[align=left]public Blog getBlog() {[/align]
[align=left]return blog;[/align]
[align=left]}[/align]

下面演示的是一个例子来源自<<Xdoclet in action>>演示了Blog 与 Entry 的一对多关系

[align=left]package com.jianshe.model;[/align]
[align=left] [/align]
[align=left]import java.util.Set;[/align]
[align=left] [/align]
[align=left]/**[/align]
[align=left] *@hibernate.classtable="Blog"[/align]
[align=left] */[/align]
[align=left]publicclass Blog {[/align]
[align=left] private String id;[/align]
[align=left] [/align]
[align=left] private String name;[/align]
[align=left] [/align]
[align=left] private String owner;[/align]
[align=left] [/align]
[align=left] private String email;[/align]
[align=left] [/align]
[align=left] public Blog() {[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] /**[/align]
[align=left] *@hibernate.idgenerator-class="uuid.hex"[/align]
[align=left] */[/align]
[align=left] public String getId() {[/align]
[align=left] returnid;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] /**[/align]
[align=left] *@hibernate.property[/align]
[align=left] */[/align]
[align=left] public String getEmail() {[/align]
[align=left] returnemail;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] /**[/align]
[align=left] *@hibernate.property[/align]
[align=left] */[/align]
[align=left] public String getName() {[/align]
[align=left] returnname;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] /**[/align]
[align=left] *@hibernate.property[/align]
[align=left] */[/align]
[align=left] public String getOwner() {[/align]
[align=left] returnowner;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] publicvoid setEmail(String string) {[/align]
[align=left] email = string;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] publicvoid setId(String string) {[/align]
[align=left] id = string;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] publicvoid setName(String string) {[/align]
[align=left] name = string;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] publicvoid setOwner(String string) {[/align]
[align=left] owner = string;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] private Set entries;[/align]
[align=left] [/align]
[align=left] /**[/align]
[align=left] *@hibernate.setlazy="true"cascade="all"[/align]
[align=left] *[/align]
[align=left] *@hibernate.collection-one-to-manyclass="com.jianshe.model.Entry"[/align]
[align=left] *[/align]
[align=left] *@hibernate.collection-keycolumn="blog"[/align]
[align=left] */[/align]
[align=left] public Set getEntries() {[/align]
[align=left] returnentries;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] publicvoid setEntries(Set set) {[/align]
[align=left] entries = set;[/align]
[align=left] }[/align]
[align=left]}[/align]

[align=left]package com.jianshe.model;[/align]
[align=left] [/align]
[align=left]import java.util.Date;[/align]
[align=left] [/align]
[align=left]/**[/align]
[align=left] *[/align]
[align=left] *@hibernate.classtable="Entry"[/align]
[align=left] */[/align]
[align=left]publicclass Entry {[/align]
[align=left] private String id;[/align]
[align=left] [/align]
[align=left] private String text;[/align]
[align=left] [/align]
[align=left] private String title;[/align]
[align=left] [/align]
[align=left] private Date createdDate;[/align]
[align=left] [/align]
[align=left] public Entry() {[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] private Blog blog;[/align]
[align=left] [/align]
[align=left] /**[/align]
[align=left] *@hibernate.many-to-one[/align]
[align=left] */[/align]
[align=left] public Blog getBlog() {[/align]
[align=left] returnblog;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] publicvoid setBlog(Blog blog) {[/align]
[align=left] this.blog = blog;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] /**[/align]
[align=left] *@hibernate.idgenerator-class="uuid.hex"[/align]
[align=left] */[/align]
[align=left] public String getId() {[/align]
[align=left] returnid;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] /**[/align]
[align=left] *@hibernate.property[/align]
[align=left] */[/align]
[align=left] public String getText() {[/align]
[align=left] returntext;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] /**[/align]
[align=left] *@hibernate.property[/align]
[align=left] */[/align]
[align=left] public String getTitle() {[/align]
[align=left] returntitle;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] /**[/align]
[align=left] *@hibernate.property[/align]
[align=left] */[/align]
[align=left] public Date getCreatedDate() {[/align]
[align=left] returncreatedDate;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] publicvoid setId(String string) {[/align]
[align=left] id = string;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] publicvoid setText(String string) {[/align]
[align=left] text = string;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] publicvoid setTitle(String string) {[/align]
[align=left] title = string;[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] publicvoid setCreatedDate(Date date) {[/align]
[align=left] createdDate = date;[/align]
[align=left] }[/align]
}

录入完这两个类后,你使用xdoclet来生成

Hbm文件. 当你指定了hibernate 的属性

<property name="hbm2ddl.auto">create</property>
数据库就会自动生成了.不过它每次都生帮你先删除表再重建的.所以应用启动时一定要去掉个这属性的设置.

关于使用代码提示的问题需要在eclipse中装一个叫做doclipse的插件,兄弟.别看了开始动手尝试一下吧.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: