9dao层的实现类中的配置BaseDao,所有的DaoImpl可以继承此类

package com.hfxt.dao.impl;

import java.io.Serializable;
import java.math.BigInteger;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.hibernate.Query;
import org.hibernate.Session;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.transaction.annotation.Transactional;

import com.hfxt.common.Pager;
import com.hfxt.common.Validity;
import com.hfxt.dao.IBaseDao;
import com.hfxt.exception.HibernateDaoSupportException;

public class BaseDao<T,PK extends Serializable> extends HibernateDaoSupport implements IBaseDao<T,PK>  {
	
	
	 protected Logger log = LoggerFactory.getLogger(this.getClass());
	    
	    
	    private boolean isCacheQueries = true;

	    public boolean isCacheQueries() {
	        return isCacheQueries;
	    }

	    public void setCacheQueries(boolean isCacheQueries) {
	        this.isCacheQueries = isCacheQueries;
	    }

	    /**
	     * The <code>add(T entity)</code> method is add object to database.
	     * 
	     * @param entity
	     *            if you want to add entity.
	     * 
	     * @throws HibernateDaoSupportException
	     *             Throws HibernateDaoSupportException when accessing and
	     *             manipulating database happen exception.
	     */
	    public PK add(T entity) throws HibernateDaoSupportException {
	        if (null == entity) {
	            throw new HibernateDaoSupportException("Param(#"
	                    + this.getClass().getName() + ") with value null");
	        }

	        try {
	            PK pk = (PK)this.getHibernateTemplate().save(entity);
	            log.debug("Executing save method is successful!");
	            return pk;
	        } catch (DataAccessException e) {
	            log.error("Error saving entity:{}", e);
	            throw new HibernateDaoSupportException("Error saving (#"
	                    + this.getClass().getName() + "#):" + e);
	        }
	    }
	    
	    
	    /**
	     * 更新或保存实体
	     * @param entity
	     */
	    public void saveOrUpdateEntity(T entity){
	    	this.getHibernateTemplate().saveOrUpdate(entity);
	    }

	    /**
	     * The <code>delete(T entity)</code> method is delete object to database.
	     * 
	     * @param entity
	     *            if you want to delete entity.
	     * 
	     * @throws HibernateDaoSupportException
	     *             Throws HibernateDaoSupportException when accessing and
	     *             manipulating database happen exception.
	     */
	    public void delete(T entity) throws HibernateDaoSupportException {
	        if (null == entity) {
	            throw new HibernateDaoSupportException("Param(#"
	                    + this.getClass().getName() + ") with value null");
	        }

	        try {
	            this.getHibernateTemplate().delete(entity);
	            log.debug("Execute delete method is successful!");
	        } catch (DataAccessException e) {
	            log.error("Error deleting entity:{}", e);
	            throw new HibernateDaoSupportException("Error deleting (#"
	                    + this.getClass().getName() + "#):" + e);
	        }
	    }

	    /**
	     * The <code>find(T entity)</code> method is find object according object
	     * type.
	     * 
	     * @param entity
	     *            if you want to find class condition.
	     * @return List<T> according entity to find object's connection.
	     * @throws HibernateDaoSupportException
	     *             Throws HibernateDaoSupportException when accessing and
	     *             manipulating database happen exception.
	     * 
	     */
	    @SuppressWarnings("unchecked")
	    public List<T> find(T entity) throws HibernateDaoSupportException {
	        if (null == entity) {
	            throw new HibernateDaoSupportException("Param(#"
	                    + this.getClass().getName() + ") with value null");
	        }

	        List lists = null;
	        try {
	            if (isCacheQueries) {
	                this.getHibernateTemplate().setCacheQueries(true);
	            } else {
	                isCacheQueries = true;
	                this.getHibernateTemplate().setCacheQueries(false);
	            }
	            lists = (List<T>) this.getHibernateTemplate().findByExample(entity);
	            log.debug("Execute find method is successful!");
	        } catch (DataAccessException e) {
	            log.error("Error finding entity: {}", e);
	            throw new HibernateDaoSupportException("Error finding (#"
	                    + this.getClass().getName() + "#):" + e);
	        }

	        return lists;
	    }

