BaseDao

来源:互联网 发布:淘宝直播能赚多少钱 编辑:程序博客网 时间:2024/06/04 18:04
@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
原创粉丝点击