hibernate BaseDao

public class BaseDao extends HibernateDaoSupport{
 
 
 protected static Logger logger = Logger.getRootLogger();

 /**
  * 查询单个实例,HQL实现
  *
  * @param select
  * @param values
  * @return
  */
 public Object queryForObject(final String select, final Object[] values) {
  HibernateCallback selectCallback = new HibernateCallback() {
   public Object doInHibernate(Session session) {
    Query query = session.createQuery(select);
    if (values != null) {
     for (int i = 0; i < values.length; i++) {
      query.setParameter(i, values[i]);
     }
    }
    return query.setMaxResults(1).uniqueResult();
   }
  };

  return this.getHibernateTemplate().execute(selectCallback);
 }
 /**
  * SQL查询列表
  * @param select
  * @param values
  * @return
  */
 public List<Object[]> sqlForList(final String select, final Object[] values,final LinkedHashMap<String,Type> map) {
  HibernateCallback selectCallback = new HibernateCallback() {
   public List<Object[]> doInHibernate(Session session) {
    SQLQuery query = session.createSQLQuery(select);
  
    if (values != null) {
     for (int i = 0; i < values.length; i++) {
      query.setParameter(i, values[i]);
     }
    }
    for(String o:map.keySet()){
     query.addScalar(o, map.get(o));
    }
    return query.list();
   }
  };
  return (List<Object[]>)this.getHibernateTemplate().execute(selectCallback);
 }
 
 
 /**
  * SQL查询列表
  * @param select
  * @param values
  * @return
  */
 public List<Object[]> sqlForList(final String select, final Object[] values,final LinkedHashMap<String,Type> map,final Page page) {
  HibernateCallback selectCallback = new HibernateCallback() {
   public List<Object[]> doInHibernate(Session session) {
    SQLQuery query = session.createSQLQuery(select);
  
    if (values != null) {
     for (int i = 0; i < values.length; i++) {
      query.setParameter(i, values[i]);
     }
    }
    for(String o:map.keySet()){
     query.addScalar(o, map.get(o));
    }
     List<Object[]> l = query.setFirstResult(page.getFirstResult())
     .setMaxResults(page.getPageSize()).list();
    return l;
   }
  };
  return (List<Object[]>)this.getHibernateTemplate().execute(selectCallback);
 }
 /**
  * 这个为下面的方法调用
  *
  * @param select
  * @param values
  * @param page
  * @return
  */

 public List queryForList(final String select, final Object[] values,
   final Page page) {
  HibernateCallback selectCallback = new HibernateCallback() {
   public Object doInHibernate(Session session) {
    Query query = session.createQuery(select);
    if (values != null) {
     for (int i = 0; i < values.length; i++) {
      query.setParameter(i, values[i]);
     }
    }
    return query.setFirstResult(page.getFirstResult())
      .setMaxResults(page.getPageSize()).list();
   }
  };
  return (List) this.getHibernateTemplate().execute(selectCallback);
 }
 
 /**
  * 这个为下面的方法调用
  *
  * @param select
  * @param values
  * @param page
  * @return
  */

 public List queryForList(final String select, final Object[] values) {
  HibernateCallback selectCallback = new HibernateCallback() {
   public Object doInHibernate(Session session) {
    Query query = session.createQuery(select);
    if (values != null) {
     for (int i = 0; i < values.length; i++) {
      query.setParameter(i, values[i]);
     }
    }
    return query.list();
   }
  };
  return (List) this.getHibernateTemplate().execute(selectCallback);
 }

 /**
  *
  * @param selectCount
  *            查总数
  * @param select
  *            查询语句
  * @param values
  *            参数
  * @param page
  * @return
  */
 public List<?> queryForList(final String selectCount, final String select,
   final Object[] values, final Page page) {

  Integer Count = (Integer) queryForObject(selectCount, values);

  page.setTotalCount(Count.intValue());
  if (page.isEmpty()) {
   return Collections.EMPTY_LIST;
  }
  List<?> list=queryForList(select, values, page);

  return list;
 }

 /**
  * 用于地域查询,构造hql中的region_id语句
  *
  * @param regionId
  * @return
  */
 protected String genRegionHql(int regionId) {
  String regionIDString = "" + regionId;
  int index = regionIDString.length() - 1;
  while (regionIDString.charAt(index) == '0') {
   index--;
  }
  int bit = (int) Math.pow(10, regionIDString.length() - index - 1);
  int minRegionId = (regionId / bit) * bit;
  int maxRegionId = minRegionId + bit - 1;
  StringBuffer buffer = new StringBuffer();
  if (regionId > minRegionId) {
   buffer.append(" region_id =" + regionId);
  } else {
   buffer.append(" region_id >=" + minRegionId + " and region_id <"
     + maxRegionId);
  }
  return buffer.toString();
 }
 
 
 