	    /**
	     * find object's collection with class
	     * 
	     * @param clazz
	     *            according class
	     * @return Object's connection
	     * @throws HibernateDaoSupportException
	     *             when accessing and manipulating database happen exception
	     */
	    @SuppressWarnings("unchecked")
	    public List<T> find(Class<T> clazz) throws HibernateDaoSupportException {
	        if (null == clazz) {
	            throw new HibernateDaoSupportException(
	                    "Param(#clazz) with value null");
	        }
	        String hql = "FROM " + clazz.getName();

	        List<T> lists = null;
	        try {
	            if (isCacheQueries) {
	                this.getHibernateTemplate().setCacheQueries(true);
	            } else {
	                isCacheQueries = true;
	                this.getHibernateTemplate().setCacheQueries(false);
	            }
	            lists = (List<T>) this.getHibernateTemplate().find(hql);
	            log.debug("Execute find method is successful!");
	        } catch (DataAccessException e) {
	            log.error("Error finding entity:{}", e);
	            throw new HibernateDaoSupportException("Error finding (#"
	                    + this.getClass().getName() + "#):" + e);
	        }
	        return lists;
	    }

	    /**
	     * The <code>findById(PK id)</code> method is find object according
	     * primary key.
	     * 
	     * @param id
	     *            if you want to find object's primary key
	     * @return T insject object
	     * @throws HibernateDaoSupportException
	     *             Throws HibernateDaoSupportException when accessing and
	     *             manipulating database happen exception.
	     */
	    @SuppressWarnings("unchecked")
	    public T findById(PK id, Class<T> clazz)
	            throws HibernateDaoSupportException {
	        if (null == id) {
	            throw new HibernateDaoSupportException("PK with value null");
	        }

	        T entity = null;
	        String hql = "FROM " + clazz.getName() + " n where n.id = ";
	        
	        if(id instanceof String){
	        	hql +=  "'"+id+"'";
	        }else{
	        	hql += id;
	        }
	        try {
	            //use 2 leave cache
	            entity = (T) this.getUniqueBeanResult(hql);
	            log.debug("Execute findById method is successful!");
	        } catch (DataAccessException e) {
	            log.error("Error finding entity:{}", e);
	            throw new HibernateDaoSupportException("Error finding ("
	                    + this.getClass().getName() + "):" + e);
	        }
	        return entity;

	    }

	    /**
	     * The <code>queryList(PK startRecord, PK pageSize)</code> method is query
	     * objects according startRecord and pagesize're number, object type is
	     * according your implements this method's define type, and implements this
	     * interface abstract class must be override all method and inject entity
	     * type.
	     * 
	     * @param startRecord
	     *            Where from the beginning to show this record
	     * @param pageSize
	     *            The number of records per page
	     * @param clazz
	     *            according class
	     * @return List<T> T is your inject object's type, List is query all object
	     *         connection
	     * 
	     * @throws HibernateDaoSupportException
	     *             Throws HibernateDaoSupportException when accessing and
	     *             manipulating database happen exception.
	     */
	    public List<T> queryList(int startRecord, int pageSize, Class<T> clazz)
	            throws HibernateDaoSupportException {
	        return queryList(null, startRecord, pageSize, clazz, null);
	    }

	    /**
	     * find object's connection with hql class and param map
	     * 
	     * @param hql
	     *            according hql if class param is null
	     * @param startRecord
	     *            Where from the beginning to show this record
	     * @param pageSize
	     *            the number of records per page
	     * @param clazz
	     *            according class
	     * @param properties
	     *            according param map
	     * @return Object's connection
	     * @throws HibernateDaoSupportException
	     *             when accessing and manipulating database happen exception
	     */
	    @SuppressWarnings("unchecked")
	    public List<T> queryList(String hql, final int startRecord,
	            final int pageSize, Class<T> clazz,
	            final Map<String, Object> properties)
	            throws HibernateDaoSupportException {
	        if (hql == null && clazz == null) {
	            throw new HibernateDaoSupportException(
	                    "Param(#hql#) and param(#clazz#) is null");
	        }
	        if (clazz != null) {
	            hql = "FROM " + clazz.getName();
	        }
	        final String queryHql = hql;
	        try {
	            return getHibernateTemplate().executeFind(new HibernateCallback() {
	                public Object doInHibernate(Session session) {
	                    Query query = session.createQuery(queryHql);
	                    if (isCacheQueries) {
	                        query.setCacheable(true);
	                    } else {
	                        isCacheQueries = true;
	                        query.setCacheable(false);
	                    }
	                    if (!Validity.isEmpty(properties)) {
	                        query.setProperties(properties);
	                    }
	                    if (startRecord >= 0 && pageSize >= 0) {
	                        query.setFirstResult(startRecord).setMaxResults(
	                                pageSize);
	                    }
	                    return query.list();
	                }
	            });
	        } catch (DataAccessException e) {
	            log.error("Error executing queryList ({}):{}", hql, e);
	            throw new HibernateDaoSupportException(
	                    "Error executing queryList (" + hql + "):" + e);
	        }
	    }

