`

JAP实现方法

    博客分类:
  • Java
阅读更多
package cn.itcast.service.base;

import java.io.Serializable;
import java.util.LinkedHashMap;

import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.springframework.transaction.annotation.Transactional;

import cn.itcast.bean.QueryResult;

import cn.itcast.utils.GenericsUtils;

/*
* 在抽象类中实现该基本功能。
*/
@SuppressWarnings("unchecked")
@Transactional
public abstract class DaoSupport<T> implements DAO<T> {
//反射得到实体
private Class<T> entityClass = GenericsUtils.getSuperClassGenricType(this.getClass());

@PersistenceContext protected EntityManager em;

public void Save(T entity) {
// TODO Auto-generated method stub
em.persist(entity);
}

public void delete(java.io.Serializable... ids) {
// TODO Auto-generated method stub
for (Serializable serializable : ids) {
em.remove(em.getReference(this.entityClass, serializable));
}
}

public T find(java.io.Serializable entityId) {
// TODO Auto-generated method stub
return em.find(this.entityClass, entityId);
}

public void update(T entity) {
// TODO Auto-generated method stub
em.merge(entity);
}

public QueryResult<T> getScrollData(int startIndex, int maxResult, String whereJPQL, Object[] params, LinkedHashMap<String, String> orderby) {
QueryResult<T> qr = new QueryResult<T>();
String entityName= getEntityName(this.entityClass);
System.out.println(entityName);

// 一些细节问题真的很重要........
// 这个地方搞的头都大了,就是少了一个空格的问题

String where = whereJPQL !=null && !"".equals(whereJPQL.trim()) ? "where "+ whereJPQL : "";

Query query = em.createQuery("select o from "+ entityName+ " o "+ where + buildOrderBy(orderby));

setParameters(query, params);

////兩參熟都不為-1情況才分页
if(startIndex!=-1 && maxResult!=-1){
//设置查询记录的起始位置和查询的最大记录数
query.setFirstResult(startIndex).setMaxResults(maxResult);
}

//设置查询的记录
qr.setResultlist(query.getResultList());

//**達到總記錄數**
query = em.createQuery("select count(o) from "+ entityName+" o "+where );

//這個地方出錯了......

setParameters(query, params);

//设置查询记录总数
qr.setTotalrecord((Long)query.getSingleResult());
      
//返回查询记录结果
return qr;
}

public QueryResult<T> getScrollData(){
return getScrollData(-1, -1, null, null, null);
}

public QueryResult<T> getScrollData(int startIndex,int maxResult,String whereJPQL, Object[] params){
return getScrollData(startIndex, maxResult, whereJPQL, params, null);
}

public QueryResult<T> getScrollData(int startIndex,int maxResult,LinkedHashMap<String, String>orderby){
return getScrollData(startIndex, maxResult, null, null, orderby);
}  

public QueryResult<T> getScrollData(int startIndex,int maxResult){
/*QueryResult<T> qr = new QueryResult<T>();
String entityName = getEntityName(this.entityClass);
Query query = em.createQuery("select o from "+ entityName + " o" );
query.setFirstResult(startIndex).setMaxResults(maxResult);
qr.setResultlist(query.getResultList());
query = em.createQuery("select count(o) from "+ entityName+" o ");
qr.setTotalrecord((Long)query.getSingleResult());
return qr;*/
return getScrollData(startIndex, maxResult);
}
/*
* 为Query对象设置查询參數
* @params query 查詢對象
* @param params 查詢參數
*/
private static void setParameters(Query query, Object[] params) {
// TODO Auto-generated method stub
if(params !=null){
for (int i = 0; i < params.length; i++) {
query.setParameter(i+1, params[i]);
}
}

}

//構造排序方法
private static String buildOrderBy(LinkedHashMap<String, String> orderby) {
// TODO Auto-generated method stub
StringBuilder sb = new StringBuilder();
if(orderby !=null && orderby.size()>0){
sb.append(" order by ");
for (String key : orderby.keySet()) {
sb.append("o.").append(key).append(" ").append(orderby.get(key)).append(",");
}
sb.deleteCharAt(sb.length()-1);
}
return sb.toString();
}

/*
* 获得实体名称
*/
//在方法上聲明環形
private static <E> String getEntityName(Class<E> entityClass){
String entityname = entityClass.getSimpleName();
//获得注解Entity的name的实体名称
Entity entity = entityClass.getAnnotation(Entity.class);

if(entity.name()!=null && !"".equals(entity.name())){
entityname = entity .name();
}

return entityname;

}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics