使用iBatis
簡介
使用SQL Map,能夠大大減少訪問關系數據庫的代碼。SQL Map使用簡單的XML配置文件將Java Bean映射
成SQL語句,對比其他的數據庫持續層和ORM框架(如JDO的實現,Hibernate等),SQL Map最大的優點在
于它簡單易學。要使用SQL Map,只要熟悉Java Bean,XML和SQL,就能使您充分發揮SQL語句的能力。
1.? com.ibatis.sqlmap.client.SqlMapClient
?一個使用SQL Maps(從這個類開始運行的)的,線程安全的客戶端。這個接口通過繼承
SqlMapTransactionManager和SqlMapExecutor接口獲得了事務控制和執行方法。
?SqlMapClient是使用SQL Maps 的核心類。這個類將允許你映射操作語句(select、insert、
update、delete等),而且還劃分了事務界線并能使用批處理。一旦你擁有了一個SqlMapClient實例,你
使用SQL 映射變得足夠簡單。
?SqlMapClient能夠直接作為多線程客戶端使用(內部session管理),或者你也能得到一個單線程
的session并且使用它。如果你明確的獲得一個session(使用 openSession()方法)的話,這里可能有一
點輕微性能的提升,因為這樣節省了SqlMapClient管理線程上下文信息的開銷。但是在大多數的情況下
,這不會產生什么不同,因此你可以選擇任意一個你需要或喜歡的方式。
?一個SqlMapClient實例可以被安全地作為靜態的,或者實現為一個單例。一般來說,好的想法
是,做成一個簡單的配置類,而通過SqlMapClientBuilder去配置這個類的事例。
?其實就是客戶端程序員進行Sql Map操作的客戶端類。
SQL Maps (com.ibatis.sqlmap.*)
SQL Map的概念
SQL Map API讓開發人員可以輕易地將Java Bean映射成PreparedStatement的輸入參數和ResultSet結果
集。開發SQL Map的想法很簡單:提供一個簡潔的架構,能夠用20%的代碼實現80%JDBC的功能。
SQL Map如何工作?
SQL Map提供了一個簡潔的框架,使用簡單的XML描述文件將Java Bean,Map實現和基本數據類型的包裝
類(String,Integer等)映射成JDBC的PreparedStatement。以下流程描述了SQL Maps的高層生命周期
:
將一個對象作為參數(對象可以是Java Bean,Map實現和基本類型的包裝類),參數對象將為SQL修改語
句和查詢語句設定參數值。
1) 執行mapped statement。這是SQL Maps最重要的步驟。SQL Map框架將創建一個PreparedStatement實
例,用參數對象為PreparedStatement實例設定參數,執行PreparedStatement并從ResultSet中創建結果
對象。
2) 執行SQL的更新數據語句時,返回受影響的數據行數。執行查詢語句時,將返回一個結果對象或對象
的集合。和參數對象一樣,結果對象可以是Java Bean,Map實現和基本數據類型的包裝類。
?下面是使用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框架