Hibernate工具类,实现CURD操作

刚刚学习hibernate,对编写工具类做了一个初步的练习,简化对数据的操作

import java.lang.reflect.Field;
import java.util.List;


import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;


/**
 * hibernate工具类 实现CRUD操作
 * 
 * @author Johnson
 * @version 1.0
 */
public class HibernateUtil {
	private static Configuration configuration;
	private static SessionFactory sessionFactory;


	static {
		configuration = new Configuration();
		configuration.configure();
		sessionFactory = configuration.buildSessionFactory();
	}


	/**
	 * 
	 * @return SessionFactory
	 */
	public static SessionFactory getSessionFactory() {
		return sessionFactory;
	}


	/**
	 * 获取线程绑定的Session
	 * 
	 * @return Session
	 */
	public static Session getSession() {
		return sessionFactory.getCurrentSession();
	}


	/**
	 * 关闭sessionFactory
	 */
	public static void closeSessionFactory() {
		sessionFactory.close();
	}


	/**
	 * 向数据库添加对象
	 * 
	 * @param <T>
	 * @param obj
	 *            添加数据库的实体类对象
	 * @return boolean
	 */
	public static <T> boolean add(T obj) {
		Transaction tx = null;
		Session session = null;
		boolean flag = false;
		try {
			session = getSession();
			tx = session.beginTransaction();
			session.save(obj);
			tx.commit();
			flag = true;
		} catch (Exception e) {
			tx.rollback();
			flag = false;
			e.printStackTrace();
		} finally {
			// session.close();
		}
		return flag;
	}


	/**
	 * 根据uid获取数据库中数据
	 * 
	 * @param <T>
	 * @param uid
	 *            对象uid
	 * @return User
	 */
	public static <T> T get(int uid, Class<T> cls) {
		Transaction tx = null;
		Session session = null;
		T obj = null;
		try {
			session = sessionFactory.openSession();
			tx = session.beginTransaction();
			obj = session.get(cls, uid);
			tx.commit();
		} catch (Exception e) {
			tx.rollback();
			e.printStackTrace();
		} finally {
			session.close();


		}
		return obj;
	}


	/**
	 * 根据uid更新数据库数据
	 * @param uid  对象uid
	 * @param newObj 新对象
	 * @param cls 对象class属性
	 * @return boolean
	 */
	public static <T> boolean update(int uid, T newObj, Class<T> cls) {
		Transaction tx = null;
		Session session = null;
		boolean flag = false;
		try {
			session = getSession();
			tx = session.beginTransaction();
			T obj = session.get(cls, uid);
			// 查询不到的情况
			if (obj == null) {
				return flag;
			}
			// 返回值的类型与注入类型不一样的情况
			if (!obj.getClass().equals(newObj.getClass())) {
				return flag;
			}
			HibernateUtil.mergeObject(newObj, obj);
			session.update(obj);
			tx.commit();
			flag = true;
		} catch (Exception e) {
			tx.rollback();
			flag = false;
			e.printStackTrace();
		} finally {
			// session.close();
		}
		return flag;
	}


	/**
	 * 根据uid删除数据库中对象
	 * 
	 * @param <T>
	 * @param uid
	 *            删除的对象uid
	 * @return boolean
	 */
	public static <T> boolean delete(int uid, Class<T> cls) {
		Transaction tx = null;
		Session session = null;
		boolean flag = false;
		try {
			session = getSession();
			tx = session.beginTransaction();
			T obj = session.get(cls, uid);
			if (obj == null) {
				return flag;
			}
			session.delete(obj);
			tx.commit();
			flag = true;
		} catch (Exception e) {
			tx.rollback();
			flag = false;
			e.printStackTrace();
		} finally {
			// session.close();
		}
		return flag;
	}
	/**
	 * 得到数据库中所有的T类型的数据
	 * @param cls T类型的class
	 * @return List<T>
	 */
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public static <T> List getAll(Class<T> cls) {
		Transaction tx = null;
		Session session = null;
		List<T> list = null;
		try {
			session = sessionFactory.openSession();
			tx = session.beginTransaction();
			list = session.createQuery("from " + cls.getName()).list();
			tx.commit();
		} catch (Exception e) {
			tx.rollback();
			e.printStackTrace();
		} finally {
			session.close();
		}
		return list;
	}


}



	/**
	 * 将origin的所有属性注入destination
	 * @param origin 源对象
	 * @param destination 目标对象
	 * @return void
	 */
	public static <T> void mergeObject(T origin, T destination) {
		if (origin == null || destination == null)
			return;
		if (!origin.getClass().equals(destination.getClass()))
			return;


		Field[] fields = origin.getClass().getDeclaredFields();
		for (int i = 0; i < fields.length; i++) {
			try {
				fields[i].setAccessible(true);
				Object value = fields[i].get(origin);
				if (null != value) {
					fields[i].set(destination, value);
				}
				fields[i].setAccessible(false);
			} catch (Exception e) {
			}
		}
	}



不足之处,多多指教


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值