服务热线:13616026886

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

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

ojb中的多表查询和更新

    ojb的文章实在是少的可怜,自己总结了一下一些重点的内容。想到哪里写到哪里吧

比如有课程(event)和类别(catalog)两张表,二者是多对多的关系,关系表叫做catalogeventbridge,字段为[catalogid,eventid],现在要做的是一旦查询出一个catalog,就要把相关的event也全部搜索出来。

1.repository_user.xml中作如下定义:



  1. <class-descriptor class="org.pie.vls.catalog.catalog" table="catalog"> 
  2. <field-descriptor name="catalogid" column="catalogid" jdbc-type="integer" 
  3. primarykey="true" /> <field-descriptor name="catalogname" column="catalogname" 
  4. jdbc-type="varchar" /> <collection-descriptor name="catalogeventlist" element-
  5. class-ref="org.pie.vls.catalog.catalogeventbridge" auto-retrieve="true" auto-
  6. update="true" auto-delete="true"> <inverse-foreignkey field-ref="catalogid"/> 
  7. </collection-descriptor> </class-descriptor> <class-descriptor 
  8. class="org.pie.vls.catalog.catalogeventbridge" table="catalogeventbridge"> 
  9. <field-descriptor name="catalogid" column="catalogid" jdbc-type="integer" 
  10. primarykey="true" /> <field-descriptor name="eventtypeid" column="eventtypeid" 
  11. jdbc-type="integer" primarykey="true" /> </class-descriptor> <class-descriptor 
  12. class="org.pie.vls.eventtype.eventtype" table="eventtype" > <field-descriptor 
  13. name="eventtypeid" column="eventtypeid" jdbc-type="integer" primarykey="true" 
  14. autoincrement="true" />
  15.       <field-descriptor
  16.          name="eventtypetitle"
  17.          column="eventtypetitle"
  18.          jdbc-type="varchar"
  19.       />
  20. ... ...
  21. </class-descriptor>


2. bean文件的定义



eventtype.java


  1. public class eventtype implements cloneable, comparable {
  2.     private string eventtypetitle;
  3.     private string eventtypecode;
  4.     private string eventtypedesc;
  5.     private int eventtypeid;
  6.     public int geteventtypeid() {
  7.         return this.eventtypeid;
  8.     }
  9.     public void seteventtypeid(int value) {
  10.         this.eventtypeid = value;
  11.     }
  12.     ... ...
  13. }


catalog.java


  1. public class catalog implements comparable {
  2.     private int catalogid;
  3.     private string catalogname = "";
  4.     private list catalogeventlist = new vector();
  5.    /**
  6.      * @return returns the catalogid.
  7.      */
  8.     public int getcatalogid() {
  9.         return catalogid;
  10.     }
  11.     /**
  12.      * @param catalogid the catalogid to set.
  13.      */
  14.     public void setcatalogid(int catalogid) {
  15.         this.catalogid = catalogid;
  16.     }
  17.     /**
  18.      * @return returns the catalogname.
  19.      */
  20.     public string getcatalogname() {
  21.         return catalogname;
  22.     }
  23.     /**
  24.      * @param catalogname the catalogname to set.
  25.      */
  26.     public void setcatalogname(string catalogname) {
  27.         this.catalogname = catalogname;
  28.     }
  29.     /**
  30.      * @return returns the catalogeventlist.
  31.      */
  32.     public list getcatalogeventlist() {
  33.         return catalogeventlist;
  34.     }
  35.     /**
  36.      * @param catalogeventlist the catalogeventlist to set.
  37.      */
  38.     public void setcatalogeventlist(list catalogeventlist) {
  39.         this.catalogeventlist = catalogeventlist;
  40.     }
  41. }


 


 

