已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
此文件受到UFIDA的保護(hù), 并已在保護(hù)中心注冊, 外泄必糾!UFIDA GUID13AEF1E69-B33F-02DC-7A9D-A9F89BB24BDDUFIDA GUID16CD90F67-283F-D8D4-6A8A-A821CF9A4C79持久層技術(shù)紅皮書NC-UAP 5.0用友NC-UAP2020-01-111第 頁目 錄第一章前言11.NC數(shù)據(jù)訪問層特點(diǎn)1第二章JDBC FrameWork31.JdbcSession的創(chuàng)建:32.數(shù)據(jù)訪問異常的處理43.結(jié)果集合的處理44.更新的實(shí)現(xiàn)64.1無參數(shù)更新數(shù)據(jù)64.2帶參數(shù)更新數(shù)據(jù)74.3批量帶參數(shù)更新數(shù)據(jù)84.4批量無參數(shù)更新85.JdbcSession中特殊參數(shù)類型9第三章對象的持久化121.普通Java Bean的持久化121.1對象定義121.2構(gòu)造數(shù)據(jù)映射對象131.3對象讀取151.4對象寫入151.5對象更新161.6對象刪除162.SuperVO的持久化16第四章常用的API的使用181PersistenceManager182IVOPersistence持久化機(jī)制接口193IUAPQueryBS接口194結(jié)果集的控制20附錄211.常見問題解析21第 21 頁第一章 前言在NC的開發(fā)中可以直接通過JDBC編程來訪問數(shù)據(jù)庫。JDBC可以說是JAVA訪問關(guān)系數(shù)據(jù)庫的最原始、最直接的方法。這種方式的優(yōu)點(diǎn)是運(yùn)行效率高,缺點(diǎn)是在Java程序代碼中嵌入大量SQL語句,冗余是不可避免的,開發(fā)人員常常發(fā)現(xiàn)自己在一次又一次地編寫相同的普通代碼,如獲得連接、準(zhǔn)備語句、循環(huán)結(jié)果集以及其他一些 JDBC 特定元素,使得項(xiàng)目難以維護(hù)。特別是當(dāng)涉及到非常多的關(guān)系數(shù)據(jù)表、需要在多個(gè)不同類型的關(guān)系數(shù)據(jù)庫系統(tǒng)中使用時(shí),通過在程序中使用JDBC開發(fā)實(shí)施起來更加困難。所以引入對象關(guān)系映射是提高開發(fā)效率、提升軟件產(chǎn)品的可維護(hù)、擴(kuò)展性的現(xiàn)實(shí)需要。實(shí)踐表明,在基于數(shù)據(jù)處理為主的企業(yè)級應(yīng)程序開發(fā)中,通過引入對象-關(guān)系映射中間件,可以節(jié)省與對象持久化有關(guān)的差不多40%的編程工作量,同時(shí)提升軟件產(chǎn)品可維護(hù)及易擴(kuò)展性,提升軟件產(chǎn)品質(zhì)量。因此,在NC的業(yè)務(wù)開發(fā)中必要通過引入對象-關(guān)系映射系統(tǒng)中間件,實(shí)現(xiàn)數(shù)據(jù)庫的快速開發(fā)。目前NC可以通過JDBC開發(fā)了單獨(dú)的持久化層,把數(shù)據(jù)庫訪問操作封裝起來,提供簡潔的API,供業(yè)務(wù)層統(tǒng)一調(diào)用,實(shí)現(xiàn)了自己的ORM系統(tǒng)。 通過NC數(shù)據(jù)庫訪問框架可以把內(nèi)存中的對象持久化到數(shù)據(jù)庫、把數(shù)據(jù)庫中的關(guān)系數(shù)據(jù)加載到內(nèi)存中,同時(shí)保證了系統(tǒng)頻繁地訪問數(shù)據(jù)庫的性能,降低訪問數(shù)據(jù)庫的頻率。 1. NC數(shù)據(jù)訪問層特點(diǎn)具有透明性 業(yè)務(wù)對象在不知道數(shù)據(jù)訪問實(shí)現(xiàn)的具體細(xì)節(jié)情況下,可以使用數(shù)據(jù)源。由于實(shí)現(xiàn)細(xì)節(jié)隱藏在數(shù)據(jù)訪問層的內(nèi)部,所以訪問是透明的。 易于遷移 數(shù)據(jù)訪問層使應(yīng)用程序很容易遷移到其他數(shù)據(jù)庫實(shí)現(xiàn)。業(yè)務(wù)對象不了解底層的數(shù)據(jù)實(shí)現(xiàn),所以遷移僅僅涉及到修改數(shù)據(jù)訪問層。減少業(yè)務(wù)對象中代碼復(fù)雜性 因?yàn)閿?shù)據(jù)訪問層管理著所有的數(shù)據(jù)訪問復(fù)雜性,所以它可以簡化業(yè)務(wù)對象和使用數(shù)據(jù)訪問層的其他數(shù)據(jù)客戶端的代碼。數(shù)據(jù)訪問層,含有許多與實(shí)現(xiàn)相關(guān)的代碼(例如SQL語句)。這樣給開發(fā)人員帶來了更高的效率、更好的可維護(hù)性、提高了代碼的可讀性等一系列好處。 易于維護(hù)和管理把所有的數(shù)據(jù)訪問集中在單獨(dú)的層上,由于所有的數(shù)據(jù)訪問操作現(xiàn)在都委托給數(shù)據(jù)訪問層,集中化管理數(shù)據(jù)訪問。這種集中化可以使應(yīng)用程序易于維護(hù)和管理。 第二章 JDBC FrameWorkNC系統(tǒng)與數(shù)據(jù)庫進(jìn)行交互需要反復(fù)地調(diào)用SQL語句、連接管理、事務(wù)生命周期、結(jié)果處理和異常處理。這些操作都是很常見的;不過這個(gè)重復(fù)的使用并不是必要的。通過新數(shù)據(jù)訪問框架可以解決與一個(gè)兼容JDBC的數(shù)據(jù)庫的重復(fù)交互問題。Jdbc Framework特點(diǎn):1. 靈活2. 簡潔3. 高的容錯(cuò)性4. 異常的統(tǒng)一處理利用JdbcSession執(zhí)行一個(gè)SQL,幾乎不需要代碼。你所需要的全部僅僅是一個(gè)數(shù)據(jù)源和一個(gè)JdbcSession。 一旦你得到了它們,你將可以使用JdbcSession提供的大量方便的方法1. JdbcSession的創(chuàng)建:PersistenceManager sessionManager= PersistenceManager. getInstance ();try JdbcSession session = sessionManager. getJdbcSession ();/開始jdbc會(huì)話 相關(guān)業(yè)務(wù)操作 catch (DbException e) finally sessionManager. release ();/需要關(guān)閉會(huì)話2. 數(shù)據(jù)訪問異常的處理DbException是一個(gè)抽象異常類, 它被用來處理SQLException和我們的數(shù)據(jù)訪問異常之間的轉(zhuǎn)換。在數(shù)據(jù)訪問框架中提供了不同數(shù)據(jù)庫對不同DbException的實(shí)現(xiàn)并對每種數(shù)據(jù)庫的SQLErrorCode進(jìn)行了處理,統(tǒng)一轉(zhuǎn)化成不同的方法,通過DbException能夠精確的指定出數(shù)據(jù)訪問過程中所出現(xiàn)的問題。try 數(shù)據(jù)訪問過程 catch (DbException e) /根據(jù)數(shù)據(jù)庫的不同統(tǒng)一異常處理if(e.isBadSQLGrammar()/如果是語法錯(cuò)誤 /to do 相關(guān)處理 if(e.isDataIntegrityViolation()/如果是數(shù)據(jù)一致性錯(cuò)誤 /to do 相關(guān)處理finally /關(guān)閉會(huì)話3. 結(jié)果集合的處理對查詢結(jié)果集合的處理,主要由ResultProcessor類來實(shí)現(xiàn),這是一個(gè)接口 ResultProcessor包含有一個(gè)簡單的方法,不同的ResultProcessor實(shí)現(xiàn)返回不同的結(jié)果對象。系統(tǒng)提供了一系列常用的默認(rèn)實(shí)現(xiàn)。l ArrayProcessor 數(shù)組處理器,返回一個(gè)對象數(shù)組,結(jié)果集中只有一行數(shù)據(jù),其中結(jié)果集中每一列對應(yīng)數(shù)組的一個(gè)元素。l ArrayListProcessor 數(shù)組集合處理器,返回一個(gè)ArrayList集合,集合中的每一個(gè)元素是一個(gè)數(shù)組,每個(gè)數(shù)組對應(yīng)結(jié)果集中的一行數(shù)據(jù),其中結(jié)果集中每一列對應(yīng)數(shù)組的一個(gè)元素。l MapProcessor HashMap處理器,返回一個(gè)HashMap, 結(jié)果集中只有一行數(shù)據(jù),其中結(jié)果集合中每一列的列名和列值對應(yīng)HashMap的一個(gè)關(guān)鍵字和相應(yīng)的值。l MapListProcessor HashMap集合處理器,返回一個(gè)ArrayList集合,集合中的每一個(gè)元素是一個(gè)HashMap,每個(gè)HashMap對應(yīng)結(jié)果集中的一行數(shù)據(jù), 其中結(jié)果集合中每一列的列名和列值對應(yīng)HashMap的一個(gè)關(guān)鍵字和相應(yīng)的值。l BeanProcessor 值對象處理器,返回一個(gè)JavaBean,結(jié)果集中只有一行數(shù)據(jù),該處理器能自動(dòng)把結(jié)果集中的值按列的名稱映射到j(luò)avaBean中,如結(jié)果集中有名稱為”name”的字段,那么只要該java對象中有g(shù)etName()方法就能把結(jié)果集合中”name”對應(yīng)的值映射到對象中。l BeanProcessor 值對象集合處理器,返回一個(gè)ArrayList集合,集合中的每一個(gè)元素是一個(gè)javaBean,每個(gè)javaBean對應(yīng)結(jié)果集合中一行數(shù)據(jù),其中每個(gè)JavaBean中的數(shù)據(jù)映射關(guān)系和BeanProcess同理。l ColumnProcessor 列值處理器,返回一個(gè)Java對象,結(jié)果集中只有一行數(shù)據(jù),該對象對應(yīng)與結(jié)果集中某一列的值,該處理器通過結(jié)果集列的序號或名稱來確定列。l BeanMappingListProcessor:值對象集合處理器,根據(jù)映射信息返回一個(gè)ArrayList集合,集合中的每一個(gè)元素是一個(gè)javaBean,每個(gè)javaBean對應(yīng)結(jié)果集合中一行數(shù)據(jù),其中每個(gè)JavaBean中的數(shù)據(jù)映射關(guān)系和BeanMappingProcess同理l BeanMappingProcessor:值對象處理器,根據(jù)映射信息返回一個(gè)JavaBean,結(jié)果集中只有一行數(shù)據(jù),該處理器能自動(dòng)把結(jié)果集中的值按列的名稱映射到j(luò)avaBean中,如結(jié)果集中有名稱為”name”的字段,那么只要該java對象中有g(shù)etName()方法就能把結(jié)果集合中”name”對應(yīng)的值映射到對象中上述的默認(rèn)實(shí)現(xiàn)并不能滿足所有的業(yè)務(wù)需求,在開發(fā)過程中還需要實(shí)現(xiàn)自定義的結(jié)果集處理器。如:public class CustomProcessor extends BaseProcessor public Object processResultSet(ResultSet rs) throws SQLException 自定義實(shí)現(xiàn) 4. 更新的實(shí)現(xiàn)4.1 無參數(shù)更新數(shù)據(jù)PersistenceManager sessionManager=null;try sessionManager =PersistenceManager. getInstance (); JdbcSession session = sessionManager. getJdbcSession ();/開始jdbc會(huì)話 String sql = update bd_invmandoc set pk_invmandoc =0001AA10000000000DDD where pk_invmandoc=0001AA10000000000DDD ; session.executeUpdate(sql); catch (DbException e) finally if(sessionManager!=null) sessionManager. release ();/需要關(guān)閉會(huì)話4.2 帶參數(shù)更新數(shù)據(jù)PersistenceManager sessionManager=null;try sessionManager =PersistenceManager. getInstance (); JdbcSession session = sessionManager. getJdbcSession ();/開始jdbc會(huì)話String sql = update bd_invmandoc set pk_invmandoc =0001AA10000000000DDD where pk_invmandoc=?”; SQLParameter parameter = new SQLParameter(); 構(gòu)造參數(shù)對象 parameter.addParam(0001AA10000000000DDD);添加參數(shù),JdbcSession會(huì)將參數(shù)對象中的每個(gè)對象放入到預(yù)處理對象的相應(yīng)位置 session.executeUpdate(sql,parameter); catch (DbException e) finally if(sessionManager!=null) sessionManager. release ();/需要關(guān)閉會(huì)話4.3 批量帶參數(shù)更新數(shù)據(jù)PersistenceManager sessionManager=null;try sessionManager =PersistenceManager. getInstance (); JdbcSession session = sessionManager. getJdbcSession ();/開始jdbc會(huì)話 String sql = update bd_invmandoc set pk_invmandoc =0001AA10000000000DDD where pk_invmandoc=? ; SQLParameter parameter = new SQLParameter(); parameter.addParam(0001AA10000000000DDD); session.addBatch(sql, parameter); int rows = session.executeBatch(); catch (DbException e) finally if(sessionManager!=null)sessionManager. release ();/需要關(guān)閉會(huì)話4.4 批量無參數(shù)更新PersistenceManager sessionManager=null;try sessionManager =PersistenceManager. getInstance (); JdbcSession session = sessionManager. getJdbcSession ();/開始jdbc會(huì)話 String sql = update bd_invmandoc set pk_invmandoc =0001AA10000000000DDD where pk_invmandoc= 0001AA10000000000DDD ; session.addBatch(sql); int rows = session.executeBatch(); catch (DbException e) finally if(sessionManager!=null)sessionManager. release ();/需要關(guān)閉會(huì)話5. JdbcSession中特殊參數(shù)類型在JdbcSession中有3中特殊的參數(shù)特性Null,Blob,Clob;使用Null參數(shù)類型PersistenceManager sessionManager=null;try sessionManager =PersistenceManager. getInstance (); JdbcSession session = sessionManager. getJdbcSession ();/開始jdbc會(huì)話 String sql =更新或插入Null字段的SQL語句 SQLParameter parameter = new SQLParameter(); parameter. addNullParam (Types.INTEGER); session.addBatch(sql, parameter); int rows = session.executeBatch(); catch (DbException e) finally if(sessionManager!=null)sessionManager. release ();/需要關(guān)閉會(huì)話 使用Blob參數(shù)類型PersistenceManager sessionManager=null;try sessionManager =PersistenceManager. getInstance (); JdbcSession session = sessionManager. getJdbcSession ();/開始jdbc會(huì)話 String sql =更新或插入Blob字段的SQL語句 SQLParameter parameter = new SQLParameter(); parameter. addBlobParam (new Object(); session.addBatch(sql, parameter); int rows = session.executeBatch(); catch (DbException e) finally if(sessionManager!=null)session.closeAll();/關(guān)閉會(huì)話使用Clob參數(shù)類型SessionManager sessionManager=null;try sessionManager =PersistenceManager. getInstance (); JdbcSession session = sessionManager. getJdbcSession ();/開始jdbc會(huì)話 String sql =更新或插入Clob字段的SQL語句 SQLParameter parameter = new SQLParameter(); parameter. addClobParam (new String(); session.addBatch(sql, parameter); int rows = session.executeBatch(); catch (DbException e) finally if(sessionManager!=null)session.closeAll();/關(guān)閉會(huì)話第三章 對象的持久化通過持久層框架可以很方便的實(shí)現(xiàn)把內(nèi)存中的對象持久化到數(shù)據(jù)庫、把數(shù)據(jù)庫中的關(guān)系數(shù)據(jù)加載到內(nèi)存中。作為入門的一個(gè)例子,我們使用一個(gè)簡單的Java Bean Person類(注意需要進(jìn)行持久化的VO類必須符合Java Bean規(guī)范) 1. 普通Java Bean的持久化1.1 對象定義Person.java/imports implied. public class Person private int id; private String name; int age;public int getId () return id; public void setId (int id) this.id = id; 在定義了Person類以后,需要將Person類映射成數(shù)據(jù)表,需要注意的是目前的持久層對Java Bean和數(shù)據(jù)表之間的關(guān)系有一定限制,如一個(gè)Java Bean只能映射成一個(gè)數(shù)據(jù)表。下面這個(gè)例子,我們使用一個(gè)簡單的表,將一個(gè)表映射成一個(gè)Java Bean,Java Bean和表是一對一的關(guān)系。 Person.sql CREATE TABLE PERSON( ID NUMBER (5, 0) NOT NULL, NAME VARCHAR (40) NOT NULL, AGE NUMBER (3, 0) NOT NULL,PRIMARY KEY (ID) )1.2 構(gòu)造數(shù)據(jù)映射對象負(fù)責(zé)定義數(shù)據(jù)庫與javaBean的映射信息的接口定義如下:public interface IMappingMeta /* * 得到該數(shù)據(jù)庫表的主鍵名稱 * return 主鍵名稱 */ public abstract String getPrimaryKey(); /* * 得到值對象對應(yīng)的表名 * return 表名 */ public abstract String getTableName(); /* * 得到值對象的屬性數(shù)組 * return */ public abstract String getAttributes(); /* * 得到值對象的屬性數(shù)組一一對應(yīng)的表的列名數(shù)組 * return */ public abstract String getColumns();根據(jù)ImappingMeta接口的定義,可以知道任何實(shí)現(xiàn)了ImappingMeta接口的對象映射元數(shù)據(jù)類都必須提供Java bean對應(yīng)的數(shù)據(jù)庫表名稱、主鍵名稱、字段名稱,以及和數(shù)據(jù)庫字段一一對應(yīng)的Java bean對象的屬性名稱。根據(jù)前面的例子我們可以定義Person.java的對象映射元數(shù)據(jù)類PersonVOMeta.java注意對象映射元數(shù)據(jù)類命名規(guī)范為nc.vo.xxx.XXXVOMetaimport nc.jdbc.framework.mapping.IMappingMeta;public class PersonVOMeta implements IMappingMeta private String attributes = new String id, name, age ;private String columns = new String ID, NAME, AGE ;public String getPrimaryKey() return ID;public String getTableName() return Person;public String getAttributes() return attributes;public String getColumns() return columns; 在完成了對象映射元數(shù)據(jù)類后,就剩下的應(yīng)用的編碼工作了。為簡化這個(gè)工作,在NC系統(tǒng)中提供了nc.bs.dao.BaseDAO,該類是數(shù)據(jù)庫訪問幫助類封裝了常用的持久層訪問操作,提供了IUAPQueryBS和IVOPersistence以及superDMO中的所有方法。建議新的代碼都使用BaseDAO。BaseDAO daonew BaseDAO()/使用默認(rèn)的數(shù)據(jù)源BaseDAO dao=new BaseDAO(dataSource)/使用指定的數(shù)據(jù)源1.3 對象讀取BaseDAO對象已完成初始化,就可以方便地使用它了。首先,我們用它從數(shù)據(jù)庫中讀取一個(gè)Person對象。(在本例中,假設(shè)PERSON表中已存在10條記錄,ID從1到10)。 要從數(shù)據(jù)庫中得到一個(gè)Person對象,只需要BaseDAO實(shí)例。讓我們讀入ID是5的Person對象。BaseDAO dao=new BaseDAO();PersonVOMeta meta=new PersonVOMeta();dao.retrieveByClause(Person.class,meta,id=5);1.4 對象寫入現(xiàn)在創(chuàng)建一個(gè)Person對象,并將它寫入數(shù)據(jù)庫。 BaseDAO dao=new BaseDAO();Person person=new Person();person.setName(“tom”);person.setAge(“20”);PersonVOMeta meta=new PersonVOMeta();dao.insertObject(person,meta);/默認(rèn)會(huì)自動(dòng)為Person對象生成主鍵如果想要保留Person類中的主鍵并插入到數(shù)據(jù)表中應(yīng)該使用dao.insertObjectWithPK(person,meta);1.5 對象更新 現(xiàn)在利用Person對象,更新數(shù)據(jù)庫中的ID=4的對應(yīng)數(shù)據(jù)BaseDAO dao=new BaseDAO();Person person=new Person();Person.setId(4);person.setName(“tom”);person.setAge(“20”);PersonVOMeta meta=new PersonVOMeta();dao.updateObject(person,meta); 1.6 對象刪除 現(xiàn)在利用Person對象,刪除數(shù)據(jù)庫中的ID=4的對應(yīng)數(shù)據(jù)BaseDAO dao=new BaseDAO();Person person=new Person();Person.setId(“4”);PersonVOMeta meta=new PersonVOMeta();dao.deleteObject (person,meta);BaseDAO針對Java Bean的持久化(CRUD操作)提供了各種應(yīng)用不同的方法,具體使用方法和功能請參考BaseDAO的JavaDoc。2. SuperVO的持久化 SuperVO是NC系統(tǒng)中比較特殊的值對象,該值對象自身已經(jīng)包涵了值對象到數(shù)據(jù)庫中的映射信息,所以SuperVO的持久化更為簡單方便,無需構(gòu)造對象映射元數(shù)據(jù)類,可以直接對VO進(jìn)行持久化操作。查詢操作:BaseDAO dao=new BaseDAO();Collection vos=dao. retrieveAll (XXXSuperVO.class);/查詢數(shù)據(jù)表中所有數(shù)據(jù)到對象集合中更新操作BaseDAO dao=new BaseDAO();XXXSuperVO vo=new XXXSuperVO();dao. updateVO (vo) ;刪除操作BaseDAO dao=new BaseDAO();XXXSuperVO vo=new XXXSuperVO();dao. deleteVO (vo); 插入操作BaseDAO dao=new BaseDAO();XXXSuperVO vo=new XXXSuperVO();dao. insertVO (vo); BaseDAO針對SuperVO的持久化(CRUD操作)提供了各種應(yīng)用不同的方法,具體使用方法和功能請參考BaseDAO的JavaDoc第四章 常用的API的使用1 PersistenceManager該類主要解決復(fù)雜數(shù)據(jù)的查詢(聯(lián)查)和復(fù)用數(shù)據(jù)庫連接的方式,該類能在一個(gè)復(fù)雜業(yè)務(wù)中復(fù)用一個(gè)連接,需要最后在業(yè)務(wù)結(jié)束的時(shí)候手動(dòng)的關(guān)閉連接 ,使用該類的優(yōu)點(diǎn)是在做復(fù)雜業(yè)務(wù)的時(shí)候復(fù)用連接能夠提高性能,缺點(diǎn)是需要人為關(guān)閉連接,如果在開發(fā)過程中忘記關(guān)閉了連接會(huì)導(dǎo)致連接泄露的系統(tǒng)問題。該類建議的使用方法如下:PersistenceManager persistence=null;try persistence= PersistenceManager.getInstance(數(shù)據(jù)源)JdbcSession session= persistence. getJdbcSession();/數(shù)據(jù)調(diào)用1Session.delete()/數(shù)據(jù)庫調(diào)用2Session.insert()/數(shù)據(jù)庫調(diào)用3Session. excuteQuery ()/或其它方法調(diào)用傳入SessionObject o=Call method(Session); catch (DAOException e) Throws new xxBusinessRunTimeException(“”);finalyPersistence. Release();PersistenceManager包括supervo及obj maping的查詢和持久化,PersistenceManager具體提供的方法和功能請參考PersistenceManager的JavaDoc.2 IVOPersistence持久化機(jī)制接口該接口提供基本的單表操作,分為支持SuperVO和普通Java Bean,對于通用持久化或泛化持久化,無任何業(yè)務(wù)邏輯的insert、update、delete操作強(qiáng)烈建議前臺(tái)使用該接口,需要業(yè)務(wù)邏輯的持久化操作必須使用具體的名稱來完成業(yè)務(wù)方法的Service聲明。IVOPersistence具體提供的方法和功能請參考IVOPersistence的JavaDoc.調(diào)用機(jī)制private IVOPersistence getVOPersistence() throws BusinessException if (iVOPersistence = null)try iVOPersistence = (IVOPersistence) NCLocator.getInstance().lookup(IVOPersistence.class.getName(); catch (ComponentException e) throw new SysInitException(IUAPQueryBS not found!);return iVOPersistence;3 IUAPQueryBS接口數(shù)據(jù)庫查詢接口,該接口提供基本的單表查詢操作,支持SuperVO和其它任何含有映射原數(shù)據(jù)的javaBean的實(shí)現(xiàn)機(jī)制, IUAPQueryBS具體提供的方法和功能請參考IUAPQueryBS的JavaDoc。調(diào)用機(jī)制private IUAPQueryBS getUAPQuery() throws BusinessException if (iIUAPQueryBS = null)try iIUAPQueryBS = (IUAPQueryBS) NCLocator.getInstance().lookup(IUAPQue
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025下半年四川雅安天全縣事業(yè)單位招聘19人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年北京市國土資源局事業(yè)單位招聘2人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上海市教育考試院公開招聘4人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年浙江省安吉縣機(jī)關(guān)事業(yè)單位招聘73人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年江蘇省南通啟東市事業(yè)單位招聘84人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年四川省自貢榮縣事業(yè)單位考試聘用110人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年四川省內(nèi)江市市中區(qū)部分事業(yè)單位招聘72人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半四川南充經(jīng)濟(jì)開發(fā)區(qū)應(yīng)急響應(yīng)中心招聘歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 高等院校教師聘用合同樣稿
- 游艇俱樂部內(nèi)墻翻新刮瓷協(xié)議
- 多圖中華民族共同體概論課件第十三講先鋒隊(duì)與中華民族獨(dú)立解放(1919-1949)根據(jù)高等教育出版社教材制作
- 口才與演講實(shí)訓(xùn)教程智慧樹知到期末考試答案2024年
- 指導(dǎo)農(nóng)戶科學(xué)種植工作總結(jié)報(bào)告
- 2020年10月自考00094外貿(mào)函電試題及答案含解析
- 中等職業(yè)學(xué)校教研教改工作總結(jié)
- 麻醉醫(yī)學(xué)知識培訓(xùn)培訓(xùn)課件
- 藥店銷售技巧與顧客引導(dǎo)
- 人教版四年級上冊數(shù)學(xué) 第五單元《平行四邊形和梯形》單元專項(xiàng)訓(xùn)練 作圖題(含答案)
- 廣東工業(yè)大學(xué)計(jì)量經(jīng)濟(jì)學(xué)試題庫(里面選題)
- 物業(yè)品質(zhì)督導(dǎo)述職報(bào)告
- 68內(nèi)蒙古自治區(qū)包頭市青山區(qū)2023-2024學(xué)年八年級上學(xué)期期末語文試題
評論
0/150
提交評論