科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航



ZDNet>软件频道>中间件-zhiding>OJB中的多表查询和更新

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

OJB的文章实在是少的可怜,自己总结了一下一些重点的内容。想到哪里写到哪里吧 比如有课程(event)和类别(catalog)两张表,二者是多对多的关系,关系表叫做catalogEventBridge。

来源:中国IT实验室 2007年09月26日

关键字:java 编程 多表

    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表中的数据作操作。

查看本文来源