	    /**
	     * The <code>getRecordCount()</code> method is used for getting the total
	     * count of records.
	     * 
	     * @return PK return total of record counts
	     * @throws HibernateDaoSupportException
	     *             Throws HibernateDaoSupportException when accessing and
	     *             manipulating database happen exception.
	     */
	    public long getRecordCount(Class<T> clazz)
	            throws HibernateDaoSupportException {
	        String hql = "SELECT COUNT(*) FROM " + clazz.getName();
	        Integer count = null;

	        try {
	            if (isCacheQueries) {
	                this.getHibernateTemplate().setCacheQueries(true);
	            } else {
	                isCacheQueries = true;
	                this.getHibernateTemplate().setCacheQueries(false);
	            }
	            count = ((Long) this.getHibernateTemplate().find(hql).iterator()
	                    .next()).intValue();
	            log.debug("Execute getRecordCount method is successful!");
	        } catch (DataAccessException e) {
	            log.error("Error getting count:{}", e);
	            throw new HibernateDaoSupportException("Error getting count for ("
	                    + this.getClass().getName() + "):" + e);
	        }

	        return count;
	    }

	    /**
	     * get count with select hql and param map
	     * 
	     * @param selectHql
	     *            according select hql
	     * @param properties
	     *            according param map
	     * @return count of hql
	     * @throws HibernateDaoSupportException
	     *             when accessing and manipulating database happen exception
	     */
	    public int getRecordCount(String selectHql, Map<String, Object> properties)
	            throws HibernateDaoSupportException {
	        String countHql = getCountHql(selectHql);
	        return ((Long) getUniqueBeanResult(countHql, properties)).intValue();
	    }

	    /**
	     * The <code>modifty(T entity)</code> method is update object to database.
	     * 
	     * @param entity
	     *            if you want to update entity.
	     * @throws HibernateDaoSupportException
	     *             Throws HibernateDaoSupportException when accessing and
	     *             manipulating database happen exception.
	     */
	    public void modify(T entity) throws HibernateDaoSupportException {
	        if (null == entity) {
	            throw new HibernateDaoSupportException("Param(#"
	                    + this.getClass().getName() + ") with value null");
	        }
	        try {
	            this.getHibernateTemplate().update(entity);
	            log.debug("Execute update method is successful!");
	        } catch (DataAccessException e) {
	            log.error("Error updating entity:{}", e);
	            throw new HibernateDaoSupportException("Error updating (#"
	                    + this.getClass().getName() + "#):" + e);
	        }
	    }

	    /**
	     * find page object's connection with class
	     * 
	     * @param clazz
	     *            according class
	     * @param currentPage
	     *            current page
	     * @param pageSize
	     *            the number of records per page
	     * @return Object's connection
	     * @throws HibernateDaoSupportException
	     *             when accessing and manipulating database happen exception
	     */
	    public Pager<T> findPager(int currentPage, int pageSize, Class<T> clazz)
	            throws HibernateDaoSupportException {
	        return findPager(null, currentPage, pageSize, clazz, null);
	    }

	    /**
	     * find page object's connection with hql and param map
	     * 
	     * @param hql
	     *            according hql if class param is null
	     * @param currentPage
	     *            current page
	     * @param pageSize
	     *            the number of records per page
	     * @param properties
	     *            according param map
	     * @return Object's connection
	     * @throws HibernateDaoSupportException
	     *             when accessing and manipulating database happen exception
	     */
	    public Pager<T> findPager(String hql, int currentPage, int pageSize,
	            Map<String, Object> properties) throws HibernateDaoSupportException {
	        return findPager(hql, currentPage, pageSize, null, properties);
	    }

