HibernateUtil—常用sql和hql的封装

/**
 *
 */
package com.btkjgc.utils;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.exception.ConstraintViolationException;
import org.hibernate.jdbc.Work;
import org.hibernate.transform.Transformers;
import org.springframework.context.ApplicationContext;

/**
 * @author lzh
 * http://blog.csdn.net/loveyout/article/details/4193894
 */
final public class HibernateUtil
{
    private static SessionFactory sessionFactory = null;
    
    private static int BATCH_MAX_ROW=20;
 
    private HibernateUtil()
    {

        
    }

    public static void setSessionFactory(SessionFactory factory)
    {
        sessionFactory = factory;
    }

    public static SessionFactory getSessionFactory()
    {
        
        if(sessionFactory==null){
            ApplicationContext ac = ApplicationContextUtil.getApplicationContext();
            sessionFactory = (SessionFactory) ac.getBean("sessionFactory");
        }

        return sessionFactory;
    }

    public static Session openSession()
    {
 
        return getSessionFactory().openSession();
    }

    @SuppressWarnings("rawtypes")
    public static Object getObjectById(Class clazz, java.io.Serializable id)
    {
        Session session = null;
        Object object = null;
        try
        {
            session = openSession();
            object = session.get(clazz, id);
        }
        catch (Exception e)
        {
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        }
        finally
        {
            if (session != null && session.isOpen())
            {
                session.close();
            }
        }
        return object;
    }

    public static <T> int batchSave(final T[] objs) {

        Session session = openSession();
        Transaction tx = session.beginTransaction();
        try {
            for (int i = 0; i < objs.length; i++) {

                session.save(objs[i]);
                if (i % BATCH_MAX_ROW == 0) {
                    session.flush();
                    session.clear();
                }

            }
        } catch (Exception e) {
            e.printStackTrace();
            if (tx != null)
            {
                tx.rollback();
            }
            throw new RuntimeException(e.getMessage());
        } finally {
            if (session != null && session.isOpen()) {
                session.close();
            }
        }

        session.flush();
        session.clear();
        tx.commit();

        return objs.length;

    }

    public static void save(Object obj)
    {
        Session ss = null;
        Transaction tx = null;
        try
        {
            ss = openSession();
            tx = ss.beginTransaction();
            ss.save(obj);
            tx.commit();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            if (tx != null)
            {
                tx.rollback();
            }
            throw new RuntimeException(e.getMessage());
        }
        finally
        {
            if (ss != null && ss.isOpen())
            {
                ss.close();
            }
        }
    }
 
    public static void update(Object obj)
    {
        Session ss = null;
        Transaction tx = null;
        try
        {
            ss = openSession();
            tx = ss.beginTransaction();
            ss.update(obj);
            tx.commit();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            if (tx != null)
            {
                tx.rollback();
            }
            throw new RuntimeException(e.getMessage());
        }
        finally
        {
            if (ss != null && ss.isOpen())
            {
                ss.close();
            }
        }
    }

    public static <T> int batchUpdate(final T[] objs) {

        Session session = openSession();
        Transaction tx = session.beginTransaction();
        try {
            for (int i = 0; i < objs.length; i++) {

                session.update(objs[i]);
                if (i % BATCH_MAX_ROW == 0) {
                    session.flush();
                    session.clear();
                }

            }
        } catch (Exception e) {
            e.printStackTrace();
            if (tx != null)
            {
                tx.rollback();
            }
            throw new RuntimeException(e.getMessage());
        } finally {
            if (session != null && session.isOpen()) {
                session.close();
            }
        }

        session.flush();
        session.clear();
        tx.commit();

        return objs.length;

    }
    
    public static void updateIfExists(Object obj)
    {
        Session ss = null;
        Transaction tx = null;
        try
        {
            ss = openSession();
            tx = ss.beginTransaction();
            ss.update(obj);
            tx.commit();
        }
        catch (Exception e)
        {
            if (tx != null)
            {
                tx.rollback();
            }
        }
        finally
        {
            if (ss != null && ss.isOpen())
            {
                ss.close();
            }
        }
    }

    public static void delete(Object obj)
    {
        Session ss = null;
        Transaction tx = null;
        try
        {
            ss = openSession();
            tx = ss.beginTransaction();
            ss.delete(obj);
            tx.commit();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            if (tx != null)
            {
                tx.rollback();
            }
            throw new RuntimeException(e.getMessage());
        }
        finally
        {
            if (ss != null && ss.isOpen())
            {
                ss.close();
            }
        }
    }

    public static void saveOrUpdate(Object obj)
    {
        Session ss = null;
        Transaction tx = null;
        try
        {
            ss = openSession();
            tx = ss.beginTransaction();
            ss.saveOrUpdate(obj);
            tx.commit();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            if (tx != null)
            {
                tx.rollback();
            }
            throw new RuntimeException(e.getMessage());
        }
        finally
        {
            if (ss != null && ss.isOpen())
            {
                ss.close();
            }
        }
    }

