歡迎使用我的 在線工具

          小D

          讀歷史、看小說、寫程序都是我所愛。技術(shù)不好,頭腦不靈光,靠的是興趣。
          隨筆 - 35, 文章 - 25, 評論 - 13, 引用 - 0
          數(shù)據(jù)加載中……

          使用iBatis

          簡介
          使用SQL Map,能夠大大減少訪問關(guān)系數(shù)據(jù)庫的代碼。SQL Map使用簡單的XML配置文件將Java Bean映射

          成SQL語句,對比其他的數(shù)據(jù)庫持續(xù)層和ORM框架(如JDO的實(shí)現(xiàn),Hibernate等),SQL Map最大的優(yōu)點(diǎn)在

          于它簡單易學(xué)。要使用SQL Map,只要熟悉Java Bean,XML和SQL,就能使您充分發(fā)揮SQL語句的能力。

          1.? com.ibatis.sqlmap.client.SqlMapClient
          ?一個使用SQL Maps(從這個類開始運(yùn)行的)的,線程安全的客戶端。這個接口通過繼承

          SqlMapTransactionManager和SqlMapExecutor接口獲得了事務(wù)控制和執(zhí)行方法。
          ?SqlMapClient是使用SQL Maps 的核心類。這個類將允許你映射操作語句(select、insert、

          update、delete等),而且還劃分了事務(wù)界線并能使用批處理。一旦你擁有了一個SqlMapClient實(shí)例,你

          使用SQL 映射變得足夠簡單。
          ?SqlMapClient能夠直接作為多線程客戶端使用(內(nèi)部session管理),或者你也能得到一個單線程

          的session并且使用它。如果你明確的獲得一個session(使用 openSession()方法)的話,這里可能有一

          點(diǎn)輕微性能的提升,因?yàn)檫@樣節(jié)省了SqlMapClient管理線程上下文信息的開銷。但是在大多數(shù)的情況下

          ,這不會產(chǎn)生什么不同,因此你可以選擇任意一個你需要或喜歡的方式。
          ?一個SqlMapClient實(shí)例可以被安全地作為靜態(tài)的,或者實(shí)現(xiàn)為一個單例。一般來說,好的想法

          是,做成一個簡單的配置類,而通過SqlMapClientBuilder去配置這個類的事例。
          ?其實(shí)就是客戶端程序員進(jìn)行Sql Map操作的客戶端類。
          SQL Maps (com.ibatis.sqlmap.*)
          SQL Map的概念
          SQL Map API讓開發(fā)人員可以輕易地將Java Bean映射成PreparedStatement的輸入?yún)?shù)和ResultSet結(jié)果

          集。開發(fā)SQL Map的想法很簡單:提供一個簡潔的架構(gòu),能夠用20%的代碼實(shí)現(xiàn)80%JDBC的功能。
          SQL Map如何工作?
          SQL Map提供了一個簡潔的框架,使用簡單的XML描述文件將Java Bean,Map實(shí)現(xiàn)和基本數(shù)據(jù)類型的包裝

          類(String,Integer等)映射成JDBC的PreparedStatement。以下流程描述了SQL Maps的高層生命周期


          將一個對象作為參數(shù)(對象可以是Java Bean,Map實(shí)現(xiàn)和基本類型的包裝類),參數(shù)對象將為SQL修改語

          句和查詢語句設(shè)定參數(shù)值。
          1) 執(zhí)行mapped statement。這是SQL Maps最重要的步驟。SQL Map框架將創(chuàng)建一個PreparedStatement實(shí)

          例,用參數(shù)對象為PreparedStatement實(shí)例設(shè)定參數(shù),執(zhí)行PreparedStatement并從ResultSet中創(chuàng)建結(jié)果

          對象。
          2) 執(zhí)行SQL的更新數(shù)據(jù)語句時,返回受影響的數(shù)據(jù)行數(shù)。執(zhí)行查詢語句時,將返回一個結(jié)果對象或?qū)ο?/p>

          的集合。和參數(shù)對象一樣,結(jié)果對象可以是Java Bean,Map實(shí)現(xiàn)和基本數(shù)據(jù)類型的包裝類。


          ?下面是使用SqlMapClient的示例代碼:
          ?//
          ?// autocommit simple query --these are just examples...not patterns
          ?//
          ?
          ?Employee emp = (Employee) sqlMap.queryForObject("getEmployee", new Integer(1));
          ?
          ?//
          ?// transaction --these are just examples...not patterns
          ?//
          ?
          ?try {
          ?? sqlMap.startTransaction()
          ?? Employee emp2 = new Employee();
          ?? // ...set emp2 data
          ?? Integer generatedKey = (Integer) sqlMap.insert ("insertEmployee", emp2);
          ?? emp2.setFavouriteColour ("green");
          ?? sqlMap.update("updateEmployee", emp2);
          ?? sqlMap.commitTransaction();
          ?} finally {
          ?? sqlMap.endTransaction();
          ?}
          ?
          ?//
          ?// session --these are just examples...not patterns
          ?//
          ?
          ?try {
          ?? SqlMapSession session = sqlMap.openSession()
          ?? session.startTransaction()
          ?? Employee emp2 = new Employee();
          ?? // ...set emp2 data
          ?? Integer generatedKey = (Integer) session.insert ("insertEmployee", emp2);
          ?? emp2.setFavouriteColour ("green");
          ?? session.update("updateEmployee", emp2);
          ?? session.commitTransaction();
          ?} finally {
          ?? try {
          ???? session.endTransaction();
          ?? } finally {
          ???? session.close();
          ?? }
          ?? // Generally your session scope would be in a wider context and therefore the
          ?? // ugly nested finally block above would not be there.? Realize that sessions
          ?? // MUST be closed if explicitly opened (via openSession()).
          ?}
          ?
          ?//
          ?// batch --these are just examples...not patterns
          ?//
          ?
          ?try {
          ?? sqlMap.startTransaction()
          ?? List list = (Employee) sqlMap.queryForList("getFiredEmployees", null);
          ?? sqlMap.startBatch ();
          ?? for (int i=0, n=list.size(); i < n; i++) {
          ???? sqlMap.delete ("deleteEmployee", list.get(i));
          ?? }
          ?? sqlMap.executeBatch();
          ?? sqlMap.commitTransaction();
          ?} finally {
          ?? sqlMap.endTransaction();
          ?}


          ?

          posted on 2009-11-04 21:10 vagasnail 閱讀(416) 評論(0)  編輯  收藏 所屬分類: Java框架


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 泌阳县| 新巴尔虎右旗| 师宗县| 砚山县| 衡东县| 苍山县| 安庆市| 赫章县| 尚义县| 林州市| 金塔县| 绍兴市| 汕尾市| 萨嘎县| 科技| 曲沃县| 秦皇岛市| 绥滨县| 渭源县| 华坪县| 桂平市| 大姚县| 武山县| 宣威市| 太和县| 陈巴尔虎旗| 新晃| 静宁县| 蒙阴县| 乐东| 贡山| 新乡市| 安康市| 无为县| 西充县| 灵璧县| 绥宁县| 大理市| 永昌县| 吕梁市| 黎城县|