在myeclipse中基於Hibernate框架開發的入門小程式

在myeclipse中基於Hibernate框架開發的入門小程式

Hibernate框架開發入門


本人最近在學習j2ee框架,學到Hibernate框架開發,花了一天時間弄懂,覺得有必要貼出來大家分享,為初學者提供一些思路。

一、建立Hibernate框架所需環境
①搭建Hibernate框架
Hibernate所需的框架只需要別忘了還有個mysql驅動也就是mysql-connector-java-5.1.18-bin.jar;這個很重要,可以自己到網上去下載,很多的啦,我在這就不贅餘了。

②建立資料庫,在本地建立一個測試資料庫mysqldb,並建立一張User表。

③建立HibernateDemo專案
在myeclipse中(我使用的IDE是myeclipse,很好用,很多框架都直接整合的)新建一個Web Project,名稱為HibernateDemo,右鍵直接—>Myeclipse—>Add Hibernate Capabilities—>next—>next—>選擇一個資料庫驅動(資料庫驅動的建立稍後再後文說)—>next—>建立一個放SessionFactory類檔案的包(HibernateConf)—>finish。然後右鍵—>build path—>Configure build path將下載的框架放進來,還有WEB-INF下lib中的資料庫驅動也放進來,這樣才能載入到類路徑下。至此專案建立完成。

④建立持久化類和設計對映檔案,使用Hibernate對映檔案將POJO物件對映到資料庫。
專案建好了之後,將資料庫中的關係與程式中的對映關係建立好,也就是ORM(Object Relationship Mapping)對映關係。即通過POJOs(Plain Old Java Objects)類的程式設計模式來進行持久化,通過物件導向的方式將關係型資料庫中的資料表以更為清晰的、可操作的模式展現出來。
具體操作方法:在myeclipse中可以直接切換到DB Browser模式中,雙擊資料庫驅動找到你建立的資料庫下的User表,右鍵—>Hibernate Reverse Engineering—>選擇存放持久化物件和對映檔案的位置—>finish。

⑤編寫hibernate.cfg.xml配置檔案
在建立專案的時候我們的hibernate.cfg.xml配置檔案是自動生成的,所以該有的資料庫或者對映檔案列表都自動生成好了,所以改動的不多,不過比如你如果想看到運算元據庫時的sql語句是否正確,你可以在配置檔案中加
<property name="show_sql">true</property>等等配置

⑥編寫HibernateUtil.java工具類
HibernateUtil.java工具類主要的作用是負責Hibernate的啟動和負責完成儲存和訪問SessionFactory的工作。HibernateUtil可以很輕鬆的訪問獲取到Session,從而實現對資料的儲存與獲取等操作。
主要用的一些類的方式:
Configuration:用於建立SessionFactory
SessionFactory:用於建立Session
ThreadLocal:用於儲存Session變數
具體程式碼:

package com.hibernate.entity;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/*Hibernate:輔助工具類,既負責Hibernate的啟動,也負責完成儲存和訪問SessionFactory的工作。
* 使用Hibernate類來處理java應用程式中的Hibernate的啟動是一種常見的模式
*/
public class HibernateUtil {
private static SessionFactory sessionfactory;
// 建立執行緒區域性變數threadLocal,用來儲存Hibernate中的Session
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
// 使用靜態程式碼塊來初始化Hibernate
static {
try {
Configuration cfg = new Configuration().configure("/HibernateConf/hibernate.cfg.xml");// 讀取配置檔案hibernate.cfg.xml
sessionfactory = cfg.buildSessionFactory(); // 建立SessionFactory
} catch (Throwable ex) {
throw new ExceptionInInitializerError(ex);
}
}
// 獲得SessionFactory的例項
public static SessionFactory getSessionFactory() {
return sessionfactory;
}
// 獲得ThreadLocal物件管理的Session例項
public static Session getSession() throws HibernateException {
Session session = (Session) threadLocal.get();
if (session == null || !session.isOpen()) {
// 通過sessionfactory建立session
if (sessionfactory == null) {
rebuildSessionFactory();
}
session = (sessionfactory != null) ? sessionfactory.openSession()
: null;
threadLocal.set(session);
}
return session;
}
// 關閉Session例項
public static void closeSession() throws HibernateException {
Session session = threadLocal.get();
threadLocal.set(null);
if (session != null) {
session.close();
}
}
// 關閉快取和連線池
public static void shutdown() {
sessionfactory = getSessionFactory();
if (sessionfactory != null) {
sessionfactory.close();
}
}
// 重建SessionFactory
private static void rebuildSessionFactory() {
try {
Configuration cfg = new Configuration()
.configure("/HibernateConf/hibernate.cfg.xml");
sessionfactory = cfg.buildSessionFactory();
} catch (Exception e) {
System.out.println("SessionFactory build error");
e.printStackTrace();
}
}
}

