Spring
:
JdbcTemplate
使用指南
著作權,轉載請註明出處:http://blog.csdn.net/nomads
PDF 下載: 點此處
前言:
本文指在介紹Spring架構中的JdbcTemplate類的使用方法,涉及基本的Spring反轉控制的使用方法和JDBC的基本概念。目標是使讀者能夠對JdbcTemplate快速地掌握和使用。
準備:
1. Spring的基本概念
Spring架構核心的思想就是建立一個Java對象的大工廠,使用者只要給工廠一個指令,工廠就能將使用者需要的對象根據設定檔群組裝好返還給使用者。使用者需要做的許多工作則可以寫成簡單的設定檔。
2. 醜陋的JDBC代碼
Connection con= null; PreparedStatement pStmt=null; ResultSet rs = null; try{ con = ods.getConnection(); String sql = "select * from admin"; pStmt=con.prepareStatement(sql); rs=pStmt.executeQuery(); while(rs.next()) { } } catch(Exception ex) { try{ con.rollback(); }catch(SQLException sqlex){ sqlex.printStackTrace(System.out); } ex.printStackTrace(); }finally{ try{ rs.close(); pStmt.close(); con.close(); }catch(Exception e){e.printStackTrace();} } |
以上是常見的JDBC代碼,簡單的select語句也需要冗長的出錯處理,並且每個函數都不斷地重複同樣的代碼。
3. JdbcTemplate的作用
JdbcTemplate正是為了減少上述繁瑣的代碼而設計出來的。它是對JDBC的一種封裝,抽象我們常用的一些方法。Simple and Stupid就是它的目標。下面是完成了剛才JDBC代碼同樣功能的JdbcTemplate的代碼:
String sql = "select * from admin"; jdbcTemplate.query(sql,new RowCallbackHandler() { public void processRow(ResultSet rs) throws SQLException { } } ); |
環境搭建:
1. 資料庫的配置
本文使用Oracle資料庫,建立表admin:
create table admin ( ID number(10) primary key, NAME varchar2(64), PASSWORD varchar2(64) ) |
2. Spring配置
JdbcTemplate的使用需要有DataSource的支援,所以在設定檔中,我們首先要配置一個OracleDataSource,然後在將這個DataSource配置到JdbcTemplate裡。接著將JdbcTemplate配置進DAO層,最後將DAO配置進Model層。簡要的關係如下:
<!--[if !vml]--><!--[endif]-->
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource"> <property name="URL"> <value>jdbc:oracle:thin:root/123@localhost:1521/XE</value> </property> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource"><ref bean="dataSource"/></property> </bean> <bean id="userDAO" class="DAO.Imp.UserDAOImp"> <property name="jdbcTemplate"> <ref bean="jdbcTemplate" /> </property> </bean> <bean id="user" class="Model.User"> <property name="dao"><ref bean="userDAO"/></property> </bean> </beans> |
3. 環境配置, 如圖:
<!--[if !vml]--><!--[endif]-->
使用方法:
<!--[if !supportLists]-->1. <!--[endif]-->尋找
多行查詢:
class UserRowMapper implements RowMapper { public Object mapRow(ResultSet rs,int index) throws SQLException { User u = new User(); u.setId(rs.getString("ID")); u.setName(rs.getString("Name")); u.setPassword(rs.getString("Password")); return u; } } public List select(String where) { List list; String sql = "select * from admin "+where; list = jdbcTemplate.query(sql,new RowMapperResultReader(new UserRowMapper())); return list; } |
List最終返回的是滿足條件的User隊列。
單行查詢:
public User selectById(String id){ String sql = "select * from admin where id=?"; final User u = new User(); final Object[] params = new Object[] {id}; jdbcTemplate.query(sql, params, new RowCallbackHandler(){ public void processRow(ResultSet rs) throws SQLException { u.setId(rs.getString("ID")); u.setName(rs.getString("NAME")); u.setPassword(rs.getString("PASSWORD")); } }); &n |