Hibernate入门:CRUD方法及实体对象的三种状态

openkk 12年前

Hibernate的实体对象有三种状态,而实体对象是被Session管理:


(1)瞬态:刚刚被创建出来时的状态;
(2)持久化:被Session管理时的状态,能够和数据库同步;
(3)脱管:过去被Session管理,但是现在Session已关闭,虽然存在与数据库对应的记录,但是不能同步;
 

Hibernate入门:CRUD方法及实体对象的三种状态

Hibernate入门:CRUD方法及实体对象的三种状态


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());   }  }
转自:http://blog.csdn.net/xiazdong/article/details/7574732