注:Configuration在建立SessionFactory之前需要先通過configure()方法讀取配置檔案hibernate.cfg.xml,如果你直接將配置檔案放在類載入路徑下(也就是src)那麼直接呼叫configure(“/hibernate.cfg.xml”)方法就可以了,但是如果你是放在比如包HibernateConf下面的那麼Configuration例項就會根據引數去找了,所以這是你要將你的路徑作為引數即configure(“/HibernateConf/hibernate.cfg.xml”)。

⑦編寫DAO介面UserDAO

package com.hibernate.DAO;
import com.hibernate.entity.User;
public interface UserDAO {
void save(User user); // 新增使用者
User findById(int id); // 查詢使用者
void delete(User user); // 刪除使用者
void update(User user); // 修改使用者資訊
}

⑧編寫DAO層實現類UserDAOImpl

package com.hibernate.DAO;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.hibernate.entity.HibernateUtil;
import com.hibernate.entity.User;
public class UserDAOImpl implements UserDAO{
//新增使用者
public void save(User user) {
Session session = HibernateUtil.getSession();   //獲取session
Transaction tx = session.beginTransaction();    //建立事務
try{
session.save(user);
tx.commit();    //提交事務
}catch(Exception e){
System.out.println("儲存失敗!");
e.printStackTrace();
tx.rollback();  //事務回滾
}finally{
HibernateUtil.closeSession();   //關閉Session資源
}
}
public User findById(int id) {
User user = null;
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
try{
user = session.get(User.class, id);
tx.commit();        //提交事務
}catch(Exception e){
System.out.println("查詢失敗");
e.printStackTrace();
tx.rollback();      //回滾事務
}finally{
HibernateUtil.closeSession();   //關閉Session資源
}
return user;
}
public void delete(User user) {
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
try{
session.delete(user);
tx.commit();
}catch(Exception e){
System.out.println("刪除使用者失敗");
e.printStackTrace();
tx.rollback();
}finally{
HibernateUtil.closeSession();
}
}
public void update(User user) {
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
try{
session.update(user);
tx.commit();
}catch(Exception e){
System.out.println("使用者資訊更新失敗");
e.printStackTrace();
tx.rollback();
}finally{
HibernateUtil.closeSession();
}
}
}

⑨編寫測試類UserTest

package com.hibernate.DAO;
import org.junit.Test;
import com.hibernate.entity.User;
//測試用例
public class UserTest {
@Test
public void UserSave(){
UserDAO userdao = new UserDAOImpl();
try{
User user = new User();
user.setName("test1");
user.setPassword("123456");
user.setType(1);
user.setUserId(1);
userdao.save(user);
}catch(Exception e){
System.out.println("這出錯了,新增失敗");
e.printStackTrace();
}
}
}

程式執行結果:

備註:
建資料庫驅動
切換到DB Browser檢視,右鍵new—>填寫驅動資訊,匯入資料庫驅動包就可以了