catalogeventbridge.java


  1. public class catalogeventbridge {
  2.     private int catalogid = 0;
  3.     private int eventtypeid = 0;
  4.     /**
  5.      * @return returns the catalogid.
  6.      */
  7.     public int getcatalogid() {
  8.         return catalogid;
  9.     }
  10.     /**
  11.      * @param catalogid the catalogid to set.
  12.      */
  13.     public void setcatalogid(int catalogid) {
  14.         this.catalogid = catalogid;
  15.     }
  16.     /**
  17.      * @return returns the eventtypeid.
  18.      */
  19.     public int geteventtypeid() {
  20.         return eventtypeid;
  21.     }
  22.     /**
  23.      * @param eventtypeid the eventtypeid to set.
  24.      */
  25.     public void seteventtypeid(int eventtypeid) {
  26.         this.eventtypeid = eventtypeid;
  27.     }
  28. }


3. 定义dao


  1. import java.util.collection;
  2. import java.util.iterator;
  3. import org.apache.log4j.logger;
  4. import org.apache.ojb.broker.persistencebroker;
  5. import org.apache.ojb.broker.persistencebrokerfactory;
  6. import org.apache.ojb.broker.query.criteria;
  7. import org.apache.ojb.broker.query.querybycriteria;
  8. import org.apache.ojb.broker.query.queryfactory;
  9. import org.odmg.implementation;
  10. import org.pie.vls.application.abstractvlsbase;
  11. public class catalogdao extends abstractvlsbase {
  12.     private collection cataloglist;
  13.     private persistencebroker broker;
  14.     private static final logger logger = logger.getlogger(catalog.class);
  15.     private int catalogid = 0;
  16.     public catalogdao(implementation impl) {
  17.         super(impl);
  18.         init();
  19.     }
  20.     public catalogdao(implementation impl, int catalogid) {
  21.         super(impl);
  22.         this.catalogid = catalogid;
  23.         init();
  24.     }
  25.     /* (non-javadoc)
  26.      * @see org.pie.vls.application.vlsbase#init()
  27.      */
  28.     public void init() {
  29.         // todo auto-generated method stub
  30.         try {
  31.             broker = persistencebrokerfactory.defaultpersistencebroker();
  32.             broker.clearcache();
  33.             criteria crit = new criteria();
  34.             if (this.catalogid > 0) {
  35.                 crit.addequalto("catalogid", new integer(this.catalogid));
  36.             }
  37.             querybycriteria tquery = queryfactory.newquery(catalog.class, crit);
  38.             this.cataloglist = broker.getcollectionbyquery(tquery);
  39.             broker.clearcache();
  40.             broker.close();
  41.         } catch (throwable t) {
  42.             logger.error(t.getmessage(), t);
  43.         }
  44.     }
  45.     
  46.     public boolean isempty(){
  47.         return this.cataloglist.isempty();
  48.     }
  49.     public collection getcataloglist() {
  50.         return this.cataloglist;
  51.     }
  52.     public catalog getcatalog() {
  53.         iterator iter = this.cataloglist.iterator();
  54.         catalog catalog = (catalog) iter.next();
  55.         return catalog;
  56.     }
  57.     public void create(catalog catalog) {
  58.         update(catalog);
  59.     }
  60.     public void update(catalog catalog) {
  61.         try {
  62.             broker = persistencebrokerfactory.defaultpersistencebroker();
  63.             broker.clearcache();
  64.             broker.begintransaction();
  65.             broker.store(catalog);
  66.             broker.committransaction();
  67.             broker.close();
  68.         } catch (throwable t) {
  69.             logger.error(t.getmessage(), t);
  70.         }
  71.     }
  72.     public void delete(catalog catalog) {
  73.         try {
  74.             broker = persistencebrokerfactory.defaultpersistencebroker();
  75.             broker.clearcache();
  76.             broker.begintransaction();
  77.             broker.delete(catalog);
  78.             broker.committransaction();
  79.             broker.close();
  80.         } catch (throwable t) {
  81.             logger.error(t.getmessage(), t);
  82.         }
  83.     }
  84. }

catalogeventbridgedao.java和eventtypedao.java跟上面的这个dao类似,就不再重复。

    使用方法就很简单了,只要通过catalogdao得到了一个catalog的实例,那么就可以通过catalog.getcatalogeventlist()来获得bridge表中相关的数据,同样,调用catalogdao中的create,update和delete方法,不仅对catalog表作操作,同样也对catalogeventbridge表中的数据作操作。

扫描关注微信公众号