我们所要建的应用非常简单,只是利用hibernate3.0对一张表进行操作。
软件环境:
1.eclipse3.1.2;
2.myeclipse4.1.0;
3.mysql server 5.0 ;
4.mysql java connector j 5.0.4;
5.hibernate3.0 core libraries;
6.hibernate3.0 advanced libraries;
参考书籍及文档:
<<深入浅出hibernate>>夏昕,唐勇,曹晓刚
myeclipse help content
整个应用的创建依以下步骤完成:
(1)新建一个名为hibernatetest的mysql schema;
(2)创建一张名为user的表格,其语句如下:
create table `hibernatetest`.`user` (
`id` integer unsigned not null auto_increment,
`name` varchar(45) not null,
`sex` char not null,
`age` tinyint unsigned not null,
primary key (`id`)
)
engine = innodb;
(3)打开myeclipse的db browser视图,在右击选项菜单(context menu)上选择new...,弹出database
profile对话框,用于新建一个profile,填入以下信息:
<3.1>profile name: localhost_mysql_profile;
<3.2>driver: 打开configure database driver链接,配置jdbc驱动,我们只需加入mysql
connector j的jdbc驱动即可;
<3.3>url: jdbc: mysql://127.0.0.1:3306/hibernatetest;
<3.4>user name: 用户名;
<3.5>password: 密码;
创建完profile后,尝试一下连接至数据库,成功即可;
(4)在eclipse中新建一个名为hibernatesample的java项目;
<4.1>创建一个名为config的目录,用于放置hibernate.cfg.xml;
<4.2>创建一个名为mappings的目录,用于放置映射文件;
(5)在hibernatesample项目的右击选项菜单中,选择myeclipse->add hibernate capabilities...这
样会弹出一个hibernate support for myeclipse的对话框:
<5.1>第一步是选择要添加到工程的包,我们把hibernate3.0的core及advanced包都勾上;
<5.2>第二步是否创建hibernate.cfg.xml,我们把configuration folder设定为src/config;
<5.3>第三步是指定数据库连接细节(specify database connection details),我们只需名为
localhost_mysql_profile即可,因为我们之前已经进行了设置;
<5.4>第四步问你是否创建sessionfactory,这个sessionfactory其实是hibernate提供的一个用于
管理session的类,它可以确保在每个独立的线程中session是唯一的,我们创建名为
cn.com.test.hibernatesample.factory.hibernatesessionfactory的类;
通过上述的四步,现在的工程里面已经拥有了hibernate所需的包及配置文件。
(6)在src目录下创建一个名为log4j.properties的文件,内容如下:
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.consoleappender
log4j.appender.stdout.target=system.out
log4j.appender.stdout.layout=org.apache.log4j.patternlayout
log4j.appender.stdout.layout.conversionpattern=%d{absolute} %5p %c{1}:%l - %m%n
log4j.rootlogger=warn, stdout
log4j.logger.org.hibernate=error
因为hibernate是通过log4j进行日志管理的,所以加上这个会比较好,不加会在运行时出错。
(7)创建cn.com.test.hibernatesample.model.user类,篇幅所限,大致如下
-------------------------------------------------------------------------
package cn.com.test.hibernatesample.model;
public class user {
private integer id;
private string name;
private char sex;
private byte age;
//后面是一堆的setter,getter,用于set及get各个属性
}
------------------------------------------------------------------------------
(8)在工程的mappings(在第4步创建的目录)目录下创建一个名为user.hbm.xml,内容如下:
<?xml version="1.0"?>
<!doctype hibernate-mapping public "-//hibernate/hibernate mapping dtd 3.0//en"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="cn.com.test.hibernatesample.model.user" table="user">
<id name="id" column="id" type="integer" >
<generator class="increment"/>
</id>
<property name="name" column="name" type="string" />
<property name="sex" column="sex" type="char"/>
<property name="age" column="age" type="byte"/>
</class>
</hibernate-mapping>
(9)在hibernatesample项目的右击选项菜单中,选择new -> junit test case...,弹出新建junit
test case的对话框:
<9.1>package上输入:cn.com.test.hibernatesample.test;
<9.2>type上输入usertest;
<9.3>在which method stubs whould you like to create中勾上setup(),teardown();
整个usertest类的代码如下:
---------------------------------------------------------------------------------
package cn.com.test.hibernatesample.test;
import org.hibernate.hibernateexception;
import org.hibernate.session;
import org.hibernate.transaction;
import cn.com.test.hibernatesample.factory.hibernatesessionfactory;
import cn.com.test.hibernatesample.model.user;
import junit.framework.assert;
import junit.framework.testcase;
public class usertest extends testcase {
//hibenate的session对象
private session session = null;
protected void setup() throws exception {
super.setup();
session = hibernatesessionfactory.currentsession();
}
public void testuserinsert() {
transaction tran = null;
try {
tran = session.begintransaction();
user user = new user();
user.setname("suhaoyuan");
user.setsex('m');
user.setage(byte.parsebyte("27"));
session.save(user);
tran.commit();
assert.assertequals(.getid().intvalue() > 0, true);
}
catch(hibernateexception ex) {
ex.printstacktrace();
assert.fail(ex.getmessage());
if(tran != null) {
try {
tran.rollback();
}
catch(hibernateexception tranex) {
tranex.printstacktrace();
}
}
}
}
protected void teardown() throws exception {
super.teardown();
hibernatesessionfactory.closesession();
}
}
----------------------------------------------------------------------------
(10)运行刚创建的usertest测试用例即完成该应用;
suhaoyuan
2007.03.15
闽公网安备 35060202000074号