|
@@ -14,12 +14,15 @@
|
|
|
package com.primeton.dams.utils.template.impl;
|
|
package com.primeton.dams.utils.template.impl;
|
|
|
|
|
|
|
|
import com.primeton.dams.utils.template.CoreSQLParser;
|
|
import com.primeton.dams.utils.template.CoreSQLParser;
|
|
|
|
|
+import com.primeton.dams.utils.template.DOResultTransformer;
|
|
|
import com.primeton.dams.utils.template.HibernateStatementSessionFactoryBean;
|
|
import com.primeton.dams.utils.template.HibernateStatementSessionFactoryBean;
|
|
|
import com.primeton.dams.utils.template.IDAOService;
|
|
import com.primeton.dams.utils.template.IDAOService;
|
|
|
import com.primeton.dams.utils.template.Page;
|
|
import com.primeton.dams.utils.template.Page;
|
|
|
|
|
+import lombok.NonNull;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
import org.hibernate.SQLQuery;
|
|
import org.hibernate.SQLQuery;
|
|
|
|
|
+import org.hibernate.internal.QueryImpl;
|
|
|
import org.hibernate.transform.ResultTransformer;
|
|
import org.hibernate.transform.ResultTransformer;
|
|
|
import org.hibernate.transform.Transformers;
|
|
import org.hibernate.transform.Transformers;
|
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.Logger;
|
|
@@ -179,8 +182,8 @@ public class DAOServiceImpl implements IDAOService {
|
|
|
@Override
|
|
@Override
|
|
|
public int execute(String updateSql, Object[] params) {
|
|
public int execute(String updateSql, Object[] params) {
|
|
|
final javax.persistence.Query nativeQuery = entityManager.createNativeQuery(updateSql);
|
|
final javax.persistence.Query nativeQuery = entityManager.createNativeQuery(updateSql);
|
|
|
- for (int i = 0; params != null && i < params.length; i++) {
|
|
|
|
|
- nativeQuery.setParameter(i, params[i]);
|
|
|
|
|
|
|
+ for (int i=1; params!=null && i<params.length+1; i++) {
|
|
|
|
|
+ nativeQuery.setParameter(i, params[i-1]);
|
|
|
}
|
|
}
|
|
|
return nativeQuery.executeUpdate();
|
|
return nativeQuery.executeUpdate();
|
|
|
}
|
|
}
|
|
@@ -216,8 +219,8 @@ public class DAOServiceImpl implements IDAOService {
|
|
|
*/
|
|
*/
|
|
|
@Override
|
|
@Override
|
|
|
public List query(javax.persistence.Query query, Object[] params, ResultTransformer rt, final int firstResult, final int maxResult) {
|
|
public List query(javax.persistence.Query query, Object[] params, ResultTransformer rt, final int firstResult, final int maxResult) {
|
|
|
- for (int i=0; params!=null && i<params.length; i++) {
|
|
|
|
|
- query.setParameter(i, params[i]);
|
|
|
|
|
|
|
+ for (int i=1; params!=null && i<params.length+1; i++) {
|
|
|
|
|
+ query.setParameter(i, params[i-1]);
|
|
|
}
|
|
}
|
|
|
query.setMaxResults(maxResult);
|
|
query.setMaxResults(maxResult);
|
|
|
query.setFirstResult(firstResult);
|
|
query.setFirstResult(firstResult);
|
|
@@ -233,8 +236,8 @@ public class DAOServiceImpl implements IDAOService {
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public List query(javax.persistence.Query query, Object[] params, ResultTransformer rt) {
|
|
public List query(javax.persistence.Query query, Object[] params, ResultTransformer rt) {
|
|
|
- for (int i=0; params!=null && i<params.length; i++) {
|
|
|
|
|
- query.setParameter(i, params[i]);
|
|
|
|
|
|
|
+ for (int i=1; params!=null && i<params.length+1; i++) {
|
|
|
|
|
+ query.setParameter(i, params[i-1]);
|
|
|
}
|
|
}
|
|
|
if (rt == null) {
|
|
if (rt == null) {
|
|
|
query.unwrap(org.hibernate.SQLQuery.class)
|
|
query.unwrap(org.hibernate.SQLQuery.class)
|
|
@@ -266,10 +269,13 @@ public class DAOServiceImpl implements IDAOService {
|
|
|
throw new IllegalArgumentException("undefined statement id: " + id);
|
|
throw new IllegalArgumentException("undefined statement id: " + id);
|
|
|
}
|
|
}
|
|
|
final Object[] sqlParams = (params == null ? null : getParam(id, params));
|
|
final Object[] sqlParams = (params == null ? null : getParam(id, params));
|
|
|
- final Query nativeQuery = entityClass == null ? entityManager.createNativeQuery(sql) : entityManager.createNativeQuery(sql, entityClass);
|
|
|
|
|
|
|
+ final Query nativeQuery = entityManager.createNativeQuery(sql);
|
|
|
if (entityClass == null) {
|
|
if (entityClass == null) {
|
|
|
nativeQuery.unwrap(org.hibernate.SQLQuery.class)
|
|
nativeQuery.unwrap(org.hibernate.SQLQuery.class)
|
|
|
.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
|
|
.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ nativeQuery.unwrap(org.hibernate.SQLQuery.class)
|
|
|
|
|
+ .setResultTransformer(new DOResultTransformer(entityClass));
|
|
|
}
|
|
}
|
|
|
return query(nativeQuery, sqlParams, entityClass, null, null);
|
|
return query(nativeQuery, sqlParams, entityClass, null, null);
|
|
|
}
|
|
}
|
|
@@ -290,18 +296,21 @@ public class DAOServiceImpl implements IDAOService {
|
|
|
throw new IllegalArgumentException("undefined statement id: " + id);
|
|
throw new IllegalArgumentException("undefined statement id: " + id);
|
|
|
}
|
|
}
|
|
|
final Object[] sqlParams = (params == null ? null : getParam(id, params));
|
|
final Object[] sqlParams = (params == null ? null : getParam(id, params));
|
|
|
- final Query nativeQuery = entityClass == null ? entityManager.createNativeQuery(sql) : entityManager.createNativeQuery(sql, entityClass);
|
|
|
|
|
|
|
+ final Query nativeQuery = entityManager.createNativeQuery(sql);
|
|
|
if (entityClass == null) {
|
|
if (entityClass == null) {
|
|
|
nativeQuery.unwrap(org.hibernate.SQLQuery.class)
|
|
nativeQuery.unwrap(org.hibernate.SQLQuery.class)
|
|
|
.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
|
|
.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ nativeQuery.unwrap(org.hibernate.SQLQuery.class)
|
|
|
|
|
+ .setResultTransformer(new DOResultTransformer(entityClass));
|
|
|
}
|
|
}
|
|
|
return query(nativeQuery, sqlParams, entityClass, firstResult, maxResult);
|
|
return query(nativeQuery, sqlParams, entityClass, firstResult, maxResult);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
private List query(javax.persistence.Query query, Object[] params, Class entityClass, final Integer firstResult, final Integer maxResult) {
|
|
private List query(javax.persistence.Query query, Object[] params, Class entityClass, final Integer firstResult, final Integer maxResult) {
|
|
|
- for (int i = 0; params != null && i < params.length; i++) {
|
|
|
|
|
- query.setParameter(i, params[i]);
|
|
|
|
|
|
|
+ for (int i=1; params!=null && i<params.length+1; i++) {
|
|
|
|
|
+ query.setParameter(i, params[i-1]);
|
|
|
}
|
|
}
|
|
|
if (firstResult != null) {
|
|
if (firstResult != null) {
|
|
|
query.setFirstResult(firstResult);
|
|
query.setFirstResult(firstResult);
|
|
@@ -331,8 +340,8 @@ public class DAOServiceImpl implements IDAOService {
|
|
|
@Override
|
|
@Override
|
|
|
public List queryForMap(String sql, Object[] params, int firstResult, int maxResult) {
|
|
public List queryForMap(String sql, Object[] params, int firstResult, int maxResult) {
|
|
|
final javax.persistence.Query query1 = entityManager.createNativeQuery(sql);
|
|
final javax.persistence.Query query1 = entityManager.createNativeQuery(sql);
|
|
|
- for (int i = 0; params != null && i < params.length; i++) {
|
|
|
|
|
- query1.setParameter(i, params[i]);
|
|
|
|
|
|
|
+ for (int i=1; params!=null && i<params.length+1; i++) {
|
|
|
|
|
+ query1.setParameter(i, params[i-1]);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
query1.setFirstResult(firstResult);
|
|
query1.setFirstResult(firstResult);
|
|
@@ -343,8 +352,8 @@ public class DAOServiceImpl implements IDAOService {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private List queryForEntity(javax.persistence.Query query, Object[] params, Class entityClass) {
|
|
private List queryForEntity(javax.persistence.Query query, Object[] params, Class entityClass) {
|
|
|
- for (int i = 0; params != null && i < params.length; i++) {
|
|
|
|
|
- query.setParameter(i, params[i]);
|
|
|
|
|
|
|
+ for (int i=1; params!=null && i<params.length+1; i++) {
|
|
|
|
|
+ query.setParameter(i, params[i-1]);
|
|
|
}
|
|
}
|
|
|
return query.getResultList();
|
|
return query.getResultList();
|
|
|
}
|
|
}
|
|
@@ -352,20 +361,25 @@ public class DAOServiceImpl implements IDAOService {
|
|
|
@Override
|
|
@Override
|
|
|
public List queryForEntity(String sql, Class entityClass) {
|
|
public List queryForEntity(String sql, Class entityClass) {
|
|
|
final javax.persistence.Query query1 = entityManager.createQuery(sql, entityClass);
|
|
final javax.persistence.Query query1 = entityManager.createQuery(sql, entityClass);
|
|
|
|
|
+ query1.unwrap(QueryImpl.class)
|
|
|
|
|
+ .setResultTransformer(new DOResultTransformer(entityClass));
|
|
|
return query1.getResultList();
|
|
return query1.getResultList();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public List queryForEntity(String sql, Object[] params, Class entityClass) {
|
|
public List queryForEntity(String sql, Object[] params, Class entityClass) {
|
|
|
- final javax.persistence.Query query1 = entityManager.createQuery(sql, entityClass);
|
|
|
|
|
|
|
+ final javax.persistence.Query query1 = entityManager.createQuery(sql);
|
|
|
|
|
+ query1.unwrap(QueryImpl.class)
|
|
|
|
|
+ .setResultTransformer(new DOResultTransformer(entityClass));
|
|
|
return this.queryForEntity(query1, params, entityClass);
|
|
return this.queryForEntity(query1, params, entityClass);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public List queryForEntity(String sql, Object[] params,
|
|
public List queryForEntity(String sql, Object[] params,
|
|
|
Class entityClass, int firstResult, int maxResult) {
|
|
Class entityClass, int firstResult, int maxResult) {
|
|
|
- final javax.persistence.Query query1 = entityManager.createQuery(sql, entityClass);
|
|
|
|
|
- SQLQuery query = query1.unwrap(SQLQuery.class);
|
|
|
|
|
|
|
+ final javax.persistence.Query query1 = entityManager.createQuery(sql);
|
|
|
|
|
+ QueryImpl query = query1.unwrap(QueryImpl.class);
|
|
|
|
|
+ query.setResultTransformer(new DOResultTransformer(entityClass));
|
|
|
query.setMaxResults(maxResult).setFirstResult(firstResult);
|
|
query.setMaxResults(maxResult).setFirstResult(firstResult);
|
|
|
return this.queryForEntity(query1, params, entityClass);
|
|
return this.queryForEntity(query1, params, entityClass);
|
|
|
}
|
|
}
|
|
@@ -378,11 +392,13 @@ public class DAOServiceImpl implements IDAOService {
|
|
|
* @param <T>
|
|
* @param <T>
|
|
|
* @return
|
|
* @return
|
|
|
*/
|
|
*/
|
|
|
- public <T> T queryForObject(String sql, Object[] params, Class<T> entityClass) {
|
|
|
|
|
- final javax.persistence.Query query1 = entityManager.createQuery(sql, entityClass);
|
|
|
|
|
- for (int i = 0; params != null && i < params.length; i++) {
|
|
|
|
|
- query1.setParameter(i, params[i]);
|
|
|
|
|
|
|
+ public <T> T queryForObject(String sql, Object[] params, @NonNull Class<T> entityClass) {
|
|
|
|
|
+ final javax.persistence.Query query1 = entityManager.createNativeQuery(sql);
|
|
|
|
|
+ for (int i=1; params!=null && i<params.length+1; i++) {
|
|
|
|
|
+ query1.setParameter(i, params[i-1]);
|
|
|
}
|
|
}
|
|
|
|
|
+ query1.unwrap(org.hibernate.SQLQuery.class)
|
|
|
|
|
+ .setResultTransformer(new DOResultTransformer(entityClass));
|
|
|
try {
|
|
try {
|
|
|
return (T) query1.getSingleResult();
|
|
return (T) query1.getSingleResult();
|
|
|
} catch (NoResultException e) {
|
|
} catch (NoResultException e) {
|
|
@@ -395,17 +411,8 @@ public class DAOServiceImpl implements IDAOService {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
- public Long queryForLong(String sql) {
|
|
|
|
|
- return this.queryForLong(sql, null);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- @Override
|
|
|
|
|
- public Long queryForLong(String sql, Object[] params) {
|
|
|
|
|
- List list = this.querySQL(sql, params);
|
|
|
|
|
- if (list != null && list.size() > 0 && list.get(0) != null) {
|
|
|
|
|
- return new Long(((Number)list.get(0)).longValue());
|
|
|
|
|
- }
|
|
|
|
|
- return null;
|
|
|
|
|
|
|
+ public long queryForLong(String sql, Object[] params) {
|
|
|
|
|
+ return countSQL(sql, params);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -417,8 +424,8 @@ public class DAOServiceImpl implements IDAOService {
|
|
|
final Object[] sqlParams = (params == null ? null : getParam(id, params));
|
|
final Object[] sqlParams = (params == null ? null : getParam(id, params));
|
|
|
SQLQuery query = entityManager.createNativeQuery(sql).unwrap(SQLQuery.class);
|
|
SQLQuery query = entityManager.createNativeQuery(sql).unwrap(SQLQuery.class);
|
|
|
if (sqlParams != null && sqlParams.length > 0) {
|
|
if (sqlParams != null && sqlParams.length > 0) {
|
|
|
- for (int i = 0; i < sqlParams.length; i++) {
|
|
|
|
|
- query.setParameter(i, sqlParams[i]);
|
|
|
|
|
|
|
+ for (int i=1; i<sqlParams.length+1; i++) {
|
|
|
|
|
+ query.setParameter(i, sqlParams[i-1]);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
return query.executeUpdate();
|
|
return query.executeUpdate();
|
|
@@ -431,8 +438,8 @@ public class DAOServiceImpl implements IDAOService {
|
|
|
}
|
|
}
|
|
|
SQLQuery query = entityManager.createNativeQuery(sql).unwrap(SQLQuery.class);
|
|
SQLQuery query = entityManager.createNativeQuery(sql).unwrap(SQLQuery.class);
|
|
|
if (params != null && params.length > 0) {
|
|
if (params != null && params.length > 0) {
|
|
|
- for (int i = 0; i < params.length; i++) {
|
|
|
|
|
- query.setParameter(i, params[i]);
|
|
|
|
|
|
|
+ for (int i=1; i<params.length+1; i++) {
|
|
|
|
|
+ query.setParameter(i, params[i-1]);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
return query.executeUpdate();
|
|
return query.executeUpdate();
|
|
@@ -450,8 +457,8 @@ public class DAOServiceImpl implements IDAOService {
|
|
|
@Override
|
|
@Override
|
|
|
public List queryPageList(String sql, Object[] params, Page page) {
|
|
public List queryPageList(String sql, Object[] params, Page page) {
|
|
|
SQLQuery query = entityManager.createNativeQuery(sql).unwrap(SQLQuery.class);
|
|
SQLQuery query = entityManager.createNativeQuery(sql).unwrap(SQLQuery.class);
|
|
|
- for (int i = 0; params != null && i < params.length; i++) {
|
|
|
|
|
- query.setParameter(i, params[i]);
|
|
|
|
|
|
|
+ for (int i=1; params!=null && i<params.length+1; i++) {
|
|
|
|
|
+ query.setParameter(i, params[i-1]);
|
|
|
}
|
|
}
|
|
|
int totalCount = this.countSQL(sql, params);
|
|
int totalCount = this.countSQL(sql, params);
|
|
|
query.setMaxResults(page.getPageSize());
|
|
query.setMaxResults(page.getPageSize());
|
|
@@ -473,6 +480,7 @@ public class DAOServiceImpl implements IDAOService {
|
|
|
if (totalCount > 0) {
|
|
if (totalCount > 0) {
|
|
|
final javax.persistence.Query nativeQuery = entityManager.createNativeQuery(sql);
|
|
final javax.persistence.Query nativeQuery = entityManager.createNativeQuery(sql);
|
|
|
SQLQuery query = nativeQuery.unwrap(SQLQuery.class);
|
|
SQLQuery query = nativeQuery.unwrap(SQLQuery.class);
|
|
|
|
|
+ query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
|
|
|
query.setMaxResults(page.getPageSize());
|
|
query.setMaxResults(page.getPageSize());
|
|
|
query.setFirstResult(page.getStartIndex());
|
|
query.setFirstResult(page.getStartIndex());
|
|
|
return this.queryForMap(nativeQuery, params);
|
|
return this.queryForMap(nativeQuery, params);
|
|
@@ -490,15 +498,17 @@ public class DAOServiceImpl implements IDAOService {
|
|
|
* com.primedata.primedatamm.core.common.Page, EntityList)
|
|
* com.primedata.primedatamm.core.common.Page, EntityList)
|
|
|
*/
|
|
*/
|
|
|
@Override
|
|
@Override
|
|
|
- public List queryPageEntity(String sql, Object[] params, Page page, Class entityClass) {
|
|
|
|
|
|
|
+ public List queryPageEntity(String sql, Object[] params, Page page, @NonNull Class entityClass) {
|
|
|
int totalCount = this.countSQL(sql, params);
|
|
int totalCount = this.countSQL(sql, params);
|
|
|
List<?> list = new ArrayList();
|
|
List<?> list = new ArrayList();
|
|
|
if (totalCount > 0) {
|
|
if (totalCount > 0) {
|
|
|
- final javax.persistence.Query nativeQuery = entityManager.createNativeQuery(sql, entityClass);
|
|
|
|
|
|
|
+ final javax.persistence.Query nativeQuery = entityManager.createNativeQuery(sql);
|
|
|
SQLQuery query = nativeQuery.unwrap(SQLQuery.class);
|
|
SQLQuery query = nativeQuery.unwrap(SQLQuery.class);
|
|
|
- for (int i = 0; params != null && i < params.length; i++) {
|
|
|
|
|
- query.setParameter(i, params[i]);
|
|
|
|
|
|
|
+ for (int i=1; params!=null && i<params.length+1; i++) {
|
|
|
|
|
+ query.setParameter(i, params[i-1]);
|
|
|
}
|
|
}
|
|
|
|
|
+ nativeQuery.unwrap(org.hibernate.SQLQuery.class)
|
|
|
|
|
+ .setResultTransformer(new DOResultTransformer(entityClass));
|
|
|
query.setMaxResults(page.getPageSize());
|
|
query.setMaxResults(page.getPageSize());
|
|
|
query.setFirstResult(page.getStartIndex());
|
|
query.setFirstResult(page.getStartIndex());
|
|
|
return query.list();
|
|
return query.list();
|
|
@@ -523,9 +533,16 @@ public class DAOServiceImpl implements IDAOService {
|
|
|
public int countSQL(String sql, Object[] params) {
|
|
public int countSQL(String sql, Object[] params) {
|
|
|
String strQuery = this.getCountSQL(sql);
|
|
String strQuery = this.getCountSQL(sql);
|
|
|
int count = 0;
|
|
int count = 0;
|
|
|
- List<?> list = this.querySQL(strQuery, params);
|
|
|
|
|
- if (list != null && list.get(0) != null) {// 取出count总数
|
|
|
|
|
- count = ((Number)list.get(0)).intValue();
|
|
|
|
|
|
|
+ final javax.persistence.Query nativeQuery = entityManager.createNativeQuery(strQuery);
|
|
|
|
|
+ for (int i=1; params!=null && i<params.length+1; i++) {
|
|
|
|
|
+ nativeQuery.setParameter(i, params[i-1]);
|
|
|
|
|
+ }
|
|
|
|
|
+ if (nativeQuery != null) {
|
|
|
|
|
+ // 取出count总数
|
|
|
|
|
+ final Object singleResult = nativeQuery.getSingleResult();
|
|
|
|
|
+ if(singleResult instanceof Number) {
|
|
|
|
|
+ count = ((Number)singleResult).intValue();
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
return count;
|
|
return count;
|
|
|
}
|
|
}
|