Hibernate工具类,实现CURD操作

来源:互联网 发布:两心之外无人知意思 编辑:程序博客网 时间:2024/06/14 03:22

刚刚学习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) {            }        }    }
原创粉丝点击