[Java基础知识] [Java高级编程] [Java网络编程] [J2EE]
 [开发工具] [中间件] [Web开发] [J2ME] [JSP] [Web开发]
 [Java与数据库] [Java开源] [设计模式] [在线文档]
下载中心
[Java教程] [开发工具] [代码源码]
[Oracle数据库] [视频教程]

关于Hibernate综合查询解决方案

发布时间:2008-1-25 21:37:11     来源:赛迪网    作者:赛迪网

homegrown.testing.waf;
  
  
  /**
   *
   * 

Title: HQL的语句封装类


   * 

Description: 该对象封装HQL的查询语句,参数集合,排序参数,分组参数,单页起始地址  


   * 

Copyright: Copyright (c) 2003


   * 

Company:ifreeway 


   * @author camel
   * @version 1.0
   */
  
  public class HQuery {
  
    /**
     * HQL查询语句
     */
    private String queryString;
    /**
     * 参数集合对象
     */
    private ParaList paralist;
    /**
     * 排序字段
     */
    private String orderby;
    /**
     * 分组字段
     */
    private String groupby;
    /**
     * 分页起始查询地址
     */
    private int pageStartNo;
  
    /**
     * 取得一个Hibernate的Query对象
     * @return:Query对象
     */
    public String getQueryString() {
      return queryString;
    }
  
    /**
     * 设置一个HQL查询字符串
     * @param queryString:查询字符串
     * 
     */
    public void setQueryString(String queryString) {
   
     this.queryString =queryString;
  
    }
  
    /**
     * 取得参数集合对象
     * @return:参数集合对象
     */
    public ParaList getParalist() {
      return paralist;
    }
  
    /**
     * 设置参数集合对象
     * @param paralist:参数集合对象
     */
    public void setParalist(ParaList paralist) {
      this.paralist = paralist;
    }
  
    /**
     * 取得排序字段
     * @return:排序字段
     */
    public String getOrderby() {
      return orderby;
    }
  
    /**
     * 设置排序字段
     * @param orderby
     */
    public void setOrderby(String orderby) {
      this.orderby = orderby;
    }
  
    /**
     * 取得分组字段
     * @return
     */
    public String getGroupby() {
      return groupby;
    }
  
    /**
     * 设置分组字段
     * @param groupby
     */
    public void setGroupby(String groupby) {
      this.groupby = groupby;
    }
  
    /**
     * 取得页起始地址
     * @return
     */
    public int getPageStartNo() {
      return pageStartNo;
    }
  
    /**
     * 设置页起始地址
     * @param pageStartNo
     */
    public void setPageStartNo(int pageStartNo) {
      this.pageStartNo = pageStartNo;
    }
  } 
  
 上面三个对象的关系是:
 
 用Paras来装载每一个查询参数
  Paras paras=new Paras();
  paras.setPName(...);
  paras.setTypeNo(...);
 然后放在ParasList中
  ParasList paraslist=new ParasList();
  paraslist.add(paras)
 最后把填充以后的ParasList集合给HQuery  
  HQuery hquery=new HQuery();
  hquery.setParalist(paraslist);
  
 先面我们写一个公用查寻方法,来实现我们的综合查询:
 
 /**
  *
  *  综合查询,首先实例化HQuery
  * @see com.ifreeway.homegrown.testing.common.waf.DBHandler#find(com.ifreeway.homegrown.testing.common.waf.HQuery)
  */
 public List find(HQuery _query) throws HibernateException {
  List itr = null;
  try {
   StringBuffer query_str = new StringBuffer(_query.getQueryString());
   //是否要排序
   if (_query.getOrderby() != null) {
    query_str.append(_query.getOrderby());
   }
   //是否要分组
   if (_query.getGroupby() != null) {
    query_str.append(_query.getGroupby());
   }
   Session session = getSession();
   Query query = session.createQuery(query_str.toString());
   if (_query.getParalist() != null) {
    List list = _query.getParalist();
    for (int i = 0; i < list.size(); i++) {
     Paras param = (Paras) list.get(i);
     switch (param.getTypeNo()) {//此处要根据参数类型的增加要增加相应的“case”
      case Types.VARCHAR :
       query.setString(i, param.getPName().toString());
       break;
      case Types.INTEGER :
       query.setInteger(
        i,
        ((Integer) param.getPName()).intValue());
       break;
      case Types.DATE :
       query.setDate(i, (java.sql.Date) param.getPName());
       break;
      case Types.DOUBLE :
       query.setDouble(
        i,
        ((Double) param.getPName()).doubleValue());
       break;
      case Types.BOOLEAN :
       query.setBoolean(
        i,
        ((Boolean) param.getPName()).booleanValue());
       break;
      case Types.CHAR :
       query.setCharacter(
        i,
        ((Character) param.getPName()).charValue());
       break;
      case Types.JAVA_OBJECT :
       query.setEntity(i, (BaseModel) param.getPName());
       break;
     }
    }
   }
   //是否存在分页,当_query.getPageStartNo()==0是不分页
   if (_query.getPageStartNo() != 0) {
    int pageno = _query.getPageStartNo();
    query.setFirstResult((pageno - 1) * Constants.RECORD_PER_PAGE);
    query.setMaxResults((pageno) * Constants.RECORD_PER_PAGE);

上一页  [1] [2] [3] 下一页


发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
  相关文章
   
  • 上一个JAVA文章:

  •  
  • 下一个JAVA文章:
  •        
      网友评论
      精彩友情推荐  

  • 关于我们 | 版权申明 | 网站地图 | 广告指南 | 友情链接 | 联系我们
  • Copyright (C) 2003-2008 Javafan.net, All Rights Reserved 版权所有 Java爱好者 京ICP备05010995号