	    /**
	     * find page object's connection with sql and param map
	     * 
	     * @param sql
	     *            according sql if class param is null
	     * @param currentPage
	     *            current page
	     * @param pageSize
	     *            the number of records per page
	     * @param properties
	     *            according param map
	     * @return Object's connection
	     * @throws HibernateDaoSupportException
	     *             when accessing and manipulating database happen exception
	     */
	    @SuppressWarnings("unchecked")
	    public Pager findPagerBySql(String sql, int currentPage,
	            int pageSize, Map<String, Object> properties)
	            throws HibernateDaoSupportException {
	        log.debug("sql:{},currentPage:{},pageSize:{},propertie:{}",
	                new Object[] { sql, currentPage, pageSize, properties });

	        if (currentPage <= 0) {
	            throw new HibernateDaoSupportException(
	                    "Param(#currentPage#) value : { " + currentPage + " }");
	        }
	        int totalRecords = 0;
	        String countSql = getCountHql(sql);
	        this.getUniqueBeanResultSql(countSql, properties);
	        totalRecords = ((BigInteger) this.getUniqueBeanResultSql(countSql,
	                properties)).intValue();
	        Pager page = new Pager();
	        List list = null;
	        page.setTotal(totalRecords);
	        page.setPageSize(pageSize);
	        page.setCurrentPage(currentPage);
	        list = this.queryListSql(sql, (currentPage - 1) * pageSize, pageSize,
	                properties);
	        page.setPageRecords(list);
	        return page;
	    }

	    /**
	     * find object's connection with sql class and param map
	     * 
	     * @param sql
	     *            according sql if class param is null
	     * @param startRecord
	     *            Where from the beginning to show this record
	     * @param pageSize
	     *            the number of records per page
	     * @param properties
	     *            according param map
	     * @return Object's connection
	     * @throws HibernateDaoSupportException
	     *             when accessing and manipulating database happen exception
	     */
	    @SuppressWarnings("unchecked")
	    public List queryListSql(final String sql, final int startRecord,
	            final int pageSize, final Map<String, Object> properties)
	            throws HibernateDaoSupportException {
	        if (sql == null) {
	            throw new HibernateDaoSupportException("Param(#sql#) is null");
	        }
	        try {
	            return getHibernateTemplate().executeFind(new HibernateCallback() {
	                public Object doInHibernate(Session session) {
	                    Query query = session.createSQLQuery(sql);
	                    if (!Validity.isEmpty(properties)) {
	                        query.setProperties(properties);
	                    }
	                    if (startRecord >= 0 && pageSize >= 0) {
	                        query.setFirstResult(startRecord).setMaxResults(
	                                pageSize);
	                    }
	                    return query.list();
	                }
	            });
	        } catch (DataAccessException e) {
	            log.error("Error executing queryList ({}):{}", sql, e);
	            throw new HibernateDaoSupportException(
	                    "Error executing queryList (" + sql + "):" + e);
	        }
	    }

	    /**
	     * find page object's connection with hql class and param map
	     * 
	     * @param hql
	     *            according hql
	     * @param currentPage
	     *            current page
	     * @param pageSize
	     *            the number of records per page
	     * @param clazz
	     *            according class
	     * @param properties
	     *            according param map
	     * @return Object's connection
	     * @throws HibernateDaoSupportException
	     *             when accessing and manipulating database happen exception
	     */
	    private Pager<T> findPager(String hql, int currentPage, int pageSize,
	            Class<T> clazz, Map<String, Object> properties)
	            throws HibernateDaoSupportException {
	        log.debug("hql:{},currentPage:{},pageSize:{},clazz:{},propertie:{}",
	                new Object[] { hql, currentPage, pageSize, clazz, properties });
	        boolean tempCacheQueries = isCacheQueries;
	        if (currentPage <= 0) {
//	            throw new HibernateDaoSupportException(
//	                    "Param(#currentPage#) value : { " + currentPage + " }");
	            currentPage = 1;
	        }
	        int totalRecords = 0;
	        if (clazz != null) {
	            totalRecords = (int)this.getRecordCount(clazz);//TODO long to int?
	        } else {
	            totalRecords = this.getRecordCount(hql, properties);
	        }
	        if (!tempCacheQueries) {
	            isCacheQueries = false;
	        }
	        Pager<T> page = new Pager<T>();
	        List<T> list = null;
	        page.setTotal(totalRecords);
	        page.setPageSize(pageSize);
	        list = this.queryList(hql, (currentPage - 1) * pageSize, pageSize,
	                clazz, properties);
	        //直到找到有数据的页码为止
	        while(list.size() == 0 && currentPage > 1){
	        	currentPage= currentPage -1;
	        	list = this.queryList(hql, (currentPage - 1) * pageSize, pageSize,
	                    clazz, properties);
	        }
	        page.setCurrentPage(currentPage);
	        page.setPageRecords(list);
	        return page;
	    }

