很多東西也不明白 也沒專門去搞清楚,昨天去面試問了挺多東西 我答得都模棱兩可的
不過好像也沒錯 呵呵 不過還是應該搞搞清楚
今天看了尚學堂的視頻 做點小結吧
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();
}
}
}