BaseDao

@SuppressWarnings("unchecked")
@Repository("baseDao")
public class BaseDaoImpl<T extends BaseModel, PK extends Serializable>
        implements IBaseDao<T, PK> {

    @PersistenceContext(unitName="jpa_persistence")
    protected EntityManager entityManager;

    /**
     * @return the entityManager
     */
    public EntityManager getEntityManager() {
        return entityManager;
    }

    /**
     * @param entityManager
     *            the entityManager to set
     */
    public void setEntityManager(EntityManager entityManager) {
        this.entityManager = entityManager;
    }

    /*
     * (non-Javadoc)
     * 
     */
    @Override
    public T getObjectById(Class<T> clazz, PK id) {
        return entityManager.find(clazz, id);
    }

    /*
     * (non-Javadoc)
     * 
     */
    @Override
    public void removeById(Class<T> clazz, PK id) {
        T obj = entityManager.find(clazz, id);
        entityManager.remove(obj);
    }

    /*
     * (non-Javadoc)
     * 
     */
    @Override
    public void removeByObject(T obj) {
        entityManager.remove(obj);
    }

    /*
     * (non-Javadoc)
     * 
     */
    @Override
    public void save(T obj) {
        if (obj.getCreateBy() == null) {
            obj.setCreateBy("");
        }
        if (obj.getUpdateBy() == null) {
            obj.setUpdateBy("");
        }
        obj.setCreateDate(new Date());
        obj.setUpdateDate(new Date());
        entityManager.persist(obj);
    }

    /*
     * (non-Javadoc)
     * 
     */
    @Override
    public void update(T obj) {
        if (obj.getUpdateBy() == null) {
            obj.setUpdateBy("");
        }
        obj.setUpdateDate(new Date());
        entityManager.merge(obj);
    }

    /*
     * (non-Javadoc)
     * 
     */
    @SuppressWarnings("static-access")
    @Override
    public Page queryPageByParams(Page page, String hql,
            Map<String, Object> params) {

        String countSQL = hql.substring(hql.indexOf("from"));
        int count = this.queryCount("select count(*)" + countSQL, params);
        Query query = entityManager.createQuery(hql);
        if (null != params) {
            for (String parameter : params.keySet()) {
                query.setParameter(parameter, params.get(parameter));
            }
        }
        int countPage = (count % page.getRows() == 0 ? count / page.getRows()
                : (count / page.getRows()) + 1);
        if (countPage < page.getCountPage()) {
            page.setPage(1);
        }
        query.setFirstResult((page.getPage() - 1) * page.getRows());
        query.setMaxResults(page.getRows());
        List<Object> list = query.getResultList();
        Page p = new Page(list, count, page.getPage(), page.getRows());
        p.setCountPage(count % page.getRows() == 0 ? count / page.getRows()
                : (count / page.getRows()) + 1);
        p.setOrderColumn(page.getOrderColumn());
        p.setSort(StringUtils.isBlank(page.getSort()) ? page.ORDER_SORT_DESC
                : page.getSort());
        return p;
    }

    /*
     * (non-Javadoc)
     * 
     */
    @Override
    public int queryCount(String hql, Map<String, Object> params) {
        Query query = entityManager.createQuery(hql);
        if (null != params) {
            for (String parameter : params.keySet()) {
                query.setParameter(parameter, params.get(parameter));
            }
        }
        try{
            Long countValue = Long.parseLong(query.getSingleResult().toString());
            int count = 0;
            if (null != countValue) {
                count = countValue.intValue();
            }
            return count;
        }catch(NoResultException e){
            return 0;
        }
    }

    /*
     * (non-Javadoc)
     * 
     */
    @Override
    public int updateObjectByMap(String hql, Map<String, Object> map) {
        Query query = entityManager.createQuery(hql);
        if (map != null) {
            for (String key : map.keySet()) {
                query.setParameter(key, map.get(key));
            }
            return query.executeUpdate();
        }
        entityManager.flush();
        return 0;
    }

    /*
     * (non-Javadoc)
     * 
     */
    @Override
    public List<T> getObjectListByMap(String hql, Map<String, Object> map) {
        Query query = entityManager.createQuery(hql);
        if (null != map) {
            for (String parameter : map.keySet()) {
                query.setParameter(parameter, map.get(parameter));
            }
        }
        List<T> list = query.getResultList();
        if (null != list && list.size() > 0) {
            return list;
        } else {
            return null;
        }
    }

    /*
     * (non-Javadoc)
     * 
     */
    public List<T> getObjectListByMapAndCacheName(String hql,
            Map<String, Object> map, String cacheName) {
        Query jpaQuery = entityManager.createQuery(hql);
        QueryImpl queryImpl = null;
        org.hibernate.Query hibernateQuery = null;
        List<T> list = null;
        if (null != map) {
            for (String parameter : map.keySet()) {
                jpaQuery.setParameter(parameter, map.get(parameter));
            }
        }
        if (jpaQuery instanceof QueryImpl) {
            queryImpl = ((QueryImpl) jpaQuery);
            hibernateQuery = queryImpl.getHibernateQuery();
            hibernateQuery.setCacheable(true);
            hibernateQuery.setCacheRegion(cacheName);
            list = hibernateQuery.list();
        } else {
            list = jpaQuery.getResultList();
        }
        if (null != list && list.size() > 0) {
            return list;
        } else {
            return null;
        }
    }

    /*
     * (non-Javadoc)
     * 
     */
    public String getSeqNo(String seq_name) {
        String sql = "select " + seq_name + ".nextval from dual";
        Query query = entityManager.createNativeQuery(sql);
        String sequence = query.getResultList().get(0).toString();
        int j = 3 - sequence.length();
        for (int i = 0; i < j; i++) {
            sequence = "0" + sequence;
        }
        return sequence;
    }

    @Override
    public String getSeqNoBySeqLength(String seqName, int seqLength) {
        String sql = "select " + seqName + ".nextval from dual";
        Query query = entityManager.createNativeQuery(sql);
        String sequence = query.getResultList().get(0).toString();
        int j = seqLength - sequence.length();
        for (int i = 0; i < j; i++) {
            sequence = "0" + sequence;
        }
        return sequence;
    }

    /*
     * (non-Javadoc)
     * 
     */
    @Override
    public void flush() {
        entityManager.flush();
    }

    @Override
    public List<Object[]> findBySQLNaitv(String sql) {
        Query query = entityManager.createNativeQuery(sql);
        List<Object[]> obj = query.getResultList();
        return obj;
    }

    @Override
    public List<Object[]> findBySQLNaitvWithMap(String sql,
            Map<String, Object> map) {
        Query query = entityManager.createNativeQuery(sql);
        if (null != map) {
            for (String parameter : map.keySet()) {
                query.setParameter(parameter, map.get(parameter));
            }
        }
        List<Object[]> obj = query.getResultList();
        return obj;
    }

    /**
     * 通过原生sql获取单列数据
     * 
     * @param sql
     * @return 返回集合
     */
    @Override
    public List<Object> findSingProBySQLNaitvWithMap(String sql,
            Map<String, Object> map) {
        Query query = entityManager.createNativeQuery(sql);
        if (null != map) {
            for (String parameter : map.keySet()) {
                query.setParameter(parameter, map.get(parameter));
            }
        }
        List<Object> obj = query.getResultList();
        return obj;
    }

    /**
     * 通过原生sql查记录总数,建议使用上面的hql方式分页
     * 
     * @Date : 2014年6月4日
     * @param sql
     * @param params
     * @return
     */
    public int querySQLNaitvWithCount(String sql, Map<String, Object> params) {
        Query query = entityManager.createNativeQuery(sql);
        if (null != params) {
            for (String parameter : params.keySet()) {
                query.setParameter(parameter, params.get(parameter));
            }
        }
        Long countValue = Long.parseLong(query.getSingleResult().toString());
        int count = 0;
        if (null != countValue) {
            count = countValue.intValue();
        }
        return count;
    }

    /**
     * 通过原生sql分页,建议使用上面的hql方式分页
     * 
     * @Date : 2014年6月4日
     * @param page
     * @param sql
     * @param params
     * @return
     */
    public Page querySQLNaitvWithPageByParams(Page page, String sql,
            Map<String, Object> params) {
        String countSQL = sql.substring(sql.indexOf("from"));
        int count = this.querySQLNaitvWithCount("select count(*)" + countSQL,
                params);
        Query query = entityManager.createNativeQuery(sql);
        if (null != params) {
            for (String parameter : params.keySet()) {
                query.setParameter(parameter, params.get(parameter));
            }
        }
        int countPage = (count % page.getRows() == 0 ? count / page.getRows()
                : (count / page.getRows()) + 1);
        if (countPage < page.getCountPage()) {
            page.setPage(1);
        }
        query.setFirstResult((page.getPage() - 1) * page.getRows());
        query.setMaxResults(page.getRows());
        List<Object> list = query.getResultList();
        Page p = new Page(list, count, page.getPage(), page.getRows());
        p.setCountPage(count % page.getRows() == 0 ? count / page.getRows()
                : (count / page.getRows()) + 1);
        p.setOrderColumn(page.getOrderColumn());
        p.setSort(StringUtils.isBlank(page.getSort()) ? page.ORDER_SORT_DESC
                : page.getSort());
        return p;
    }

    @Override
    public int updateNativeSQLByWithParams(String sql,
            Map<String, Object> params) {
        Query query = entityManager.createNativeQuery(sql);
        if (null != params) {
            for (String parameter : params.keySet()) {
                query.setParameter(parameter, params.get(parameter));
            }
        }
        int rowCount = query.executeUpdate();
        return rowCount;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值