国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Hibernate4與Spring4集成

104828720 / 853人閱讀

摘要:阿里數據庫連接池數據庫基本信息配置最大并發連接數初始化連接數量配置獲取連接等待超時的時間最小空閑連接數配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位

1、web.xml


        openSessionInViewFilter
           org.springframework.orm.hibernate4.support.OpenSessionInViewFilter
    
    
        openSessionInViewFilter
        /*
    

2、applicationContext.xml

       
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        

        
    

    
   
        
          
        
        
             
                 org.hibernate.dialect.MySQL5InnoDBDialect
                 true
                 true
                 update
                   
                50  
                  
                50    
                
                org.hibernate.cfg.ImprovedNamingStrategy
                org.springframework.orm.hibernate4.SpringSessionContext
                
                true
             
         
    

    
        
    
    
        
            
              
            
            
            
            
            
        
    
    
    
        
        
    
    
    

3、BaseDao

package net.xby1993.common.dao;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import net.xby1993.common.util.StringUtil;

import org.hibernate.Criteria;
import org.hibernate.LockMode;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.metadata.ClassMetadata;
import org.springframework.orm.hibernate4.support.HibernateDaoSupport;

@SuppressWarnings("unchecked")
public class BaseDao extends HibernateDaoSupport implements DAO{
    // 存儲泛型的實際參數
    private Class clazz;

    
    public BaseDao() {
        // 誰實現該類,這就是誰的類字節碼
        Class c = this.getClass();
        // 返回表示此 Class 所表示的實體(類、接口、基本類型或 void)的直接超類的 Type
        Type type = c.getGenericSuperclass();
        // 將類型強轉為參數化類型
        ParameterizedType pType = (ParameterizedType) type;
        // 獲取該類的父類的所有實際類型參數,也就是泛型的實際參數
        // 這里也就是獲取BaseDaoImpl的實際類型參數
        Type[] actualTypeArguments = pType.getActualTypeArguments();
        // 將實際類型參數賦值給成員變量
        clazz = (Class) (actualTypeArguments[0]);
    }

    @Resource(name = "sessionFactory")
    public void setMySessionFactory(SessionFactory sessionFactory) {
        super.setSessionFactory(sessionFactory);
    }

    /*@Override
    public Serializable save(T entity) {
        return this.getHibernateTemplate().save(entity);
    }*/

    @Override
    public void update(T entity) {
        this.getHibernateTemplate().update(entity);
    }
    @Override
    public int bulkUpdateByHQL(String queryString,Object... values) {
        return getHibernateTemplate().bulkUpdate(queryString,values);
    }
    @Override
    public void saveOrUpdate(T entity) {
        this.getHibernateTemplate().saveOrUpdate(entity);
    }

    @Override
    public void delete(T entity) {
        this.getHibernateTemplate().delete(entity);
    }
    @Override
    public void deleteByKey(Serializable id) {
        this.delete(this.load(id));
    }
    @Override
    public void deleteAll(Collection entities) {
        getHibernateTemplate().deleteAll(entities);
    }
    @Override
    public T findById(Serializable oid) {
        return (T) this.getHibernateTemplate().get(this.clazz, oid);
    }
    @Override
    public T load(Serializable id) {
        T load = (T) this.getSession().load(clazz, id);
        return load;
    }
    @Override
    public List findByHQL(String queryString,Object... values){
        return (List) getHibernateTemplate().find(queryString, values);
    }
    @Override
    public void executeSql(String sqlString, Object... values) {
        Query query = this.getSession().createSQLQuery(sqlString);
        if (values != null)
        {
            for (int i = 0; i < values.length; i++)
            {
                query.setParameter(i, values[i]);
            }
        }
        query.executeUpdate();
    }
    @Override
    public List findBySql(String sqlString, Object... values) {
        SQLQuery query = this.getSession().createSQLQuery(sqlString);
        if (values != null)
        {
            for (int i = 0; i < values.length; i++)
            {
                query.setParameter(i, values[i]);
            }
        }
        query.addEntity(clazz);
        return query.list();
    }
    @Override
    public  T findUniqueBySql(String sqlString, Object... values) {
        SQLQuery query = this.getSession().createSQLQuery(sqlString);
        if (values != null)
        {
            for (int i = 0; i < values.length; i++)
            {
                query.setParameter(i, values[i]);
            }
        }
        query.addEntity(clazz);
        return (T) query.uniqueResult();
    }
    @Override
    public T findUniqueByHQL(String queryString, Object... values){
        Query query = this.getSession().createQuery(queryString);
        if (values != null)
        {
            for (int i = 0; i < values.length; i++)
            {
                query.setParameter(i, values[i]);
            }
        }
        return (T) query.uniqueResult();
    }
    @Override
    public List findByHQL(String queryString, String[] paramNames, Object[] values){
        return (List) getHibernateTemplate().findByNamedParam(queryString, paramNames, values);
    }
    @Override
    public T findUniqueByHQL(String queryString, String[] paramNames, Object[] values){
        Query query = this.getSession().createQuery(queryString);
        if (values != null)
        {
            for (int i = 0; i < values.length; i++)
            {
                query.setParameter(paramNames[i], values[i]);
            }
        }
        return (T) query.uniqueResult();
    }
    @Override
    public List findByNamedQuery(String queryName, Object... values) {
        return (List) getHibernateTemplate().findByNamedQuery(queryName, values);
    }
    @Override
    public List findByNamedQuery(String queryName, String[] paramNames, Object[] values){
        return (List) getHibernateTemplate().findByNamedQueryAndNamedParam(queryName,paramNames, values);
    }
    @Override
    public Iterator iterate(String queryString,Object... values){
        return (Iterator) getHibernateTemplate().iterate(queryString, values);
    }
    @Override
    public void closeIterator(Iterator it) {
        getHibernateTemplate().closeIterator(it);
    }
    @Override
    public List findAll() {
        return (List) this.getHibernateTemplate().find("from " + this.clazz.getSimpleName());
    }
    @Override
    public List loadAll() {
        return (List) getHibernateTemplate().loadAll(clazz);
    }
    
    @Override
    public Integer getRowCount(DetachedCriteria detachedCriteria) {
        // 設置記錄數投影
        detachedCriteria.setProjection(Projections.rowCount());
        List list = (List) this.getHibernateTemplate().findByCriteria(detachedCriteria);
        // 將投影置為空
        detachedCriteria.setProjection(null);
        if (list.size() > 0) {
            return list.get(0).intValue();
        }
        return null;
    }

    @Override
    public List findByPage(DetachedCriteria detachedCriteria,List orders, int pageNo, int pageSize) {
        if(orders!=null){
            for(Order order:orders){
                detachedCriteria.addOrder(order);
            }
        }
        // 指定hibernate在連接查詢時,只封裝成一個對象
        detachedCriteria.setResultTransformer(DetachedCriteria.ROOT_ENTITY);
        pageNo=pageNo<1?1:pageNo;
        int startIndex=(pageNo-1)*pageSize;
        return (List) this.getHibernateTemplate().findByCriteria(detachedCriteria, startIndex, pageSize);
    }
    @Override
    public Page findPageForResults(DetachedCriteria criteria,List orders,
            int pageNo, int pageSize){
        if(orders!=null){
            for(Order order:orders){
                criteria.addOrder(order);
            }
        }
        pageNo=pageNo<1?1:pageNo;
        int startIndex=(pageNo-1)*pageSize;
        criteria.setProjection (Projections.rowCount());// 設置查詢的結果是總數
        long totalRows = ((Number) getHibernateTemplate().findByCriteria (criteria).get(0 )).longValue();
        criteria.setProjection ( null );//設置為 null這樣查詢的 結果就不是總數了
      //criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
        criteria.setResultTransformer (Criteria.ROOT_ENTITY ); //使用了關聯類查詢要設置這個,不然返回的是 object【】類型
        List list=(List) getHibernateTemplate().findByCriteria(criteria, startIndex, pageNo);
        Page results=new Page<>();
        results.setPageNo(pageNo);
        results.setPageSize(pageSize);
        results.setPageCount(results.getTotalPages());
        results.setTotalCount(totalRows);
        results.setResults(list);
        return results;
    }
    
    @Override
    public List findByCriteria(DetachedCriteria detachedCriteria) {
        return (List) this.getHibernateTemplate().findByCriteria(detachedCriteria);
    }
    @Override
    public DetachedCriteria createDetachedCriteria() {
        return DetachedCriteria.forClass(clazz);
    }
    @Override
    public Criteria createCriteria() {
        return this.getSession().createCriteria(clazz);
    }
    @Override
    public List findByProperty(String propertyName,Object value) {  
        String queryString = "from "+clazz.getName()+ " as model where model." + propertyName + "=?";     
        return (List) getHibernateTemplate().find(queryString, value);  
    } 
    @Override
    public T findUniqueByProperty(String propertyName,Object value){
        String queryString = "select model from "+clazz.getName()+ " as model where model." + propertyName + "=?";     
        return (T) getSession().createQuery(queryString).uniqueResult(); 
    }
    @Override
    public List findByExample(T entity) {  
        return getHibernateTemplate().findByExample(entity);  
    }  
    @Override
    public Object getStatValue(DetachedCriteria criteria, String propertyName,
            String StatName) {
        if (StatName.toLowerCase().equals("max"))
            criteria.setProjection(Projections.max(propertyName));
        else if (StatName.toLowerCase().equals("min"))
            criteria.setProjection(Projections.min(propertyName));
        else if (StatName.toLowerCase().equals("avg"))
            criteria.setProjection(Projections.avg(propertyName));
        else if (StatName.toLowerCase().equals("sum"))
            criteria.setProjection(Projections.sum(propertyName));
        else
            return null;
        List list = getHibernateTemplate().findByCriteria(criteria);
        criteria.setProjection(null);
        return list.get(0);
    }
    public void lock(T entity, LockMode lock) {
        getHibernateTemplate().lock(entity, lock);
    }
    @Override
    public void initialize(T proxy) {
        getHibernateTemplate().initialize(proxy);
    }
    @Override
    public void flush() {
        getHibernateTemplate().flush();
    }
    
    @Override
    public Session getSession(){
        return this.getSessionFactory().getCurrentSession();
    }

    /**
     * 取得對象的主鍵名.
     */
    public String getIdName() {
        ClassMetadata meta = getSessionFactory().getClassMetadata(clazz);
        return meta.getIdentifierPropertyName();
    }
    /**
     * 根據查詢HQL與參數列表創建Query對象.
     * 
     * 本類封裝的find()函數全部默認返回對象類型為T,當不為T時使用本函數.
     * 
     * @param values 數量可變的參數,按順序綁定.
     */
    public Query createQuery(final String queryString, final Object... values) {
        Query query = getSession().createQuery(queryString);
        if (values != null) {
            for (int i = 0; i < values.length; i++) {
                query.setParameter(i, values[i]);
            }
        }
        return query;
    }
    /**
     * 根據查詢HQL與參數列表創建Query對象.
     * 
     * @param values 命名參數,按名稱綁定.
     */
    public Query createQuery(final String queryString, final Map values) {
        Query query = getSession().createQuery(queryString);
        if (values != null) {
            query.setProperties(values);
        }
        return query;
    }
    /**
     * 按HQL分頁查詢.
     * 
     * @param page 分頁參數.不支持其中的orderBy參數.
     * @param hql hql語句.
     * @param pageNo 當前頁數.
     * @param pageSize 總頁數.
     * @param values 數量可變的查詢參數,按順序綁定.
     * @return 分頁查詢結果, 附帶結果列表及所有查詢時的參數.
     */
    public Page findPage(final String hql,int pageNo,int pageSize, final Object... values) {
        

        Query q = createQuery(hql, values);

        Page page = new Page();
        
        page.setPageNo(pageNo);
        long totalCount = countHqlResult(hql, values);
        page.setTotalCount(totalCount);
        int start = ((pageNo - 1) * pageSize);
        q.setFirstResult(start);
        q.setMaxResults(pageSize);

        List result = q.list();
        page.setResults(result);
        page.setPageNo(pageNo);
        page.setPageSize(pageSize);
        page.setPageCount(page.getTotalPages());
        return page;
    }

    /**
     * 按HQL分頁查詢.
     * 
     * @param page 分頁參數.
     * @param hql hql語句.
     * @param values 命名參數,按名稱綁定.
     * @param pageNo 當前頁數.
     * @param pageSize 總頁數.
     * @return 分頁查詢結果, 附帶結果列表及所有查詢時的參數.
     */
    public Page findPage(final String hql,int pageNo,int pageSize, final Map values) {
        Query q = createQuery(hql, values);
        Page page = new Page();
        
        page.setPageNo(pageNo);
        long totalCount = countHqlResult(hql, values);
        page.setTotalCount(totalCount);
        
        List result = q.list();
        page.setResults(result);
        
        page.setPageNo(pageNo);
        page.setPageSize(pageSize);
        page.setPageCount(page.getTotalPages());
        return page;
    }
    /**
     * 執行count查詢獲得本次Hql查詢所能獲得的對象總數.
     * 
     * 本函數只能自動處理簡單的hql語句,復雜的hql查詢請另行編寫count語句查詢.
     */
    protected long countHqlResult(final String hql, final Object... values) {
        String fromHql = hql;
        //select子句與order by子句會影響count查詢,進行簡單的排除.
        fromHql = "from " + StringUtil.substringAfter(fromHql, "from");
        fromHql = StringUtil.substringBefore(fromHql, "order by");

        String countHql = "select count(1) " + fromHql;

        try {
            Long count = (Long) createQuery(countHql, values).uniqueResult();
            return count;
        } catch (Exception e) {
            throw new RuntimeException("hql can"t be auto count, hql is:" + countHql, e);
        }
    }
    /**
     * 執行count查詢獲得本次Hql查詢所能獲得的對象總數.
     * 
     * 本函數只能自動處理簡單的hql語句,復雜的hql查詢請另行編寫count語句查詢.
     */
    protected long countHqlResult(final String hql, final Map values) {
        String fromHql = hql;
        //select子句與order by子句會影響count查詢,進行簡單的排除.
        fromHql = "from " + StringUtil.substringAfter(fromHql, "from");
        fromHql = StringUtil.substringBefore(fromHql, "order by");

        String countHql = "select count(1) " + fromHql;

        try {
            Long count = (Long) createQuery(countHql, values).uniqueResult();
            return count;
        } catch (Exception e) {
            throw new RuntimeException("hql can"t be auto count, hql is:" + countHql, e);
        }
    }
    /**
     * 根據搜索條件查詢前幾條記錄
     * @param criterions 數量可變的Criterion
     * @param orders 數量可變的Order
     * @param topCount 前幾條記錄
     * @param aliasNames 別名,用于多表關聯查詢
     * @return 列表集合
     */
    public List findTopList(final List criterions,final String[] aliasNames,final List orders, final int topCount)
    {
        Criteria c = createCriteria(criterions,orders,aliasNames);

        c.setFirstResult(0);
        c.setMaxResults(topCount);

        List result = c.list();
        return result;
    }
    /**
     * 根據Criterion條件創建Criteria.
     * 
     * 本類封裝的find()函數全部默認返回對象類型為T,當不為T時使用本函數.
     * 
     * @param criterions 數量可變的Criterion.
     */
    private Criteria createCriteria(final List criterions,final List orders,final String[] aliasNames) {
        Criteria criteria = getSession().createCriteria(clazz);
        
        if(criterions!=null)
        {
            for (Criterion c : criterions) {
                criteria.add(c);
            }
        }
        if(aliasNames!=null)
        {
            for (String alias : aliasNames) 
            {
                String alias2 = alias;
                if(alias.indexOf(".")>0)
                {
                    int size = alias.split(".").length;
                    alias2 = alias.split(".")[size-1];
                    
                }
                
                criteria.createAlias(alias, alias2,Criteria.LEFT_JOIN);
                
            }
        }
        if(orders!=null)
        {
            for (Order order : orders) 
            {
                criteria.addOrder(order);
            }
        }
        else
        {
            criteria.addOrder(Order.desc("insertTime"));
        }
        
    
        return criteria;
    }
}

4、BaseEntity

package net.xby1993.common.dao;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.UpdateTimestamp;

/**
 * 實體基類
 * @author xby taojw
 *
 */
@MappedSuperclass
public abstract  class BaseEntity implements Serializable{
    protected String id;
    protected Date insertTime;
    protected Date updateTime;
    
    @Temporal(TemporalType.TIMESTAMP)
    @Column(updatable = false)  
    @CreationTimestamp
    public Date getInsertTime() {
        return insertTime;
    }
    public void setInsertTime(Date insertTime) {
        this.insertTime = insertTime;
    }
    @UpdateTimestamp
    @Temporal(TemporalType.TIMESTAMP)
    public Date getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
    @Id
    @GeneratedValue(generator = "system-uuid")
    @GenericGenerator(name = "system-uuid", strategy = "uuid")
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
}

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/69905.html

相關文章

  • 簡單基于spring的redis配置(單機和集群模式)

    摘要:優點是反序列化時不需要提供類型信息,但缺點是序列化后的結果非常龐大,是格式的倍左右,這樣就會消耗服務器的大量內存。使用庫將對象序列化為字符串。優點是速度快,序列化后的字符串短小精悍。 需要的jar包:spring版本:4.3.6.RELEASE,jedis版本:2.9.0,spring-data-redis:1.8.0.RELEASE;如果使用jackson序列化的話還額外需要:jac...

    Tychio 評論0 收藏0
  • 做IT這幾年,我整理了這些干貨想要送給你!

    摘要:資源獲取方式根據下面的索引,大家可以選擇自己需要的資源,然后在松哥公眾號牧碼小子后臺回復對應的口令,就可以獲取到資源的百度云盤下載地址。公眾號二維碼如下另外本文會定期更新,松哥有新資源的時候會及時分享給大家,歡迎各位小伙伴保持關注。 沒有一條路是容易的,特別是轉行計算機這條路。 松哥接觸過很多轉行做開發的小伙伴,我了解到很多轉行人的不容易,記得松哥大二時剛剛決定轉行計算機,完全不知道這...

    王晗 評論0 收藏0
  • Spring AOP就是這么簡單啦

    摘要:是一種特殊的增強切面切面由切點和增強通知組成,它既包括了橫切邏輯的定義也包括了連接點的定義。實際上,一個的實現被拆分到多個類中在中聲明切面我們知道注解很方便,但是,要想使用注解的方式使用就必須要有源碼因為我們要 前言 只有光頭才能變強 上一篇已經講解了Spring IOC知識點一網打盡!,這篇主要是講解Spring的AOP模塊~ 之前我已經寫過一篇關于AOP的文章了,那篇把比較重要的知...

    Jacendfeng 評論0 收藏0
  • Java后端

    摘要:,面向切面編程,中最主要的是用于事務方面的使用。目標達成后還會有去構建微服務,希望大家多多支持。原文地址手把手教程優雅的應用四手把手實現后端搭建第四期 SpringMVC 干貨系列:從零搭建 SpringMVC+mybatis(四):Spring 兩大核心之 AOP 學習 | 掘金技術征文 原本地址:SpringMVC 干貨系列:從零搭建 SpringMVC+mybatis(四):Sp...

    joyvw 評論0 收藏0

發表評論

0條評論

104828720

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<