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

下面是对分页技术的封装 适用于所有的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;

 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值