iBATIS用法之SqlMapTemplate內部類詳解
iBATIS用法中的SqlMapTemplate類主要查找和String statementName相對應的MappedStatement對象,并調用MappedStatement的相應的方法,但SqlMapTemplate的查詢方法,都有以下的幾個操作。
1、必須先判斷XML文件中是否定義String statementName;
2、如果如果存在則生成相應的MappedStatement對象;
3、并且獲得該線程所對應的Connection對象;
4、然后調用MappedStatement對象相應的操作數據庫的方法;
5、釋放Connection對象等。
在以上iBATIS用法其中只有第4步每個方法會有所變化,其他的方法都一樣。SqlMapTemplate不用的方法第4步調用MappedStatement的不同方法,但參數都一樣。
抽象類SqlMapCallback的代碼如下:
- public interface SqlMapCallback {
- Object doInMappedStatement(MappedStatement stmt, Connection con) throws SQLException;
- }
實現類SqlMapTemplate的調用抽象的方法代碼如下:
- public Object execute(String statementName, SqlMapCallback action) throws DataAccessException {
- Assert.notNull(this.sqlMap, "No SqlMap specified");
- MappedStatement stmt = this.sqlMap.getMappedStatement(statementName);
- Connection con = DataSourceUtils.getConnection(getDataSource());
- try {
- return action.doInMappedStatement(stmt, con);
- }
- catch (SQLException ex) {
- throw getExceptionTranslator().translate("SqlMap operation", null, ex);
- }
- finally {
- DataSourceUtils.releaseConnection(con, getDataSource());
- }
- }
SqlMapTemplate方法中調用內部抽象方法,并實現內部類抽象方法的方法體代碼如下。
- public Object executeQueryForObject(String statementName, final Object parameterObject)
- throws DataAccessException {
- return execute(statementName, new SqlMapCallback() {
- public Object doInMappedStatement(MappedStatement stmt, Connection con) throws SQLException {
- return stmt.executeQueryForObject(con, parameterObject);
- }
- });
- }
iBATIS用法之SqlMapTemplate內部類的介紹就向你講解到這里,希望對你有所幫助。
【編輯推薦】