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) {
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值