您的位置:首页 > 其它

所有实体Bean中用泛型和反射技术对分页技术的封装

2012-11-18 17:02 399 查看
下面是对分页技术的封装 适用于所有的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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