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();
}
}
}

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