Hibernate之CRUD工具类

来源:互联网 发布:热玛吉效果怎么样知乎 编辑:程序博客网 时间:2024/05/22 12:56
  1. 创建SessionFactory类,用于获取Session,在使用SessionFactory时,需要注意,此类是一个重量级类,其对象占用大量资源,此处使用单例模式防止创建多个SessionFactory对象
package com.session.factory;//注意此处是我的包名,需要根据自身包名设置import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;import org.hibernate.service.ServiceRegistryBuilder;public class HibernateSessionFactory {    private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();    private static org.hibernate.SessionFactory sessionFactory;    private static Configuration configuration = new Configuration();    private static ServiceRegistry serviceRegistry;    /**     * 私有化构造函数,防止外界随意创建SessionFactory对象     */    private HibernateSessionFactory() {    }    /**     * 静态代码块初始化数据     */    static {        try {            configuration.configure();            serviceRegistry = new ServiceRegistryBuilder().applySettings(                    configuration.getProperties()).buildServiceRegistry();            sessionFactory = configuration.buildSessionFactory(serviceRegistry);        } catch (Exception e) {            System.err.println("创建SessionFactory失败!");            e.printStackTrace();        }    }    /**     *获取和当前线程关联的session     */    public static Session getCurrentSession() throws HibernateException {        Session session = (Session) threadLocal.get();        if (session == null || !session.isOpen()) {            if (sessionFactory == null) {                rebuildSessionFactory();            }            session = (sessionFactory != null) ? sessionFactory.openSession()                    : null;            threadLocal.set(session);        }        return session;    }    /**     * 重新初始化资源     *      */    public static void rebuildSessionFactory() {        try {            configuration.configure();            serviceRegistry = new ServiceRegistryBuilder().applySettings(                    configuration.getProperties()).buildServiceRegistry();            sessionFactory = configuration.buildSessionFactory(serviceRegistry);        } catch (Exception e) {            System.err.println("%%%% Error Creating SessionFactory %%%%");            e.printStackTrace();        }    }/** * 关闭session * @throws HibernateException */    public static void closeSession() throws HibernateException {        Session session = (Session) threadLocal.get();        threadLocal.set(null);        if (session != null) {            session.close();        }    }    /**     * 获取全新的session0     *      */    public static Session getNewSession() {        return sessionFactory.openSession();    }}
  1. 数据库工具类
import java.io.Serializable;import java.util.ArrayList;import java.util.List;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.Transaction;import com.session.factory.HibernateSessionFactory;//需根据自己的SessionFactory位置设定public class MysqlHelper implements Serializable {    /**     *      */    private static final long serialVersionUID = 1L;    /**     * 增加     *      * @param o对象     * @param param参数     */    public static<T> void insert(T t, List<T> param) {        // 获取session        Session session = HibernateSessionFactory.getCurrentSession();        // 创建事物提交方式        Transaction transaction = null;        try {            transaction = session.beginTransaction();            session.save(t);            transaction.commit();        } catch (Exception e) {            // TODO: handle exception            if (transaction == null) {                // 出现异常回滚                transaction.rollback();            }            throw new RuntimeException(e.getMessage());        } finally {            HibernateSessionFactory.closeSession();        }    }    /**     * 删除     *      * @param dObj删除的字段所属类的class文件     * @param id主键号     */    public static <T> void delete(Class<T> dObj, Object id) {        // 获取session        Session session = HibernateSessionFactory.getCurrentSession();        // 创建事物提交方式        Transaction transaction = null;        try {            transaction = session.beginTransaction();            T obj = (T) session.get(dObj.getClass(), (Serializable) id);            session.delete(obj);            transaction.commit();        } catch (Exception e) {            // TODO: handle exception            if (transaction == null) {                // 出现异常回滚                transaction.rollback();            }            throw new RuntimeException(e.getMessage());        } finally {            HibernateSessionFactory.closeSession();        }    }   /**     * 修改数据库     * @param dObj     * @param id     * @return     */    public static <T> Object update(Class<T> dObj, Object id) {        // 获取session        Session session = HibernateSessionFactory.getCurrentSession();        // 创建事物提交方式        Transaction transaction = null;        try {            transaction = session.beginTransaction();            T obj = (T) session.get(dObj.getClass(), (Serializable) id);            transaction.commit();            return obj;        } catch (Exception e) {            // TODO: handle exception            if (transaction == null) {                // 出现异常回滚                transaction.rollback();            }            throw new RuntimeException(e.getMessage());        } finally {            HibernateSessionFactory.closeSession();        }    }    /**     * 查询数据库     *      * @param hql     * @param param     * @return     */    public static List select(String hql, List<Object> param) {        // 获取session        Session session = HibernateSessionFactory.getCurrentSession();        // 创建事物提交方式        Transaction transaction = null;        // 创建Query对象        Query query = session.createQuery(hql);        try {            transaction = session.beginTransaction();            // 处理任务            // 占位符填充索引            int index = 0;            if (param != null && !param.isEmpty()) {                for (Object setParam : param)                    query.setParameter(index++, setParam);            }            List list = query.list();            transaction.commit();            return list;        } catch (Exception e) {            // 出现错误回滚            if (transaction != null) {                transaction.rollback();            }            throw new RuntimeException(e.getMessage());            // TODO: handle exception        } finally {            HibernateSessionFactory.closeSession();        }    }}
0 0