    @SuppressWarnings("rawtypes")
    public static List executeQueryList(String hql, Object... parameters)
    {
        Session session = null;
        List list = null;
        try
        {
            session = openSession();
            Query query = session.createQuery(hql);
            if (parameters != null && parameters.length > 0)
            {
                for (int i = 0; i < parameters.length; i++)
                {
                    query.setString(i, parameters[i].toString());
                }
            }
            list = query.list();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        }
        finally
        {
            if (session != null && session.isOpen())
            {
                session.close();
            }
        }
        return list;
    }

    
    
    
    @SuppressWarnings("rawtypes")
    public static List executeQueryList(String hql,Class clazz,Object... parameters)
    {
        Session session = null;
        List list = null;
        try
        {
            session = openSession();
            Query query = session.createQuery(hql);
            if (parameters != null && parameters.length > 0)
            {
                for (int i = 0; i < parameters.length; i++)
                {
                    query.setString(i, String.valueOf(parameters[i]));
                }
            }
             list =query.setResultTransformer(Transformers.aliasToBean(clazz)).list();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        }
        finally
        {
            if (session != null && session.isOpen())
            {
                session.close();
            }
        }
        return list;
    }
    
 
    
    
 

    public static int executeQueryCount(String hql,Object... parameters)
    {
        Session session = null;
        try
        {
            session = openSession();
            Query query = session.createQuery(hql);
            if (parameters != null && parameters.length > 0)
            {
                for (int i = 0; i < parameters.length; i++)
                {
                    query.setString(i, parameters[i].toString());
                }
            }
            return ((Number) (query.uniqueResult())).intValue();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        }
        finally
        {
            if (session != null && session.isOpen())
            {
                session.close();
            }
        }
    }

    @SuppressWarnings("rawtypes")
    public static List executeQueryFinalNRecords(String hql,
            String[] parameters, Integer record_length)
    {
        Session session = null;
        List list = null;
        try
        {
            session = openSession();
            Query query = session.createQuery(hql);
            if (parameters != null && parameters.length > 0)
            {
                for (int i = 0; i < parameters.length; i++)
                {
                    query.setString(i, parameters[i]);
                }
            }
            query.setMaxResults(record_length);
            list = query.list();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        }
        finally
        {
            if (session != null && session.isOpen())
            {
                session.close();
            }
        }
        return list;
    }
    public static void batchExecuteUpdate(List<String> hqlList)
    {
        Session ss = null;
        Transaction tx = null;
        try
        {
            ss = openSession();
            tx = ss.beginTransaction();
            for (int i = 0; i < hqlList.size(); i++) {
                   Query query = ss.createQuery(hqlList.get(i));
                query.executeUpdate();
            }
            tx.commit();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            if (tx != null)
            {
                tx.rollback();
            }
            throw new RuntimeException(e.getMessage());
        }
        finally
        {
            if (ss != null && ss.isOpen())
            {
                ss.close();
            }
        }
    }

    
    public static void batchExecuteUpdate(List<String> hqlList,List<List<String>> paramLists)
    {
        Session ss = null;
        Transaction tx = null;
        try
        {
            ss = openSession();
            tx = ss.beginTransaction();
            for (int i = 0; i < hqlList.size(); i++) {
                   Query query = ss.createQuery(hqlList.get(i));
                List<String> paramLists2= paramLists.get(i);
                   for (int j = 0; j <paramLists2.size(); j++) {
                       query.setString(j,paramLists2.get(j));
                }
                query.executeUpdate();
            }
            tx.commit();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            if (tx != null)
            {
                tx.rollback();
            }
            throw new RuntimeException(e.getMessage());
        }
        finally
        {
            if (ss != null && ss.isOpen())
            {
                ss.close();
            }
        }
    }

    
    public static void executeUpdate(String hql, String... parameters)
    {
        Session ss = null;
        Transaction tx = null;
        try
        {
            ss = openSession();
            tx = ss.beginTransaction();
            Query query = ss.createQuery(hql);
            if (parameters != null && parameters.length > 0)
            {
                for (int i = 0; i < parameters.length; i++)
                {
                    query.setString(i, parameters[i]);
                }
            }
            query.executeUpdate();
            tx.commit();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            if (tx != null)
            {
                tx.rollback();
            }
            throw new RuntimeException(e.getMessage());
        }
        finally
        {
            if (ss != null && ss.isOpen())
            {
                ss.close();
            }
        }
    }

    
    public static void batchExecuteSQLUpdate(List<String>sqlList)
    {
        Session ss = null;
        Transaction tx = null;
        try
        {
            ss = openSession();
            tx = ss.beginTransaction();
            for (int i = 0; i < sqlList.size(); i++) {
                Query query = ss.createSQLQuery(sqlList.get(i));
                query.executeUpdate();
            }
            
            tx.commit();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            if (tx != null)
            {
                tx.rollback();
            }
            throw new RuntimeException(e.getMessage());
        }
        finally
        {
            if (ss != null && ss.isOpen())
            {
                ss.close();
            }
        }
    }
    
    public static void executeSQLUpdate(String sql, Object... parameters)
    {
        Session ss = null;
        Transaction tx = null;
        try
        {
            ss = openSession();
            tx = ss.beginTransaction();
            Query query = ss.createSQLQuery(sql);
            if (parameters != null && parameters.length > 0)
            {
                for (int i = 0; i < parameters.length; i++)
                {
                    if (parameters[i] != null)
                    {
                        query.setString(i, parameters[i].toString());
                    }
                    else
                    {
                        query.setString(i, null);
                    }
                }
            }
            query.executeUpdate();
            tx.commit();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            if (tx != null)
            {
                tx.rollback();
            }
            throw new RuntimeException(e.getMessage());
        }
        finally
        {
            if (ss != null && ss.isOpen())
            {
                ss.close();
            }
        }
    }

    public static int executeUpdateIfExist(String hql, String[] parameters)
    {
        Session ss = null;
        Transaction tx = null;
        int updateNumbers = 0;
        try
        {
            ss = openSession();
            tx = ss.beginTransaction();
            Query query = ss.createQuery(hql);
            if (parameters != null && parameters.length > 0)
            {
                for (int i = 0; i < parameters.length; i++)
                {
                    query.setString(i, parameters[i]);
                }
            }
            updateNumbers = query.executeUpdate();
            tx.commit();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            if (tx != null)
            {
                tx.rollback();
            }
            throw new RuntimeException(e.getMessage());
        }
        finally
        {
            if (ss != null && ss.isOpen())
            {
                ss.close();
            }
        }
        return updateNumbers;
    }

    public static Object  executeQueryOneObject(String hql, String...parameters)
    {
        Session ss = null;
        Object obj = null;
        try
        {
            ss = openSession();
            Query query = ss.createQuery(hql);

            if (parameters != null && parameters.length > 0)
            {
                for (int i = 0; i < parameters.length; i++)
                {
                    query.setString(i, parameters[i]);
                }
            }
            obj = query.uniqueResult();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        }
        finally
        {
            if (ss != null && ss.isOpen())
            {
                ss.close();
            }
        }
        return obj;
    }
 

    @SuppressWarnings({ "unused", "rawtypes" })
    public List findColumnByPage(String hql, String parameters[])
    {
        // Creat by Rong on 2015-8-8
        Session session = null;
        List list = null;
        try
        {
            session = HibernateUtil.openSession();
            Query query = session.createQuery(hql);
            if (parameters != null && parameters.length > 0)
            {
                for (int i = 0; i < parameters.length; i++)
                {
                    query.setString(i, parameters[i]);
                }
            }
            query.setFirstResult(0);
            query.setMaxResults(1);
            return query.list();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        }
        finally
        {
            if (session != null && session.isOpen())
            {
                session.close();
            }
        }
    }

    @SuppressWarnings("rawtypes")
    public static List executeQueryList(String hql, int pageIndex, int pageSize,
            String[] parameters)
    {
        Session session = null;
        List list = null;
        try
        {
            session = openSession();
            Query query = session.createQuery(hql);
            query.setFirstResult(pageIndex * pageSize);
            query.setMaxResults(pageSize);
            if (parameters != null && parameters.length > 0)
            {
                for (int i = 0; i < parameters.length; i++)
                {
                    query.setString(i, parameters[i]);
                }
            }
            list = query.list();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        }
        finally
        {
            if (session != null && session.isOpen())
            {
                session.close();
            }
        }
        return list;
    }
    
    
    
    public static Integer executeSQLUpdate(String sql)
    {
        // 直接执行sql,直接执行在数据库可以执行的sql(相当于不使用映射文件)
        // Creat by Rong on 2015-9-1
        Session session = null;
        try
        {
            session = HibernateUtil.openSession();
            Query query = session.createSQLQuery(sql);
            return query.executeUpdate();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        }
        finally
        {
            if (session != null && session.isOpen())
            {
                session.close();
            }
        }
    }

