hibernate三種狀態及常用方法

用hibernate做了幾個小項目了 不過感覺就用了ormapping 一些save方法 query方法
很多東西也不明白 也沒專門去搞清楚,昨天去面試問了挺多東西 我答得都模棱兩可的
不過好像也沒錯 呵呵 不過還是應該搞搞清楚

今天看了尚學堂的視頻 做點小結吧


package my.hibernate.util;


import my.hibernate.pojo.Customer;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class Base {


public static void main(String... args)
{
/*Customer customer=new Customer();
customer.setName("YM");
//上面的對象處於瞬時態 其與數據庫和session都沒關係

add(customer);
System.out.println("customerid是"+customer.getCustomerid());*/
//上面的對象處於脫管態 數據庫中有相應的記錄 但是因爲session已經關閉 故與session無關了

//對脫管狀態的對象進行更新的時候需要調用update方法
Customer customer=getCustomerById(18);

System.out.println("所查詢的用戶是"+customer.getName());
}

//添加
static void add(Object obj)
{
Session session=null;
Transaction tx=null;
try
{
session=HibernateUntil.getSession();
tx=session.beginTransaction();

//如果沒有事務的話 會插入數據庫 又被回滾
session.save(obj);
//obj此時屬於持久狀態 在session關閉之前都處於持久狀態
//處於持久態的對象發生變化的時候 數據庫中也會發生相應變化

//如果沒有事務的話 persist方法則不插入數據庫 會報錯
//session.persist(obj);


//調用saveOrUpdate()方法的時候對象會變成持久態
//而調用merge()方法的時候對象寫入了數據庫但對象依然是脫管的
tx.commit();
//如果處於持久態的對象進行了修改 hibernate將在commit的時候寫到數據庫中
}
//catch部分不寫也可以!
catch(HibernateException ex)
{
//事物回滾 並且將異常拋出
if(tx!=null)
tx.rollback();
throw ex;
}
finally
{
if(session!=null)
session.close();
}
}

static Customer getCustomerById(int id)
{
Session session=null;
try
{
session=HibernateUntil.getSession();
//get是從數據庫中查詢一條記錄
// Customer customer=(Customer)session.get(Customer.class, id);

//load是懶加載 並沒有直接訪問數據庫 等到調用的時候 比如customer1.getName()時候才進行數據庫訪問,這種方式不推薦多用
//因爲任何時候customer1都不是爲空的 load自己new了一個對象!! 如果庫表中沒有該記錄 但customer1也不是空的 明白???!!
Customer customer1=(Customer)session.load(Customer.class, id);

//這個時候纔會訪問數據庫 沒有這句話將會報錯
customer1.getBandid();
return customer1;
}
finally
{
if(session!=null)
session.close();
}
}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章