spring框架提供了純JDBC的實現方式可以在要求高性能和靈活性的程序中使用sql語句進行開發,Spring JDBC框架有4個部分組成,即core、datasource、object、support.
core包:提供了JDBC模板類,其中jdbcTemplate是Core包的核心類。
datasource包:提供了簡化JDBC數據源的工具類並提供了一些DataSource簡單實現類,從而使這些DataSource獲取的鏈接能自動得到Spring事務管理的支持
object包:提供關系數據對象表示形式,如 MappingSQLQuery、SQLUpdate、SQLCall、SQLFunction等。
support包:提供將JDBC異常轉換為DAO費檢查異常的轉換類和一些工具類。
下面講解jdbcTemplate的基本實現步驟:
1.導入org.springframework.jdbc-*.jar,如圖所示:
<bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${divername}"></property> <!--驅動類配置--> <property name="url" value="${utl}"></property><!--數據庫連接url--> <property name="username" value="${username}"></property><!--數據庫用戶名--> <property name="password" value="${passworld}"></property><!--數據庫密碼--> </bean>
c3p0數據源配置:
c3p0的數據原配置需要引入一個jar包如圖所示:
<bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${divername}"></property> <!--驅動類配置--> <property name="jdbcUrl" value="${url}"></property><!--數據庫連接url--> <property name="user" value="${username}"></property><!--數據庫用戶名--> <property name="password" value=""></property><!--數據庫密碼--> </bean>
dbcp數據原配置:
dbcp數據源的配置同樣需要引入jar包如圖所示:
<bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="${divername}"></property> <!--驅動類配置--> <property name="url" value="${utl}"></property><!--數據庫連接url--> <property name="username" value="${username}"></property><!--數據庫用戶名--> <property name="password" value="${passworld}"></property><!--數據庫密碼--> </bean>
3.在applicationContext.xml配置文件中配置jdbcTemplate,並為其注入dataSource。
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="datasource"/> </bean>
4.編寫Dao接口即實現類並在其方法中使用jdbcTemplate API實現數據庫操作。
String departmentName=(String)getJdbcTemplate().execute( new CallableStatementCreator() { @Override public CallableStatement createCallableStatement(Connection con) throws SQLException { String storedProc="{調用存儲過程的sql語句}"; CallableStatement cs=con.prepareCall(storedProc); cs.setString(1,"sdfd");//向存儲過程中傳入String類型的輸入參數(第一個是參數的下標從1開始第二個是參數值) cs.registerOutParameter(2,Types.VARCHAR);//向存儲過程中傳入輸出參數 return cs; } },new CallableStatementCallback() { @Override public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException { cs.execute(); return cs.getString(2); } } );