学院首页
操作系统
图形图像
编程开发
网页制作
网络应用
办公应用
在线图书
当前位置导航:
炫浪网
>>
网络学院
>>
编程开发
>>
JAVA教程
>>
Java进阶
OJB中的多表查询和更新
OJB的文章实在是少的可怜,自己总结了一下一些重点的内容。想到哪里写到哪里吧
比如有课程(event)和类别(catalog)两张表,二者是多对多的关系,关系表叫做catalogEventBridge,字段为[catalogID,eventID],现在要做的是一旦查询出一个catalog,就要把相关的event也全部搜索出来。
1.repository_user.xml中作如下定义:
<class-descriptor class="org.pie.vls.Catalog.Catalog" table="catalog">
<field-descriptor name="catalogID" column="catalogID" jdbc-type="INTEGER"
primarykey="true" /> <field-descriptor name="catalogName" column="catalogName"
jdbc-type="VARCHAR" /> <collection-descriptor name="catalogEventList" element-
class-ref="org.pie.vls.Catalog.CatalogEventBridge" auto-retrieve="true" auto-
update="true" auto-delete="true"> <inverse-foreignkey field-ref="catalogID"/>
</collection-descriptor> </class-descriptor> <class-descriptor
class="org.pie.vls.Catalog.CatalogEventBridge" table="catalogEventBridge">
<field-descriptor name="catalogID" column="catalogID" jdbc-type="INTEGER"
primarykey="true" /> <field-descriptor name="eventTypeID" column="eventTypeID"
jdbc-type="INTEGER" primarykey="true" /> </class-descriptor> <class-descriptor
class="org.pie.vls.EventType.EventType" table="eventType" > <field-descriptor
name="eventTypeID" column="eventTypeID" jdbc-type="INTEGER" primarykey="true"
autoincrement="true" />
<field-descriptor
name="eventTypeTitle"
column="eventTypeTitle"
jdbc-type="VARCHAR"
/>
... ...
</class-descriptor>
2. bean文件的定义
EventType.java
public class EventType implements Cloneable, Comparable {
private String eventTypeTitle;
private String eventTypeCode;
private String eventTypeDesc;
private int eventTypeID;
public int getEventTypeID() {
return this.eventTypeID;
}
public void setEventTypeID(int value) {
this.eventTypeID = value;
}
... ...
}
catalog.java
public class Catalog implements Comparable {
private int catalogID;
private String catalogName = "";
private List catalogEventList = new Vector();
/**
* @return Returns the catalogID.
*/
public int getCatalogID() {
return catalogID;
}
/**
* @param catalogID The catalogID to set.
*/
public void setCatalogID(int catalogID) {
this.catalogID = catalogID;
}
/**
* @return Returns the catalogName.
*/
public String getCatalogName() {
return catalogName;
}
/**
* @param catalogName The catalogName to set.
*/
public void setCatalogName(String catalogName) {
this.catalogName = catalogName;
}
/**
* @return Returns the catalogEventList.
*/
public List getCatalogEventList() {
return catalogEventList;
}
/**
* @param catalogEventList The catalogEventList to set.
*/
public void setCatalogEventList(List catalogEventList) {
this.catalogEventList = catalogEventList;
}
}
CatalogEventBridge.java
public class CatalogEventBridge {
private int catalogID = 0;
private int eventTypeID = 0;
/**
* @return Returns the catalogID.
*/
public int getCatalogID() {
return catalogID;
}
/**
* @param catalogID The catalogID to set.
*/
public void setCatalogID(int catalogID) {
this.catalogID = catalogID;
}
/**
* @return Returns the eventTypeID.
*/
public int getEventTypeID() {
return eventTypeID;
}
/**
* @param eventTypeID The eventTypeID to set.
*/
public void setEventTypeID(int eventTypeID) {
this.eventTypeID = eventTypeID;
}
}
3. 定义DAO
import java.util.Collection;
import java.util.Iterator;
import org.apache.log4j.Logger;
import org.apache.ojb.broker.PersistenceBroker;
import org.apache.ojb.broker.PersistenceBrokerFactory;
import org.apache.ojb.broker.query.Criteria;
import org.apache.ojb.broker.query.QueryByCriteria;
import org.apache.ojb.broker.query.QueryFactory;
import org.odmg.Implementation;
import org.pie.vls.Application.AbstractVLSBase;
public class CatalogDAO extends AbstractVLSBase {
private Collection catalogList;
private PersistenceBroker broker;
private static final Logger logger = Logger.getLogger(Catalog.class);
private int catalogID = 0;
public CatalogDAO(Implementation impl) {
super(impl);
init();
}
public CatalogDAO(Implementation impl, int catalogID) {
super(impl);
this.catalogID = catalogID;
init();
}
/* (non-Javadoc)
* @see org.pie.vls.Application.VLSBase#init()
*/
public void init() {
// TODO Auto-generated method stub
try {
broker = PersistenceBrokerFactory.defaultPersistenceBroker();
broker.clearCache();
Criteria crit = new Criteria();
if (this.catalogID > 0) {
crit.addEqualTo("catalogID", new Integer(this.catalogID));
}
QueryByCriteria tquery = QueryFactory.newQuery(Catalog.class, crit);
this.catalogList = broker.getCollectionByQuery(tquery);
broker.clearCache();
broker.close();
} catch (Throwable t) {
logger.error(t.getMessage(), t);
}
}
public boolean isEmpty(){
return this.catalogList.isEmpty();
}
public Collection getCatalogList() {
return this.catalogList;
}
public Catalog getCatalog() {
Iterator iter = this.catalogList.iterator();
Catalog catalog = (Catalog) iter.next();
return catalog;
}
public void create(Catalog catalog) {
update(catalog);
}
public void update(Catalog catalog) {
try {
broker = PersistenceBrokerFactory.defaultPersistenceBroker();
broker.clearCache();
broker.beginTransaction();
broker.store(catalog);
broker.commitTransaction();
broker.close();
} catch (Throwable t) {
logger.error(t.getMessage(), t);
}
}
public void delete(Catalog catalog) {
try {
broker = PersistenceBrokerFactory.defaultPersistenceBroker();
broker.clearCache();
broker.beginTransaction();
broker.delete(catalog);
broker.commitTransaction();
broker.close();
} catch (Throwable t) {
logger.error(t.getMessage(), t);
}
}
}
catalogEventBridgeDAO.java和eventTypeDAO.java跟上面的这个DAO类似,就不再重复。
使用方法就很简单了,只要通过CatalogDAO得到了一个catalog的实例,那么就可以通过catalog.getCatalogEventList()来获得bridge表中相关的数据,同样,调用catalogDAO中的create,update和delete方法,不仅对catalog表作操作,同样也对catalogEventBridge表中的数据作操作。
上一篇:
Log4J 日志管理系统使用心得体会
下一篇:
如何制作最小的RCP程序压缩包
相关内容
[更多]
关于JSP防范SQL注入攻击
用Java设计防病毒的电子邮件程序
您的Java代码安全吗—还是暴露在外?
Java理论与实践: 描绘线程安全性
漫谈Java加密技术(一)
J2EE 探索者: 用JAAS 和 JSSE 实现 Java 安全性
漫谈Java加密技术(二)
漫谈Java加密技术(三)
漫谈Java加密技术(四)
谈谈Java加密技术(五)
谈谈Java加密技术(六)
谈谈Java加密技术(七)
Java加密技术(八)
Java加密技术(九)
线程中断(interrupt)使用方法
singleton的几种实现方式
赞助商链接
【注意】炫浪网 版权所有,未经书面授权禁止模仿风格或建立镜像网站.如有违反,追究法律责任.
【声明】本网站部分内容属社区网友发布,本网站仅提供网友交流平台,但有权在本网站范围内引用、发布、
转载来自社区网友发布的内容。网友发布内容纯属个人行为,与本网站立场无关。本网站对于网友发布的
内容所引发的版权、署名权的异议及纠纷,不承担任何责任。 粤ICP备
11064832
号 公安备案编号:4453023010550