zoukankan      html  css  js  c++  java
  • Hibernate入门:CRUD方法及实体对象的三种状态

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




















  • 相关阅读:
    程序活动记录&程序调试&多线程编程
    数据结构与算法
    C/C++
    Information Retrieval --- Retrieval Comment
    Information Retrieval --- Clustering
    Information Retrieval --- Classification
    Information Retrieval --- Web Search
    Information Retrieval --- Retrieval Enforce:Relevance Feedback & Query Expansion
    Information Retrieval --- Retrieval Model
    ubuntu server 安装vnc
  • 原文地址:https://www.cnblogs.com/xiazdong/p/3058021.html
Copyright © 2011-2022 走看看