Raible's Wiki
Raible Designs AppFuseHomepage- Korean - Chinese - Italian - Japanese QuickStart Guide User Guide Tutorials Other ApplicationsStruts ResumeSecurity Example Struts Menu
Set your name in
UserPreferences
Referenced by
JSPWiki v2.2.33
Hide Menu |
This is version 12.
It is not the current version, and thus it cannot be edited. Part I: 在AppFuse建立DAO和对象 - 一个建立对象(代表数据库的表)和把这些对象存储到数据库的Java类的教程。 关于本教程本教程将向你展示如何在一个数据库里创建表,以及如何完成访问这些表的Java代码。我们将建立一个对象以及处理(保存/检索/删除)这些类到数据库的一些代码。用Java术语,我们叫它Plain Old Java Object(a.k.a. a POJO)。这个对象通常代表了数据库中的一个表,其他的类包括: NOTE: 如果你使用MySQL并且希望使用事务 (很有可能是这个情况),你需要使用InnoDB tables,为了做到这一点, 添加以下两句话到 (/etc/my.cnf 或者 c:\Windows\my.ini)。 其中第二个设置 (设置使用UTF-8字符)是4.1.7+所必需的。[mysqld] default-table-type=innodb default-character-set=utf8如果你使用PostgreSQL并且在成批处理时得到许多迷惑的错误,试着把关闭它,方法是增加 <prop key="hibernate.jdbc.batch_size">0</prop> 到你的 src/dao/**/hibernate/applicationContext-hibernate.xml文件。 AppFuse使用Hibernate 作为持久化层, Hibernate是一套对象/关系Object/Relational (O/R)框架,他允许你把Java对象和数据库之间联系起来,它可以很方便的对你的对象执行CRUD (Create, Retrieve, Update, Delete)操作。
字体惯例 (进行中)
让我们继续在AppFuse项目的结构下创建一个新的对象、DAO和测试。 目录
建立一个对象,并且作XDoclet标记 [#1]我们要做的第一件事情就是建立一个需要持久化的对象,我们要在src/dao/**/model目录下建立一个简单的Person对象,这个对象包括id、firstName和lastName属性。 注意: 直接拷贝本教程的代码 在FireFox下无效,但我们可以通过CTRL+Click选定一个代码所在的工作区(OS X下是Command+Click),然后再拷贝。
这个类必须扩展BaseObject,而这个BaseObject有三个抽象方法(equals(), hashCode()和toString())需要你在Person类里实现,前两个是Hibernate的需要。为了完成这部分工作最简单的方式是使用Commonclipse,关于这个工具更多的信息可以在Lee Grey的网站里看到,另外一个你可以使用的Eclipse的插件是Commons4E,我还没有使用过,这里不便对其功能作出评论。
现在我们已经创建了这个POJO对象,我们需要增加XDoclet标记来产生Hibernate的映射文件,这些文件用来映射对象→ 表和属性(变量) → 字段。 首先,我们增加@hibernate.class 来告诉Hibernate我们将要和那个表作关联:
我们也要增加主键的映射,否则XDoclet会在产生映射文件时出错,注意所有的@hibernate.*标签必须在getters'的Javadocs里面。
使用Ant根据对象产生数据库表[#2]在这种情况下,你可以通过运行ant setup-db来建立person表,这个任务会产生文件Person.hbm.xml并且会建立叫做"person"的表,从Ant的控制台窗口,你可以看到Hibernate为你建立的表结构的内容。[schemaexport] create table person ( [schemaexport] id bigint not null, [schemaexport] primary key (id) [schemaexport] ); 如果你查看Hibernate生成的文件Person.hbm.xml,可以到build/dao/gen/**/model目录,这里是Person.hbm.xml的内容(目前的内容):
现在我们要为其它的字段(first_name, last_name)添加额外的@hibernate.property标签:
在这个例子里,添加column属性的唯一原因是因为这个字段名与它的属性名不相同,如果他们相同,你没有必要来指定column属性,关于其它可以使用的标签请看@hibernate.property。 再次运行ant setup-db把新加的属性加到数据库表里。 [schemaexport] create table person ( [schemaexport] id bigint not null, [schemaexport] first_name varchar(50), [schemaexport] last_name varchar(50), [schemaexport] primary key (id) [schemaexport] ); 如果期望修改字段的长度,修改@hibernate.property标签的length属性,如果希望把字段改为必添字段(NOT NULL),可以增加属性not-null="true"。 建立新的DaoTest来对你的DAO运行JUnit测试[#3]注意:从Appfuse版本1.6.1+开始包括了一个AppGen工具,可以用来生成本教程余下的所有的类的代码,不过,我们最好还是先过一遍教程再使用这个工具产生代码。现在,我们要创建一个DaoTest来测试我们的DAO的工作,等会儿,你说,我们还不曾创建DAO呢!,你说得对。无论如何,我发现测试驱动开发大大的促进了软件质量,在许多年里我一直认为在写代码之前写测试是胡说八道,这看起来很愚蠢,但当我尝试之后我认为这样非常好,现在我按照测试驱动的方式工作完全因为我发现这样可以大大提高我软件开发的效率。 开始,我们在test/dao/**/dao目录下建立类PersonDaoTest.java,这个类必须扩展BaseDaoTestCase,而BaseDAOTestCase这个类是JUnit类TestCase的子类,这个类用来加载Spring的ApplicationContext(因为Spring把各个层绑定)和单元测试类同一目录下同你的测试类文件同名的.properties文件(ResourceBundle),这个属性文件的属性可以通过rb属性来访问。
|