@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;
}
}
08-04
08-04
08-04