下面是对分页技术的封装 适用于所有的Bean
/*
* readOnly=true 只能读 更改是没有用的 propagation=Propagation.NOT_SUPPORTED 事物传播行为
* 意思说我们是部需呀开启事物的
*/
@Transactional(readOnly = true, propagation = Propagation.NOT_SUPPORTED)
public <T> T find(Class<T> classentity, Object entityid) {
// TODO Auto-generated method stub
return em.find(classentity, entityid);
}
@Transactional(readOnly = true, propagation = Propagation.NOT_SUPPORTED)
@SuppressWarnings("unchecked")
public <T> QueryResult<T> getSocerData(Class<T> entity, int firstIndex,
int maxIndex, String wherejpql, Object[] queryparams,
LinkedHashMap<String, String> orderby) {
QueryResult<T> qr = new QueryResult<T>();
String entityname = getEntityName(entity);
Query query = em.createQuery("select o from " + entityname + " o "
+ (wherejpql == null ? "" : "where " + wherejpql) + " "
+ buiderOderbySql(orderby));
setQueryParams(query, queryparams);
if (firstIndex != -1 && maxIndex != -1) {
query.setFirstResult(firstIndex).setMaxResults(maxIndex);
}
qr.setResultlist(query.getResultList());
query = em.createQuery("select count (o) from " + entityname + " o "
+ (wherejpql == null ? "" : "where " + wherejpql));
setQueryParams(query, queryparams);
qr.setTotalcorsd((Long) query.getSingleResult());
return qr;
}
@Transactional(readOnly = true, propagation = Propagation.NOT_SUPPORTED)
public <T> QueryResult<T> getSocerData(Class<T> entity, int firstIndex,
int maxIndex, LinkedHashMap<String, String> orderby) {
return getSocerData(entity, firstIndex, maxIndex, null, null, orderby);
}
@Transactional(readOnly = true, propagation = Propagation.NOT_SUPPORTED)
public <T> QueryResult<T> getSocerData(Class<T> entity, int firstIndex,
int maxIndex) {
// TODO Auto-generated method stub
return getSocerData(entity, firstIndex, maxIndex, null, null, null);
}
@Transactional(readOnly = true, propagation = Propagation.NOT_SUPPORTED)
public <T> QueryResult<T> getSocerData(Class<T> entity, int firstIndex,
int maxIndex, String wherejpql, Object[] queryparams) {
// TODO Auto-generated method stub
return getSocerData(entity, firstIndex, maxIndex, wherejpql,
queryparams, null);
}
@Transactional(readOnly = true, propagation = Propagation.NOT_SUPPORTED)
public <T> QueryResult<T> getSocerData(Class<T> entity) {
// TODO Auto-generated method stub
return getSocerData(entity, -1, -1);
}
protected void setQueryParams(Query query, Object[] queryparams) {
if ( queryparams != null&&queryparams.length > 0 ) {
for (int i = 0; i < queryparams.length; i++) {
query.setParameter(i + 1, queryparams[i]);
}
}
}
/*
* 获取order by 语句
*/
protected String buiderOderbySql(LinkedHashMap<String, String> orderby) {
StringBuffer b = new StringBuffer("");
if ( orderby != null&&orderby.size() > 0 ) {
b.append(" order by ");
for (String key : orderby.keySet()) {
b.append("o.").append(key).append(" ").append(orderby.get(key))
.append(",");
}
b.deleteCharAt(b.length() - 1);
}
return b.toString();
}
/*
* 获取entity的的名字
*/
protected <T> String getEntityName(Class<T> entity) {
String entityname = entity.getSimpleName();
Entity e = entity.getAnnotation(Entity.class);
if (e.name() != null && !"".equals(e.name())) {
entityname = e.name();
}
System.out.println(entityname);
return entityname;
}