	    /**
	     * find object's connection with hql
	     * 
	     * @param hql
	     *            according hql
	     * @return Object's connection
	     * @throws HibernateDaoSupportException
	     *             when accessing and manipulating database happen exception
	     */
	    public List<T> getObjects(String hql) throws HibernateDaoSupportException {
	        return getObjects(hql, new HashMap<String, Object>(0));
	    }

	    /**
	     * find object's connection with hql and param map
	     * 
	     * @param hql
	     *            according hql
	     * @param properties
	     *            according param map
	     * @return Object's connection
	     * @throws HibernateDaoSupportException
	     *             when accessing and manipulating database happen exception
	     */
	    @SuppressWarnings("unchecked")
	    public List<T> getObjects(final String hql,
	            final Map<String, Object> properties)
	            throws HibernateDaoSupportException {
	        log.debug("hql:{}, properties:{}", hql, properties);

	        try {
	            return getHibernateTemplate().executeFind(new HibernateCallback() {
	                public Object doInHibernate(Session session) {
	                    Query query = session.createQuery(hql);
	                    if (isCacheQueries) {
	                        query.setCacheable(true);
	                    } else {
	                        isCacheQueries = true;
	                        query.setCacheable(false);
	                    }
	                    if (!Validity.isEmpty(properties)) {
	                        query.setProperties(properties);
	                    }
	                    List<T> list = query.list();
	                    return list;
	                }
	            });
	        } catch (DataAccessException e) {
	            log.error("Error getObjects:{}", e);
	            throw new HibernateDaoSupportException("Error getObjects (#"
	                    + this.getClass().getName() + "#):" + e);
	        }
	    }

	    /**
	     * find object with hql and param map
	     * 
	     * @param hql
	     *            according hql
	     * @param properties
	     *            according param map
	     * @return Object which find
	     * @throws HibernateDaoSupportException
	     *             when accessing and manipulating database happen exception
	     */
	    public Object getUniqueBeanResult(final String hql,
	            final Map<String, Object> properties)
	            throws HibernateDaoSupportException {
	        log.debug("hql:{}, properties:{}", hql, properties);

	        try {
	            return getHibernateTemplate().execute(new HibernateCallback() {
	                public Object doInHibernate(Session session) {
	                    Query query = session.createQuery(hql);
	                    if (isCacheQueries) {
	                        query.setCacheable(true);
	                    } else {
	                        isCacheQueries = true;
	                        query.setCacheable(false);
	                    }
	                    if (!Validity.isEmpty(properties)) {
	                        query.setProperties(properties);
	                    }
	                    Object object = query.uniqueResult();
	                    return object;
	                }
	            });
	        } catch (DataAccessException e) {
	            log.error("Error getUniqueBeanResult:{}", e);
	            throw new HibernateDaoSupportException(
	                    "Error getUniqueBeanResult (#" + this.getClass().getName()
	                            + "#):" + e);
	        }
	    }

	    /**
	     * find object with sql and param map
	     * 
	     * @param sql
	     *            according sql
	     * @param properties
	     *            according param map
	     * @return Object which find
	     * @throws HibernateDaoSupportException
	     *             when accessing and manipulating database happen exception
	     */
	    public Object getUniqueBeanResultSql(final String sql,
	            final Map<String, Object> properties)
	            throws HibernateDaoSupportException {
	        log.debug("sql:{}, properties:{}", sql, properties);
	        try {
	            return getHibernateTemplate().execute(new HibernateCallback() {
	                public Object doInHibernate(Session session) {
	                    Query query = session.createSQLQuery(sql);
	                    if (!Validity.isEmpty(properties)) {
	                        query.setProperties(properties);
	                    }
	                    Object object = query.uniqueResult();
	                    return object;
	                }
	            });
	        } catch (DataAccessException e) {
	            log.error("Error getUniqueBeanResult:{}", e);
	            throw new HibernateDaoSupportException(
	                    "Error getUniqueBeanResult (#" + this.getClass().getName()
	                            + "#):" + e);
	        }
	    }
	    
