服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

ojb中的多条件查询

    项目还是一样,以一个reservation为例,一个reservation就是一个课程在实际中的体现,它有开始和终止时间还有状态等信息。timeslot就是定义了他的时间,里面有三个字段(timeslotid,start,end,reservationid)。

1。我要查询课程,输入的参数是一个时间段,得到的是一个reservation的列表。我可以这样做

  1. /*
  2.  *  (non-javadoc)
  3.  * @see org.pie.vls.application.vlsbase#init()
  4.  */
  5. public void init() {
  6.     try {
  7.         broker = persistencebrokerfactory.defaultpersistencebroker();
  8.         broker.clearcache();
  9.         //general criteria, with all the query condition
  10.         criteria crit = new criteria();
  11.         criteria crit1 = null;
  12.         list criterialist = new vector();
  13.         //if the reservation id is not 0
  14.         if (resvid > 0) {
  15.             crit.addnotequalto("resvid"new integer(this.resvid));
  16.         }
  17.         iterator iter = this.reservationtimeslotlist.iterator();
  18.         while (iter.hasnext()) {
  19.             //logger.debug ("timeslot -----");
  20.             reservationtimeslot reservationtimeslot = (reservationtimeslot) iter.next();
  21.             /**
  22.              * set the query condition list
  23.              * start and end
  24.              */
  25.             starttimeutc = reservationtimeslot.getstartdatetimeutc();
  26.             endtimeutc = reservationtimeslot.getenddatetimeutc();
  27.             if (this.selecttype == constants.between_reservations) {
  28.                 crit1 = new criteria();
  29.                 //logger.debug ("between " + starttimeutc + " " + endtimeutc);
  30.                 crit1.addbetween("start", starttimeutc, endtimeutc);
  31.                 criteria critmore1 = new criteria();
  32.                 critmore1.addbetween("end", starttimeutc, endtimeutc);
  33.                 criteria critmore2 = new criteria();
  34.                 critmore2.addlessorequalthan("start", starttimeutc);
  35.                 critmore2.addgreaterorequalthan("end", endtimeutc);
  36.                 crit1.addorcriteria(critmore1);
  37.                 crit1.addorcriteria(critmore2);
  38.                 }
  39.             criterialist.add(crit1.copy(truetruetrue));
  40.         }
  41.         if (criterialist.size() > 0) {
  42.             crit1 = new criteria();
  43.             for (int i = 0; i < criterialist.size(); i++) {
  44.                 crit1.addorcriteria((criteria) criterialist.get(i));
  45.             }
  46.             crit.addandcriteria(crit1);
  47.         }
  48.         logger.debug(crit);
  49.         querybycriteria tquery = queryfactory.newquery(timeslot.class, crit);
  50.         this.timeslots = broker.getcollectionbyquery(tquery);
  51.         broker.clearcache();
  52.         broker.close();
  53.     } catch (throwable t) {
  54.         logger.error(t.getmessage(), t);
  55.     }
  56. }


 


2. 如果我要创建一个reservation,要判断的是当前这个创建的reservation是否与其它的reservation有交叉点的时间,那查询条件就这样修改

  1. broker = persistencebrokerfactory.defaultpersistencebroker();
  2. broker.clearcache();
  3. //general criteria, with all the query condition
  4. criteria crit = new criteria();
  5. criteria crit1 = null;
  6. list criterialist = new vector();
  7. if (this.selecttype == constants.touching_reservations) {
  8.     crit1 = new criteria();
  9.     /**
  10. * <p>the start time is in between <code>this.starttimeutc</code> and <code>this.endtimeutc</code>
  11.      */
  12.     crit1.addgreaterorequalthan("start", starttimeutc);
  13.     crit1.addlessorequalthan("start", endtimeutc);
  14.     /**
  15. * <p>the end time is in between <code>this.starttimeutc</code> and <code>this.endtimeutc</code>
  16.      */
  17.     criteria crit2 = new criteria();
  18.     crit2.addgreaterorequalthan("end", starttimeutc);
  19.     crit2.addlessorequalthan("end", endtimeutc);
  20.     /**
  21.      * <p>the start time is in less than <code>this.starttimeutc</code> and 
  22.      * the end time is greater than <code>this.endtimeutc</code>
  23.      */
  24.     criteria crit3 = new criteria();
  25.     crit3.addlessorequalthan("start", starttimeutc);
  26.     crit3.addgreaterorequalthan("end", endtimeutc);
  27.     crit1.addorcriteria(crit2);
  28.     crit1.addorcriteria(crit3);
  29. }
  30. criterialist.add(crit1.copy(truetruetrue));
  31. if (criterialist.size() > 0) {
  32.     crit1 = new criteria();
  33.     for (int i = 0; i < criterialist.size(); i++) {
  34.         crit1.addorcriteria((criteria) criterialist.get(i));
  35.     }
  36.     crit.addandcriteria(crit1);
  37. }
  38. querybycriteria tquery = queryfactory.newquery(timeslot.class, crit);
  39. this.timeslots = broker.getcollectionbyquery(tquery);
  40. broker.clearcache();
  41. broker.close();

扫描关注微信公众号