今天看了hibernate持久層的概述,就用myeclipse試著動(dòng)手開(kāi)發(fā)了一個(gè)簡(jiǎn)單的學(xué)生信息管理小程序。
在開(kāi)發(fā)之前,先要理解一個(gè)概念ORM。ORM(object-relation mapping)是對(duì)象關(guān)系映射,對(duì)象指的是java中的對(duì)象,關(guān)系是指關(guān)系型數(shù)據(jù)庫(kù),ORM也就是指從Java對(duì)象到數(shù)據(jù)庫(kù)之間的映射,也就是通過(guò)一個(gè)類的操作來(lái)代表數(shù)據(jù)庫(kù)中的操作。而Hibernate是一個(gè)ORM的實(shí)現(xiàn),所以,主要功能就是操作數(shù)據(jù)庫(kù)(以對(duì)象的形式操作數(shù)據(jù)庫(kù))。
ORM模式圖如下:
本人運(yùn)用的開(kāi)發(fā)環(huán)境為:Eclipse3.2.1+MyEclipse5.1集成開(kāi)發(fā)環(huán)境,數(shù)據(jù)庫(kù)為MySQL4.01版本。
下面開(kāi)始動(dòng)手吧……
S1:創(chuàng)建數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)腳本如下:
create database hibernate;
use hibernate;
create table Student
(
id varchar(32) not null primary key,
sName varchar(20) not null,
sNO varchar(20) not null,
sex varchar(2),
email varchar(30)
);
S2:配置MyEclipse環(huán)境,使之能夠生成HBM文件,即Hibernate映射文件,過(guò)程如下:
配置MySQL驅(qū)動(dòng)程序:
在Eclipse中,點(diǎn)擊Window ->Preferences->MyEclipse -> Database Explorer -> Drivers -> New…
選擇Driver template 為:MySQL Connector/J;
URL為: jdbc:mysql://localhost:3306/hibernate,其中hibernate為數(shù)據(jù)庫(kù)名稱;
添加MySQL驅(qū)動(dòng):mysql"lib"mysqldriver.jar,點(diǎn)擊 OK。
現(xiàn)在只是配置好數(shù)據(jù)庫(kù)的環(huán)境,但是還沒(méi)有真正的生成它,還要?jiǎng)?chuàng)建Database Profile方法如下:
打開(kāi)Window -> Open Perspective->MyEclipse Database Explorer
選擇其中的New 圖標(biāo),上面那個(gè)是我以前做過(guò)的,因此在新建一個(gè)。
Profile name 由自己來(lái)定,我定為JDBC for MySQL,Driver 就是選由上面剛剛配置過(guò)的
MySQL Connector/J,點(diǎn)擊Next -> Finish。
右鍵剛剛創(chuàng)建的JDBC for MySQL2,打開(kāi)Open connection…
出現(xiàn)了我們剛剛創(chuàng)建的數(shù)據(jù)庫(kù)student,好了,可以松一口氣了,暫時(shí)先放一放,后面還會(huì)用到這個(gè)界面的,在打開(kāi)Window -> Open Perspective->Java界面。
S3:新建一個(gè)J2EE的Web Project ,工程名為StuHibernate
然后給這個(gè)項(xiàng)目添加hibernate必要的文件.在我們項(xiàng)目名上點(diǎn)擊右鍵,選擇MyEclipes --> Add Hibernate Capabilities...彈出對(duì)話框如下圖:
其中,JAR Library Installation 選為 Copy checked Library Jars to Project …項(xiàng),其它項(xiàng)均為默認(rèn),點(diǎn)擊Next,進(jìn)入下一個(gè)頁(yè)面后,繼續(xù)點(diǎn)擊Next,進(jìn)入第三個(gè)頁(yè)面
選擇 DB Profile 文件JDBC for MySQL,就是我們?cè)?/span>S2步驟中配置的數(shù)據(jù)庫(kù)驅(qū)動(dòng),在這里,我們就什么也不用手動(dòng)添寫了,直接生成,這就是S2步驟的好處,其中數(shù)據(jù)庫(kù)的言也選為MySQL,點(diǎn)擊Next進(jìn)入下一頁(yè)面
取消對(duì)Crate SessionFactory class? 選項(xiàng)的選擇,點(diǎn)擊Finish。項(xiàng)目結(jié)構(gòu)如下圖:
在 src 目錄下產(chǎn)生了一個(gè)hibernate.cfg.xml 文件:主要是對(duì)Hibernate環(huán)境配置的,包括使用的數(shù)據(jù)庫(kù)或數(shù)據(jù)源。Eclipse為此提供了圖形環(huán)境配置,配置方法為在S2步驟中以配置好了,因此直接生成了如下頁(yè)面:
其中本人數(shù)據(jù)庫(kù)密碼為空,因此什么都沒(méi)有寫。由于MySQL數(shù)據(jù)庫(kù)驅(qū)動(dòng)以經(jīng)加了WEB-INF/lib文件夾中,上面的圖中以有顯示。如果沒(méi)有加入,則復(fù)制到里面。一切準(zhǔn)備工作都以就緒,下面我們就開(kāi)始真正的編寫代碼了!(終于寫到一半了,好累啊,呵呵)
S4:編寫POJO類,也就是持久化類:只包含setter及getter方法的類。POJO(Plain Old Java Objects)是最普通的Java對(duì)象,很像JavaBean。類名最好和表名相同,開(kāi)頭最好大寫,Student.java類
包名:com.cc.hibernate
類名:Student
代碼如下:
package com.cc.hibernate;
//POJO類
public class Student {
//寫入若干屬性
private String id;
private String sname;
private String sno;
private String sex;
private String email;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getSno() {
return sno;
}
public void setSno(String sno) {
this.sno = sno;
}
}
S5:建立映射文件,在次打開(kāi)Window -> Open Perspective->MyEclipse Database Explorer,接到S2步驟
右鍵點(diǎn)擊student表,打開(kāi)Hibernate Reverse Engineering…
創(chuàng)建到包含有POJO類包的文件夾下:
點(diǎn)擊 Next,進(jìn)入下一頁(yè)面
Type Mapping: Hibernate types
主鍵生成方式選為 assigned(指派),由用戶自行完成,單擊 Next,最后點(diǎn)擊 Finish。
在次切回 Window -> Open Perspective->Java界面,出現(xiàn) Student.hbm.xml映射文件,雙擊打開(kāi)查看其代碼。
此文件完成Student類到student表的關(guān)系
S6:編寫具體類,具體操作Hibernate 方法,在Com.cc.hibernate包下
新建類 StudentOperate.java
package com.cc.hibernate;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.Transaction;
public class StudentOperate {
//在Hibernate中,所有的操作都是通過(guò)Session完成
//此Session不同于JSP的Session
private Session session=null;
//在構(gòu)造方法之中實(shí)例化session對(duì)象
public StudentOperate(){
// 找到Hibernate配置
Configuration config=new Configuration().configure();
//從配置中取出SessionFactory
SessionFactory factory=config.buildSessionFactory();
//從SessionFactory中取出一個(gè)Session
this.session=factory.openSession();
}
//所有操作都是由session進(jìn)行的
//向數(shù)據(jù)庫(kù)中增加數(shù)據(jù)
public void insert(Student student){
//開(kāi)始事務(wù)
Transaction tran=this.session.beginTransaction();
//執(zhí)行語(yǔ)句
this.session.save(student);
//提交事務(wù)
tran.commit();
}
}
S7:在com.cc.hibernate 包下新建一個(gè)測(cè)試類 StudentTest.java
代碼如下:
package com.cc.hibernate;
public class StudentTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//生成POJO類實(shí)例化對(duì)象
Student stu=new Student();
stu.setId("006");
stu.setSname("chen");
stu.setSno("03170217");
stu.setSex("男");
stu.setEmail("chenchuang.sy@163.com");
//實(shí)例化 StudentOperate 對(duì)象
StudentOperate op=new StudentOperate();
op.insert(stu);
}
}
運(yùn)行后的頁(yè)面為:
再次查看數(shù)據(jù)庫(kù),看是否添加成功。
如果希望看見(jiàn)所執(zhí)行的SQL語(yǔ)句,打開(kāi)hibernate.cfg.xml文件
點(diǎn)擊 Add按鈕后,出現(xiàn)如下頁(yè)面:
選擇Property為show_sql,設(shè)置Value為ture,點(diǎn)擊OK。
運(yùn)行后的界面為:
呵呵終于完成了!
posted on 2008-07-23 16:54
胖胖泡泡 閱讀(15649)
評(píng)論(16) 編輯 收藏