	    /**
	     * execute with sql and param arrary
	     * 
	     * @param sql
	     *            according sql
	     * @param values
	     *            according param arrary
	     * @return the count of success record
	     * @throws HibernateDaoSupportException
	     *             when accessing and manipulating database happen exception
	     */
	    public int executeSql(final String sql, final Map<String, Object> values)
	            throws HibernateDaoSupportException {
	        log.debug("hql:{}, params:{}", sql, values);
	        try {
	            return (Integer) getHibernateTemplate().execute(
	                    new HibernateCallback() {
	                        public Object doInHibernate(Session session) {
	                            Query query = session.createSQLQuery(sql);
	                            if (!Validity.isEmpty(values)) {
	                                query.setProperties(values);
	                            }
	                            int i = query.executeUpdate();
	                            return i;
	                        }
	                    });
	        } catch (DataAccessException e) {
	            log.error("Error executeUpdate:{}", e);
	            throw new HibernateDaoSupportException("Error executeUpdate (#"
	                    + this.getClass().getName() + "#):" + e);
	        }
	    }

	    /**
	     * find object with hql
	     * 
	     * @param hql
	     *            according hql
	     * @return Object which find
	     * @throws HibernateDaoSupportException
	     *             when accessing and manipulating database happen exception
	     */
	    public Object getUniqueBeanResult(String hql)
	            throws HibernateDaoSupportException {
	        return getUniqueBeanResult(hql, new HashMap<String, Object>(0));
	    }

	    /**
	     * update entity with hql and param map
	     * 
	     * @param hql
	     *            according hql
	     * @param properties
	     *            according param map
	     * @return the count of success record
	     * @throws HibernateDaoSupportException
	     *             when accessing and manipulating database happen exception
	     */
	    public int executeUpdate(final String hql,
	            final Map<String, Object> properties)
	            throws HibernateDaoSupportException {
	        log.debug("hql:{}, properties:{}", hql, properties);

	        try {
	            return (Integer) getHibernateTemplate().execute(
	                    new HibernateCallback() {
	                        public Object doInHibernate(Session session) {
	                            Query query = session.createQuery(hql);
	                            if (!Validity.isEmpty(properties)) {
	                                query.setProperties(properties);
	                            }
	                            int i = query.executeUpdate();
	                            return i;
	                        }
	                    });
	        } catch (DataAccessException e) {
	            log.error("Error executeUpdate:{}", e);
	            throw new HibernateDaoSupportException("Error executeUpdate (#"
	                    + this.getClass().getName() + "#):" + e);
	        }
	    }

	    /**
	     * update entity with hql and param arrary
	     * 
	     * @param hql
	     *            according hql
	     * @param values
	     *            according param arrary
	     * @return the count of success record
	     * @throws HibernateDaoSupportException
	     *             when accessing and manipulating database happen exception
	     */
	    public int executeUpdate(final String hql, final Object[] values)
	            throws HibernateDaoSupportException {
	        String params = converArrayToString(values);
	        log.debug("hql:{}, params:{}", hql, params);

	        try {
	            return (Integer) getHibernateTemplate().execute(
	                    new HibernateCallback() {
	                        public Object doInHibernate(Session session) {
	                            Query query = session.createQuery(hql);
	                            setQueryParam(query, values);
	                            int i = query.executeUpdate();
	                            return i;
	                        }
	                    });
	        } catch (DataAccessException e) {
	            log.error("Error executeUpdate:{}", e);
	            throw new HibernateDaoSupportException("Error executeUpdate (#"
	                    + this.getClass().getName() + "#):" + e);
	        }
	    }

	    /**
	     * group array to string like this (a,b,c)
	     * 
	     * @param params
	     *            array param
	     * @return String like this (a,b,c)
	     */
	    protected String groupInParam(String[] params) {
	        StringBuffer inParam = new StringBuffer();
	        inParam.append(" (");
	        for (int i = 0; i < params.length; i++) {
	            inParam.append(params[i]);
	            if (i != params.length - 1) {
	                inParam.append(",");
	            } else {
	                inParam.append(") ");
	            }
	        }
	        return inParam.toString();
	    }

