一、JDBC
1、JDBC的編程特點
靜態代碼+動態變量 = jdbc編程。在spring中動態變量可以用注入的形式給予。這樣的編程方式適合包裝成模板。靜態代碼構成了模板,而動態變量則是需要傳入的參數。
2、Spring引入JDBC
配置文件中配置數據庫的連接
1
2
3
4
5
6
7
8
9
|
<!--
配置dbcp的數據庫連接池
-->
<
bean
id
=
"dataSource"
class
=
"org.apache.commons.dbcp.BasicDataSource"
>
<
property
name
=
"driverClassName"
value
=
"com.mysql.jdbc.Driver"
/>
<
property
name
=
"username"
value
=
"root"
/>
<
property
name
=
"password"
value
=
"root"
/>
</
bean
>
|
配置好后,我們就可以在客戶端進行連接了,下面說些JdbcTemplate的事情。
首先我們看下JdbcTemplate類,我們找到第一個划紅圈的地方,就是我們在spring中配置的DataSource注入到JdbcTemplate中,我們就可以使用JdbcTemplate模板了。
JdbcTemplate把所有的對數據庫的操作都封裝在了一起,第二個紅圈就是我們想要的結果,這樣省去了我們自己寫的函數了,很像是別人寫的類我們直接拿來用一樣。。。。
那我們怎樣把DataSource傳遞給JdbcTemplate呢?
下面我們看看這些相關的類是怎樣調用的,也就是怎樣依賴注入的
這樣我們就可以看出來他們的關系了,那我們就可以很直接的在客戶端將DataSource注入到JdbcTemplate中了
下面介紹三種方案來進行注入。。。
(1)客戶端通過繼承JdbcDaoSupport來進行注入
在JdbcDaoTemplate中有個setDataSource的set方法我們就可以注入datasource
然后調用createJdbcTemplate
之后在調用JdbcTemplate
這樣才真正的傳入datasource了,相關的配置文件如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<!--
配置dbcp的數據庫連接池
-->
<
bean
id
=
"dataSource"
class
=
"org.apache.commons.dbcp.BasicDataSource"
>
<
property
name
=
"driverClassName"
value
=
"com.mysql.jdbc.Driver"
/>
<
property
name
=
"username"
value
=
"root"
/>
<
property
name
=
"password"
value
=
"root"
/>
</
bean
>
<
bean
id
=
"personDao"
class
=
"cn.itcast.spring0909.jdbc.PersonDaoImpl"
>
<
property
name
=
"dataSource"
>
<
ref
bean
=
"dataSource"
/>
</
property
>
</
bean
>
|
(2)直接引入JdbcTemplate就行了
相關的配置文件如下:
1
2
3
4
5
6
7
8
9
10
11
|
<
bean
id
=
"jdbcTemplate"
class
=
"org.springframework.jdbc.core.JdbcTemplate"
>
<
property
name
=
"dataSource"
>
<
ref
bean
=
"dataSource"
/>
</
property
>
</
bean
>
<
bean
id
=
"personDao2"
class
=
"cn.itcast.spring0909.jdbc.PersonDaoImpl2"
>
<
property
name
=
"jdbcTemplate"
>
<
ref
bean
=
"jdbcTemplate"
/>
</
property
>
</
bean
>
|
(3)直接繼承JdbcTemplate,通過構造函數向他的父類中傳入datasource
相關的配置文件如下:
1
2
3
|
<
bean
id
=
"personDao3"
class
=
"cn.itcast.spring0909.jdbc.PersonDaoImpl2"
>
<
constructor-arg
index
=
"0"
ref
=
"dataSource"
></
constructor-arg
>
</
bean
>
|
二、RowMapper的使用
可以通過建立內部類實現RowMapper接口,RowMapper中有一個mapRow方法,所以實現RowMapper接口一定要實現mapRow方法,而對自定義類的包裝就在mapRow方法中實現.
下面說下他的原理是什么樣的。。。就像我們自己寫的RowMapper接口一樣,只是spring中已經封裝好了此類。