使用XDoclet2+Ant实现Hibernate3的pojoxmldb代码相互转换.docx
- 文档编号:5228492
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:8
- 大小:18.49KB
使用XDoclet2+Ant实现Hibernate3的pojoxmldb代码相互转换.docx
《使用XDoclet2+Ant实现Hibernate3的pojoxmldb代码相互转换.docx》由会员分享,可在线阅读,更多相关《使用XDoclet2+Ant实现Hibernate3的pojoxmldb代码相互转换.docx(8页珍藏版)》请在冰豆网上搜索。
使用XDoclet2+Ant实现Hibernate3的pojoxmldb代码相互转换
使用XDoclet2+Ant实现Hibernate3的pojo-xml-db代码相互转换
XDoclet是一款开源的代码自动生成引擎,支持很多框架的代码自动生成。
而XDoclet2作为Maven2的插件,支持Hibernate3的pojo->xml的代码自动生成。
配合ant与HibernateToolAPI,可以实现pojo<->xml<->dbschema的相互转化。
具体关系为:
生成处理
实用工具
pojo->xml
XDoclet2
xml->pojo
HibernateToolAPI
pojo+xml->dbschema
HibernateToolAPI
dbschema->pojo+xml
可用myeclipse,本文不涉及
下面通过ANT脚本例子,来展示如何完成以上的转换。
1
xmlversion="1.0"encoding="utf-8"?
>
2
3
4
--xdoclet的jar包所在目录-->
5
6
--待处理项目的src目录-->
7
8
--待处理项目的根目录-->
9
10
11
--include进来xdoclet所有jar包-->
12
13
14
15
16
17
--include进来待处理项目的所有jar包,意在使用hibernate相关的jar包-->
18
19
20
21
22
23
--
24继承上2个目录,同时需要把pojo编译好的class文件包含进来。
25这里定义需要留意,很容易掉入到ant的bug陷阱里去。
26详细可参照
27-->
28
29
30
31
32
33
34
--
35xdoclet只在判断未存在hbm.xml的情况下才会生成,已存在的话则不会自动覆盖。
36所以定义一个清空已存在的hbm.xml文件任务。
37-->
38
39
40
41
42
43
44
45
--根据pojo生成hbm.xml,注意一下pojo的路径即可-->
46
47
48
49
50
51
52
53
54
55
56
57
--根据hibernate.cfg.xml文件生成pojo-->
58
59
60
61
62
63
64
65
66
67
--
68生成数据库环境的任务。
69这个可能并不常用,使用org.hibernate.tool.hbm2ddl.SchemaExport编写一个JUnittest可以更方便的连搭环境带造数据。
70-->
71
72
73
74
75
76
77
脚本很详细,看注释即可。
在使用xdoclet2hbm前,需要在pojo上设定javadoc注释,以告诉xdoclet如何进行解析。
one2one&one2many的例子:
Child.java
1packagepo;
2
3/**
4*@hibernate.classtable="child"
5*/
6@SuppressWarnings("serial")
7publicclassChildimplementsjava.io.Serializable{
8
9//xdoclet注释有写在getter上与写在field上2种方法。
10//写在field上会自动生成access="field",所以写在getter上更常用一些。
11
12privateStringid;
13privateStringname;
14privateFatherfather;
15
16/**
17*@hibernate.idgenerator-class="uuid.hex"column="id"length="32"
18*/
19publicStringgetId(){
20returnthis.id;
21}
22
23publicvoidsetId(Stringid){
24this.id=id;
25}
26
27//基本支持所有的hibernate属性,所以想要啥设置就大胆的写吧
28/**
29*@hibernate.propertycolumn="name"length="32"not-null="true"type="java.lang.String"lazy="true"
30*/
31publicStringgetName(){
32returnthis.name;
33}
34
35publicvoidsetName(Stringname){
36this.name=name;
37}
38
39/**
40*@hibernate.many-to-onecolumn="father_id"not-null="true"
41*/
42publicFathergetFather(){
43returnthis.father;
44}
45
46publicvoidsetFather(Fatherfather){
47this.father=father;
48}
49
50}
Father.java
1packagepo;
2
3importjava.util.HashSet;
4importjava.util.Set;
5
6/**
7*@hibernate.classtable="father"
8*/
9@SuppressWarnings("serial")
10publicclassFatherimplementsjava.io.Serializable{
11
12privateStringid;
13
14privateStringname;
15
16privateIntegerage;
17
18privateSet
19
20/**
21*@hibernate.idgenerator-class="uuid.hex"column="id"length="32"
22*/
23publicStringgetId(){
24returnthis.id;
25}
26
27publicvoidsetId(Stringid){
28this.id=id;
29}
30
31/**
32*@hibernate.propertycolumn="name"length="32"not-null="true"type="java.lang.String"
33*/
34publicStringgetName(){
35returnthis.name;
36}
37
38publicvoidsetName(Stringname){
39this.name=name;
40}
41
42/**
43*@hibernate.propertycolumn="age"length="32"type="java.lang.Integer"
44*/
45publicIntegergetAge(){
46returnage;
47}
48
49publicvoidsetAge(Integerage){
50this.age=age;
51}
52
53/**
54*@hibernate.settable="child"
55*@hibernate.keycolumn="father_id"
56*@hibernate.one-to-manyclass="po.Child"
57*/
58publicSet
59returnchildren;
60}
61
62publicvoidsetChildren(Set
63this.children=children;
64}
65}
many2many的例子:
Student.java
1packagepo;
2
3importjava.util.HashSet;
4importjava.util.Set;
5
6/**
7*@hibernate.classtable="student"
8*/
9@SuppressWarnings("serial")
10publicclassStudentimplementsjava.io.Serializable{
11
12privateStringid;
13privateStringname;
14privateSet
15
16/**
17*@hibernate.idgenerator-class="uuid.hex"column="id"length="32"
18*/
19publicStringgetId(){
20returnthis.id;
21}
22
23publicvoidsetId(Stringid){
24this.id=id;
25}
26
27/**
28*@hibernate.propertycolumn="name"length="32"not-null="true"type="java.lang.String"
29*/
30publicStringgetName(){
31returnthis.name;
32}
33
34publicvoidsetName(Stringname){
35this.name=name;
36}
37
38/**
39*@hibernate.settable="student_teacher_relation"
40*@hibernate.keycolumn="student_id"
41*@hibernate.many-to-manyclass="po.Teacher"column="teacher_id"
42*/
43publicSet
44returnteachers;
45}
46
47publicvoidsetTeachers(Set
48this.teachers=teachers;
49}
50}
Teacher.java
1packagepo;
2
3importjava.util.HashSet;
4importjava.util.Set;
5
6/**
7*@hibernate.classtable="teacher"
8*/
9@SuppressWarnings("serial")
10publicclassTeacherimplementsjava.io.Serializable{
11
12privateStringid;
13privateStringname;
14privateSet
15
16/**
17*@hibernate.idgenerator-class="uuid.hex"column="id"length="32"
18*/
19publicStringgetId(){
20returnthis.id;
21}
22
23publicvoidsetId(Stringid){
24this.id=id;
25}
26
27/**
28*@hibernate.propertycolumn="name"length="32"not-null="true"type="java.lang.String"
29*/
30publicStringgetName(){
31returnthis.name;
32}
33
34publicvoidsetName(Stringname){
35this.name=name;
36}
37
38/**
39*@hibernate.settable="student_teacher_relation"
40*@hibernate.keycolumn="teacher_id"
41*@hibernate.many-to-manyclass="po.Student"column="student_id"
42*/
43publicSet
44returnstudents;
45}
46
47publicvoidsetStudents(Set
48this.students=students;
49}
50
51}
总结:
1.本文没有涉及hibernateannnotation模式,需要者请自行查阅相关资料。
2.XDoclet2没有XDoclet1代好找,推荐一个网址JarSearchEngine
3.本文未能涉及在开发中,程序运转时遇到DBschema结构变化而进行的动态自动转换技术。
如有高人知晓,请不吝赐教。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 XDoclet2 Ant 实现 Hibernate3 pojoxmldb 代码 相互 转换