	    /**
	     * convert special char
	     * 
	     * @param value
	     *            string which need to convert
	     * @return converted string
	     */
	    protected String convertSpecialChar(String value) {
	        String s = null;
	        if (value != null) {
	            s = value.replace("[", "\\\\[").replace("]", "\\\\]").replace("%",
	                    "\\\\%").replace("_", "\\\\_").replace("^", "\\\\^")
	                    .replace("\\", "").replace("'", "");
	        }
	        return s;
	    }

	    /**
	     * get count hql with select hql
	     * 
	     * @param hql
	     *            select hql
	     * @return count hql
	     */
	    protected String getCountHql(String hql) {
	        if (Validity.isEmpty(hql)) {
	            log.error("Error getHqlBean because hql is empty");
	            return "";
	        }

	        return "select count(*) "
	                + hql
	                        .substring(hql.indexOf("from"))
	                        .replace("fetch", "")
	                        .replaceAll(
	                                "\\s((?mi)(left|right|inner)?\\s+join)\\s+[^\\s]*Set\\b",
	                                " ").split("order by")[0];
	    }

	    /**
	     * set param in query
	     * 
	     * @param query
	     *            db query
	     * @param values
	     *            param value
	     */
	    private void setQueryParam(Query query, Object[] values) {
	        if (values != null) {
	            for (int i = 0; i < values.length; i++) {
	                query.setParameter(i, values[i]);
	            }
	        }
	    }

	    /**
	     * conver array to string
	     * 
	     * @param values
	     *            array value
	     * @return string value
	     */
	    private String converArrayToString(Object[] values) {
	        if (values == null) {
	            return "";
	        }
	        StringBuffer formatValues = new StringBuffer();
	        for (Object value : values) {
	            formatValues.append("{" + value + "}");
	        }
	        return formatValues.toString();
	    }

	    /**
	     * 
	     */
		@SuppressWarnings("unchecked")
		public List<T> queryListByHql( String hql, Class<T> clazz,final Map<String, Object> properties) throws HibernateDaoSupportException{
			if (hql == null) {
	            throw new HibernateDaoSupportException(
	                    "Param(#hql#) and param(#clazz#) is null");
	        }
	        if (clazz != null) {
	            hql = "FROM " + clazz.getName();
	        }
	        final String queryHql = hql;
	        try {
	            return getHibernateTemplate().executeFind(new HibernateCallback() {
	                public Object doInHibernate(Session session) {
	                    Query query = session.createQuery(queryHql);
	                    if (isCacheQueries) {
	                        query.setCacheable(true);
	                    } else {
	                        isCacheQueries = true;
	                        query.setCacheable(false);
	                    }
	                    if (!Validity.isEmpty(properties)) {
	                        query.setProperties(properties);
	                    }
	                    return query.list();
	                }
	            });
	        } catch (DataAccessException e) {
	            log.error("Error executing queryListByHql ({}):{}", hql, e);
	            throw new HibernateDaoSupportException(
	                    "Error executing queryListByHql (" + hql + "):" + e);
	        }
		}

		  /**
	     * 查询
	     * @param hql
	     * @param properties
	     * @return
	     * @throws HibernateDaoSupportException
	     */
		public List queryListByHql(String hql,final Map<String, Object> properties) throws HibernateDaoSupportException {
			if (hql == null) {
	            throw new HibernateDaoSupportException(
	                    "Param(#hql#) and param(#clazz#) is null");
	        }
	        final String queryHql = hql;
	        try {
	            return getHibernateTemplate().executeFind(new HibernateCallback() {
	                public Object doInHibernate(Session session) {
	                    Query query = session.createQuery(queryHql);
	                    if (isCacheQueries) {
	                        query.setCacheable(true);
	                    } else {
	                        isCacheQueries = true;
	                        query.setCacheable(false);
	                    }
	                    if (!Validity.isEmpty(properties)) {
	                        query.setProperties(properties);
	                    }
	                    return query.list();
	                }
	            });
	        } catch (DataAccessException e) {
	            log.error("Error executing queryListByHql ({}):{}", hql, e);
	            throw new HibernateDaoSupportException(
	                    "Error executing queryListByHql (" + hql + "):" + e);
	        }
	        
		}
	    
	



}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值