五、Spring 持久層
對(duì)于不同的數(shù)據(jù)庫技術(shù),某些步驟是固定的,只有少部分不同。Spring運(yùn)用Template Method模式,將固定的流程編寫與Temp類(JdbcTemplate、HibernateTemplate)之中,對(duì)不同的一些細(xì)節(jié)步驟,依托特定DAO支持對(duì)象來處理。
Spring的DAO框架并不拋出與數(shù)據(jù)庫技術(shù)相關(guān)的異常,Spring所有異常都是DataAccessException的子類,一個(gè)與數(shù)據(jù)庫技術(shù)無關(guān)的通用異常類,該類繼承至RuntimeException。
對(duì)于Jdbc存取,Spring將SQLException等轉(zhuǎn)化為自己的DAO異常對(duì)象。
DataSource注入
對(duì)于不同的數(shù)據(jù)庫鏈接來源需求,Spring提供了javax.sql.DataSource注入,更換數(shù)據(jù)來源只需在Bean定義文件中修改配置,不需修改程序代碼。
例如可以在Bean文件中編寫如下:

2

3

4

5

6

7

8

9

10

11

要建立JdbcTemplate的實(shí)例,

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

使用JdbcTemplate
JdbcTemplate封裝了Connection的取得,Statement的建立,異常的處理,Statement的關(guān)閉,Connection的關(guān)閉等。它被設(shè)計(jì)為線程安全的。
要建立JdbcTemplate的實(shí)例,必須要有一個(gè)DataSource對(duì)象作為構(gòu)造對(duì)象。
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
Spring事務(wù)管理
Spring提供編程式事務(wù)管理與聲明式事務(wù)管理。
編程式事務(wù)管理
Spring提供了兩種方式實(shí)現(xiàn)編程式事務(wù)管理:使用PlatformTransactionManager實(shí)現(xiàn);使用org.springframework.transaction.support.TransactionTemplate。
PlatformTransactionManager接口定義如下:

2

3

4

5

DataSourceTransactionManager是其一個(gè)實(shí)現(xiàn)類。
修改添加新用戶的代碼段作為示例:

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

另一個(gè)編程式事務(wù)管理方法是使用TransactionTemplate,它需要一個(gè)TransactionManager實(shí)例,如下:

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

聲明式事務(wù)管理
Spring的聲明式事務(wù)管理依賴于它的AOP框架來完成,使用聲明式的事務(wù)管理的好處是,事務(wù)管理不侵入開發(fā)的組件。
定義文件如下:

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18
