Hibernate的實體物件有三種狀態,而實體物件是被Session管理:
(1)瞬態:剛剛被建立出來時的狀態;(2)持久化:被Session管理時的狀態,能夠和資料庫同步;(3)脫管:過去被Session管理,但是現在Session已關閉,雖然存在與資料庫對應的記錄,但是不能同步;
Session的入門常用方法
(1)Query query = session.createQuery(hql):利用hql查詢語句查詢;(2)Criteria critera = session.createCriteria(Class clazz);(3)Transaction tx = session.beginTransaction(); //開始事務;tx.commit()提交事務;(4)session.close();//關閉Session,此後被session管理的持久化對象變為脫管狀態;(5)session.save(Object obj); //添加(6)session.update(Object obj); //更新(7)session.delete(Object obj); //刪除(8)Object obj = session.get(Class clazz,Serialiazble id); //根據主鍵尋找記錄並返回;(9)Object obj = session.load(Class clazz,Serializable id); //和get方法效果一樣,但是是懶載入,即在不使用他之前他不會返回對象;接下來,我們利用Session的方法,製作一個HibernateUtils類,此類能夠在平時簡化開發流程:
package org.xiazdong.utils;import java.io.Serializable;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;public final class HibernateUtils {private static SessionFactory factory;public static Session getSession() {return factory.openSession();}private HibernateUtils() { // 單例模式}static { // 載入虛擬機器時執行一次// configure預設載入hibernate.cfg.xml// 如果不是hibernate.cfg.xml,則指定其他名字,此檔案從classpath中找Configuration config = new Configuration().configure();factory = config.buildSessionFactory();}public static void add(Object obj) {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();session.save(obj);tx.commit();} catch (HibernateException e) {if (tx != null) { // 如果存在事務,則復原tx.rollback();}throw e; // 拋出異常} finally {if (session != null) // 如果session存在,則關閉session.close();}}public static void update(Object obj) {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();session.update(obj);tx.commit();} catch (HibernateException e) {if (tx != null) { // 如果存在事務,則復原tx.rollback();}throw e; // 拋出異常} finally {if (session != null) // 如果session存在,則關閉session.close();}}public static void delete(Object obj) {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();session.delete(obj);tx.commit();} catch (HibernateException e) {if (tx != null) { // 如果存在事務,則復原tx.rollback();}throw e; // 拋出異常} finally {if (session != null) // 如果session存在,則關閉session.close();}}public static Object get(Class clazz, Serializable id) {Session session = null;try {session = HibernateUtils.getSession();Object obj = session.get(clazz, id);return obj;} finally {if (session != null) {session.close();}}}}測試類別:
package org.xiazdong;import org.xiazdong.utils.HibernateUtils;public class UserTest {public static void main(String[] args) {User u = new User();u.setName("xiazdong-1");u.setAge(20);HibernateUtils.add(u);//使用add方法//此語句System.out.println("加入成功...");u = (User) HibernateUtils.get(User.class,1);//使用get方法System.out.println("擷取的姓名:"+u.getName());}}