 /**
  * 随机查询
  */
 public Object randomQueryForObject(List<Factor4Query> list, Class clazz)
 {
  String className = CharUtil.getClassName(clazz);
  StringBuilder buffer = new StringBuilder();
  StringBuilder buffRand = new StringBuilder();
  List<Object> objs = new ArrayList<Object>(0);
  
  buffer.append(" from ").append(className).append(" where id >=");
  buffRand.append(" select ROUND(RAND()*( max(id)-min(id)))+min(id) from ")
    .append(className).append(" where 1=1 ");
  
  StringBuilder builder = new StringBuilder("");
  for(Factor4Query f : list){
   builder.append(getQueryCondition( f, objs));
  }
  
  buffRand.append(builder);
  
//  int size = objs.size();
//  for(int i = 0; i < size; i++){
//   objs.add(objs.get(i));
//  }
  Object[] arr = objs.toArray();
  
  String hqlRand = buffRand.toString();
  Integer randId = (Integer) this.queryForObject(hqlRand, arr);
  
  buffer.append(randId);
  buffer.append(builder).append(" order by id asc limit 1");
  
  String hql = buffer.toString();
  Object obj = this.queryForObject(hql, arr);
  
  return obj;
 }
 
 
 public Object queryForObject(List<Factor4Query> list, Class clazz)
 {
  String className = CharUtil.getClassName(clazz);
  StringBuilder buffer = new StringBuilder();
  List<Object> objs = new ArrayList<Object>(0);
  
  buffer.append(" from ").append(className).append(" t where 1=1");
  
  StringBuilder builder = new StringBuilder("");
  for(Factor4Query f : list){
   builder.append(getQueryCondition(f, objs));
  }
  buffer.append(builder.toString());
  
  String hql = buffer.toString();
  Object[] arr = objs.toArray();
  Object obj = this.queryForObject(hql, arr);
  
  return obj;
 }
 
 
 private StringBuilder getQueryCondition(Factor4Query factor, List<Object> objs)
 {
  StringBuilder hql = new StringBuilder("");
  
  if(factor.getOpt()==Factor4Query.EQUAL && factor.getValue()!=null){
    hql.append(" and "+factor.getField()+" =? ");
    objs.add(factor.getValue());
   }
  else if(factor.getOpt()==Factor4Query.LESS && factor.getValue()!=null){
    hql.append(" and "+factor.getField()+" <? ");
    objs.add(factor.getValue());
   }
  else if(factor.getOpt()==Factor4Query.LESS_EQUAL && factor.getValue()!=null){
    hql.append(" and "+factor.getField()+" <=? ");
    objs.add(factor.getValue());
   }
  else if(factor.getOpt()==Factor4Query.MORE && factor.getValue()!=null){
    hql.append(" and "+factor.getField()+" >? ");
    objs.add(factor.getValue());
   }
  else if(factor.getOpt()==Factor4Query.MORE_EQUAL && factor.getValue()!=null){
    hql.append(" and "+factor.getField()+" >=? ");
    objs.add(factor.getValue());
   }
  else if(factor.getOpt()==Factor4Query.UNEQUAL && factor.getValue()!=null){
    hql.append(" and "+factor.getField()+" <> ("+factor.getValue()+") ");   
   }
  
  else
   if(factor.getOpt()==Factor4Query.BETW && factor.getMinValue()!=null && factor.getMaxValue()!=null){
    hql.append(" and "+factor.getField()+" between ? and  ? ");
    objs.add(factor.getMinValue());
    objs.add(factor.getMaxValue());
   }
   else if(factor.getOpt()==Factor4Query.NOTBETW && factor.getMinValue()!=null && factor.getMaxValue()!=null){
    hql.append(" and "+factor.getField()+" not between ? and  ? ");
    objs.add(factor.getMinValue());
    objs.add(factor.getMaxValue());
    
   }
  
   else
   if(factor.getOpt()==Factor4Query.SET && factor.getValues() != null){//?
   
    hql.append(" and "+factor.getField()+" in ("+factor.getValues()+") ");
    
   }
   else if(factor.getOpt()==Factor4Query.NOTINSET && factor.getValues() != null){//?
    hql.append(" and "+factor.getField()+" not in ("+factor.getValues()+") ");
   }
  
   else if(factor.getOpt()==Factor4Query.LIKE && factor.getValue() != null){
    hql.append(" and "+factor.getField()+" like ? ");
    Object o = "%"+factor.getValue()+"%";
    objs.add(o);
   }
  
   else if(factor.getOpt()==Factor4Query.ORDER && factor.getValue()==null){
    hql.append(" order by "+factor.getField());
    if(factor.getValue()==new Integer(1)){
     hql.append(" asc");
    }else{
     hql.append(" desc");
    }
   }
  
  if(hql.length() <=0 && factor.getAllowNullQuery()){
   hql.append(" and "+factor.getField()+" is null");
   
  }
  
  return hql;
 }
 
 /**
  * 后台结算数据查询查询总记录数
  * @param select
  * @param values
  * @param map
  * @return
  */
 public Integer sqlOfRecordTotal(final String select, final Object[] values,final LinkedHashMap<String,Type> map) {
  HibernateCallback selectCallback = new HibernateCallback() {
   public Integer doInHibernate(Session session) {
    SQLQuery query = session.createSQLQuery(select);
  
    if (values != null) {
     for (int i = 0; i < values.length; i++) {
      query.setParameter(i, values[i]);
     }
    }
    for(String o:map.keySet()){
     query.addScalar(o, map.get(o));
    }
    return (Integer)query.uniqueResult();
   }
  };
  return (Integer)this.getHibernateTemplate().execute(selectCallback);
 }
 
 
 public List<?> sqlQuery(final String select, final Object[] values,final LinkedHashMap<String,Type> map,final Page page) {
  HibernateCallback selectCallback = new HibernateCallback() {
   public List<?> doInHibernate(Session session) {
    SQLQuery query = session.createSQLQuery(select);
  
    if (values != null) {
     for (int i = 0; i < values.length; i++) {
      query.setParameter(i, values[i]);
     }
    }
    for(String o:map.keySet()){
     query.addScalar(o, map.get(o));
    }
    List<?> l = query.setFirstResult(page.getFirstResult())
     .setMaxResults(page.getPageSize()).list();
    return l;
   }
  };
  
  return (List<?>)this.getHibernateTemplate().execute(selectCallback);
  
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值