Apache iBatis(現已遷至Google Code下發展,改名爲MyBatis)是當前IT項目中使用很普遍的一個半自動ORM框架,區別於Hibernate之類的全自動框架,iBatis對數據庫的操做擁有更加靈活的控制,對於那些常常須要調用本地數據庫函數自定義SQL語句,或是喜歡本身優化SQL執行效率的開發者來講,iBatis是一個很是不錯的選擇。而獲得普遍應用的開源企業架構SpringFramework,也很好的將其進行了集成,使得iBatis在 SpringFramework中的使用更加便利、快捷。開發者所要作的就是繼承SpringFramework中提供的 SqlMapClientDaoSupport類便可。下面,我將本身的使用經驗與你們分享一下:spring
一、SqlMapClientFactoryBean 的裝配sql
SqlMapClientFactoryBean是SqlMapClientTemplate使用的基礎,若是在數據庫
SpringFramework應用中沒有裝配SqlMapClientFactoryBean,那麼SqlMapClientTemplate將不可用,報空指針錯誤。架構
Java代碼oracle
- <beanid="sqlMapClient"class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
- <propertyname="configLocation"value="/WEB-INF/sqlmap-config.xml"/>
- <propertyname="dataSource"ref="dataSource"/>
- <propertyname="lobHandler"ref="oracleLobHandler"/>
- bean>
二、繼承使用SqlMapClientDaoSupport類框架
聲明Java類:函數
Java代碼post
- ......
- import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
- ......
- publicclass ReportDAOImpl extends SqlMapClientDaoSupport {
- ......
- }
- SpringFramework配置文件中裝配Java類:
- "reportDao"class="com.test.dao.ReportDAOImpl">
- "sqlMapClient" ref="sqlMapClient"/>
SpringFramework配置文件中裝配Java類:優化
三、使用SqlMapClientTemplate查詢spa
Java代碼:
當執行沒有參數的查詢時:
Java代碼
- List result = getSqlMapClientTemplate().queryForList("TestSpace.qryTest");
"TestSpace"爲iBatis SqlMap文件的命名空間;"qryTest"爲iBatis SqlMap的查詢方法id
當按照主鍵獲取某條記錄信息時:
Java代碼
- Long id = new Long("2");
- Object resultObj = getSqlMapClientTemplate().queryForObject("TestSpace.getTest", id);
當按照某些條件查詢時:
Java代碼
- ObjectA objA = new ObjectA();
- objA.setParam1("test1");
- objA.setParam2("test2");
- ......
- List result = getSqlMapClientTemplate().queryForList("TestSpace.qryTestByParam", objA);
若是須要取4~40條數據:
List result = getSqlMapClientTemplate().queryForList("TestSpace.qryTestByParam", objA, 4, 40);
也能夠返回Map
Java代碼
- Map result = getSqlMapClientTemplate().queryForMap("TestSpace.qryTestByParam", objA, "MapKey");
四、使用SqlMapClientTemplate添加數據
Java代碼:
- ObjectA objA = new ObjectA();
Java代碼
- objA.setParam1("test1");
- objA.setParam2("test2");
- ......
- getSqlMapClientTemplate().insert("TestSpace.insertTest", objA);
五、使用SqlMapClientTemplate更新數據
Java代碼:
Java代碼
- ObjectA objA = new ObjectA();
- objA.setParam1("test1");
- objA.setParam2("test2");
- ......
- getSqlMapClientTemplate().update("TestSpace.updateTest", objA);
更新前20條記錄:
Java代碼
- getSqlMapClientTemplate().update("TestSpace.updateTest", objA, 20);
六、使用SqlMapClientTemplate刪除數據
Java代碼:
Java代碼
- Long id = new Long("2");
- getSqlMapClientTemplate().delete("TestSpace.deleteTest", id);