    @SuppressWarnings("rawtypes")
    public static List executeSQLQueryList(String sql)
    {
        // 直接执行sql,直接执行在数据库可以执行的sql(相当于不使用映射文件)
        // Creat by Rong on 2015-6-27
        Session session = null;
        List list = null;
        try
        {
            session = HibernateUtil.openSession();
            Query query = session.createSQLQuery(sql);
            /*
             * if (parameters != null && parameters.length > 0) { for (int i =
             * 0; i < parameters.length; i++) { query.setString(i,
             * parameters[i]); } }
             */
            list =query.list();
            return list;
        }
        catch (Exception e)
        {
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        }
        finally
        {
            if (session != null && session.isOpen())
            {
                session.close();
            }
        }
    }
    
 
    @SuppressWarnings("rawtypes")
    public static List executeSQLQueryList(String sql, Class clazz,Object... parameters)
    {
        Session session = null;
        List  list = null;
        try
        {
            session = openSession();
            SQLQuery query = session.createSQLQuery(sql);
            
            if (parameters != null && parameters.length > 0)
            {
                for (int i = 0; i < parameters.length; i++)
                {
                    query.setString(i, parameters[i].toString());
                }
            }
             list =query.setResultTransformer(Transformers.aliasToBean(clazz)).list();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        }
        finally
        {
            if (session != null && session.isOpen())
            {
                session.close();
            }
        }
        return list;
    }
    
    
    @SuppressWarnings("rawtypes")
    public static Object executeSQLQueryObject(String sql, Class clazz,Object... parameters)
    {
        Session session = null;
        List  list = null;
        Object object= null;
        try
        {
            session = openSession();
            SQLQuery query = session.createSQLQuery(sql);
            
            if (parameters != null && parameters.length > 0)
            {
                for (int i = 0; i < parameters.length; i++)
                {
                    query.setString(i, parameters[i].toString());
                }
            }
             list =query.setResultTransformer(Transformers.aliasToBean(clazz)).list();
             if(list!=null && list.size()!=0){
                 object=list.get(0);
             }
        }
        catch (Exception e)
        {
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        }
        finally
        {
            if (session != null && session.isOpen())
            {
                session.close();
            }
        }
        return  object;
    }
 
    
    @SuppressWarnings("rawtypes")
    public static Object executeSQLQueryObject(String sql,Object... parameters)
    {
        Session session = null;
        List  list = null;
        Object object= null;
        try
        {
            session = openSession();
            SQLQuery query = session.createSQLQuery(sql);
            
            if (parameters != null && parameters.length > 0)
            {
                for (int i = 0; i < parameters.length; i++)
                {
                    query.setString(i, parameters[i].toString());
                }
            }
             list =query.list();
             if(list!=null && list.size()!=0){
                 object=list.get(0);
             }
        }
        catch (Exception e)
        {
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        }
        finally
        {
            if (session != null && session.isOpen())
            {
                session.close();
            }
        }
        return  object;
    }
 
    
    public static int executeSQLQueryInt(String sql, Object... parameters)
    {
        Session session = null;
        try
        {
            session = openSession();
            Query query = session.createSQLQuery(sql);
            if (parameters != null && parameters.length > 0)
            {
                for (int i = 0; i < parameters.length; i++)
                {
                    query.setString(i, parameters[i].toString());
                }
            }
            return ((Number) (query.uniqueResult())).intValue();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        }
        finally
        {
            if (session != null && session.isOpen())
            {
                session.close();
            }
        }
    }

    
    @SuppressWarnings("rawtypes")
    public static List executeSQLQueryList(String sql, int pageIndex, int pageSize,
            String[] parameters,Class clazz)
    {
        Session session = null;
        List list = null;
        try
        {
            session = openSession();
            Query query = session.createSQLQuery(sql);
            query.setFirstResult(pageIndex * pageSize);
            query.setMaxResults(pageSize);
            if (parameters != null && parameters.length > 0)
            {
                for (int i = 0; i < parameters.length; i++)
                {
                    query.setString(i, parameters[i]);
                }
            }
             list =query.setResultTransformer(Transformers.aliasToBean(clazz)).list();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        }
        finally
        {
            if (session != null && session.isOpen())
            {
                session.close();
            }
        }
        return list;
    }
    
    public static void callProcedure(final String procedure,final Object... objs){
        
        Session session = null;
        try
        {
            session = openSession();
            Transaction tx = session.beginTransaction();
    
            session.doWork(new Work() {
                public void execute(Connection connection) {
                    // 这里已经得到connection了,可以继续你的JDBC代码。
                    // 注意不要close了这个connection。
                    CallableStatement cstmt;
                    try {
                        cstmt = connection.prepareCall(procedure);
                        for (int i = 0; i < objs.length; i++) {
                            cstmt.setObject(i, objs[i]);
                        }
                        cstmt.executeUpdate();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
        
                }
            });
            tx.commit();  
        }
        catch (Exception e)
        {
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        }
        finally
        {
            if (session != null && session.isOpen())
            {
                session.close();
            }
        }
    
    }

}

猜你喜欢

转载自blog.csdn.net/jishuisanqianli/article/details/53999497