用OJB PersistenceBroker api實(shí)現(xiàn)各種功能:
創(chuàng)新互聯(lián)是專業(yè)的昌平網(wǎng)站建設(shè)公司,昌平接單;提供做網(wǎng)站、網(wǎng)站建設(shè),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行昌平網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!上面的一段代碼很簡單,因?yàn)闆]有涉及到存儲操作,僅僅是程序的退出。下面讓我們來
看一個(gè)更具體的例子:UCListAllProducts類。該功能必須含有一個(gè)Collection類來包含
數(shù)據(jù)庫中的所有產(chǎn)品,然后將所有產(chǎn)品一一枚舉并顯示出來。為了得到數(shù)據(jù)庫中的所有
產(chǎn)品,我們需要使用OJB API中的一個(gè)方法。
OJB提供三個(gè)主要的API:
PersistenceBroker
ODMG實(shí)現(xiàn)
JDO實(shí)現(xiàn)
在導(dǎo)學(xué)1中,我們使用PersistenceBroker API來實(shí)現(xiàn)所有的三個(gè)功能。導(dǎo)學(xué)2 D――使用
ODMG API,導(dǎo)學(xué)4 D――使用JDO API將使用不同的數(shù)據(jù)庫訪問方法來實(shí)現(xiàn)同樣的功能。
你可以在org.apache.ojb.broker包中找到PersistenceBroker API的源碼。該包中最關(guān)
鍵的一個(gè)組件就是PersistenceBroker接口。他提供了獲得對象,存儲對象,刪除對象的
功能。在實(shí)際使用過程中,你需要獲得一個(gè)Broker實(shí)例,配置相關(guān)的O/R映射關(guān)系,才能
使用其提供的功能。
獲得一個(gè)Broker實(shí)例:
怎樣獲得一個(gè)Broker實(shí)例?讓我們來從Application類的構(gòu)造函數(shù)中找答案:
public Application()
{
PersistenceBroker broker = null;
try
{
broker = PersistenceBrokerFactory.
defaultPersistenceBroker();
}
catch (Throwable t)
{
t.printStackTrace();
}
useCases = new Vector();
useCases.add(new UCListAllProducts(broker));
useCases.add(new UCEnterNewProduct(broker));
useCases.add(new UCDeleteProduct(broker));
useCases.add(new UCQuitApplication(broker));
}
PersistenceBrokerFactory類使用./repositoty.XML作為映射倉庫創(chuàng)建一個(gè)Pesistence
Broker的實(shí)例,被創(chuàng)建的PesistenceBroker實(shí)例作為一個(gè)參數(shù)傳到四個(gè)UseCase類的構(gòu)造
函數(shù)中去。
獲得Collections和Iterators:
下面我們要做的就是用這個(gè)broker實(shí)例來進(jìn)行存儲操作。在這個(gè)功能中,我們需要從數(shù)
據(jù)庫中獲得包含所有產(chǎn)品列表的collection。為了獲得滿足一些條件的collection,我
們可以使用PersistenceBroker.getCollectionByQuery(Query query)方法。其中,Que
ry是一個(gè)類,它提供特殊的條件如price>100或者userId=3.在我們的案例中,我們想要
獲得存儲在Product表中的所有記錄,所以我們不需要過濾條件。
下面是UCListAllProducts.apply()方法的代碼:
public void apply()
{
System.out.println("The list of available products:");
// build a query that selects all objects of Class Product,
// without any further criteria according to ODMG the
// Collection containing all instances of a
// persistent class is called "Extent"
Query query = new QueryByCriteria(Product.class, null);
try
{
// ask the broker to retrieve the Extent collection
Collection allProducts = broker.getCollectionByQuery(query);
// now iterate over the result to print each product
Java.util.Iterator iter = allProducts.iterator();
while (iter.hasNext())
{
System.out.println(iter.next());
}
}
catch (Throwable t)
{
t.printStackTrace();
}
}