官术网_书友最值得收藏!

4.2 Spring JdbcTemplate的常用方法

在JdbcTemplate類中提供了大量更新和查詢數(shù)據(jù)庫的方法,我們就是使用這些方法來操作數(shù)據(jù)庫的。本節(jié)將介紹這些方法的使用。

4.2.1 execute()——執(zhí)行SQL語句

execute(String sql)方法能夠完成執(zhí)行SQL語句的功能。

【示例4-1】下面以創(chuàng)建數(shù)據(jù)表的SQL語句為例演示此方法的使用,具體步驟如下。

步驟01 在MySQL中創(chuàng)建一個名為db_spring的數(shù)據(jù)庫,如圖4.1所示。

圖4.1 創(chuàng)建數(shù)據(jù)庫

在圖4.1中,首先使用SQL語句創(chuàng)建了數(shù)據(jù)庫db_spring,然后選擇使用db_spring。為了便于后續(xù)驗(yàn)證數(shù)據(jù)表是通過execute( String sql)方法執(zhí)行創(chuàng)建的,這里使用了show tables語句查看數(shù)據(jù)庫中的表,其結(jié)果顯示為空。

步驟02 在Eclipse中創(chuàng)建一個名為chapter04的Web項(xiàng)目,將運(yùn)行Spring框架所需的5個基礎(chǔ)JAR包、MySOL數(shù)據(jù)庫的驅(qū)動JAR包、Spring JDBC的JAR包以及Spring事務(wù)處理的JAR包復(fù)制到項(xiàng)目的lib目錄,并發(fā)布到類路徑中。項(xiàng)目中所添加的JAR包如圖4.2所示。

圖4.2 Spring JDBC操作相關(guān)的JAR包

步驟03 在src目錄下創(chuàng)建配置文件applicationContext.xml,在該文件中配置id為dataSource的數(shù)據(jù)源Bean和id為jdbcTemplate的JDBC模板Bean,并將數(shù)據(jù)源注入JDBC模板中,如文件4.1所示。

文件4.1 applicationContext.xml

步驟04 在src目錄下創(chuàng)建一個com.ssm.jdbc包,在該包中創(chuàng)建測試類JdbcTemplateTest。在該類的main()方法中通過Spring容器獲取在配置文件中定義的JdbcTemplate實(shí)例,然后使用實(shí)例的execute(String s)方法執(zhí)行創(chuàng)建數(shù)據(jù)表的SQL語句,如文件4.2所示。

文件4.2 JdbcTemplateTest.java

成功運(yùn)行程序后,再次查詢db_spring數(shù)據(jù)庫,其結(jié)果如圖4.3所示。從中可以看出,程序使用execute(String sql)方法執(zhí)行的SQL語句已成功創(chuàng)建了數(shù)據(jù)表user。

圖4.3 db_spring數(shù)據(jù)庫中的表

4.2.2 update()——更新數(shù)據(jù)

update()方法可以完成插入、更新和刪除數(shù)據(jù)的操作。在JdbcTemplate類中提供了一系列update()方法,其常用格式如表4.3所示。

表4.3 JdbcTemplate類中常用的update()方法

【示例4-2】通過一個用戶管理的案例來演示update()方法的使用,具體步驟如下。

步驟01 在chapter04項(xiàng)目的com.ssm.jdbc包中創(chuàng)建User類,在該類中定義id、username和password屬性,以及其對應(yīng)的getter()/ setter()方法,如文件4.3所示。

文件4.3 User.java

步驟02 在com.ssm.jdbc包中創(chuàng)建接口UserDao,并在接口中定義添加、更新和刪除用戶的方法,如文件4.4所示。

文件4.4 UserDao.java

步驟03 在com.ssm.jdbc包中創(chuàng)建UserDao接口的實(shí)現(xiàn)類UserDaoImpl,并在類中實(shí)現(xiàn)添加、更新和刪除賬戶的方法,編輯后如文件4.5所示。

文件4.5 UserDaoImpl.java

從上述3種操作的代碼可以看出,添加、更新和刪除操作的實(shí)現(xiàn)步驟類似,只是定義的SQL語句有所不同。

步驟04 在applicationContext.xml中定義一個id為userDao的Bean,該Bean用于將jdbcTemplate注入userDao實(shí)例中,其代碼如下所示。

步驟05 在測試類JdbcTemplateTest中添加一個測試方法addUserTest()。該方法主要用于添加用戶信息,其代碼如下所示。

在上述代碼中,獲取UserDao的實(shí)例后又創(chuàng)建了User對象,并向User對象中添加了屬性值。然后調(diào)用UserDao對象的addUser()方法向數(shù)據(jù)表中添加一條數(shù)據(jù)。最后,通過返回的受影響的行數(shù)來判斷數(shù)據(jù)是否插入成功。

使用JUnit4測試運(yùn)行后,控制臺的輸出結(jié)果如圖4.4所示。

圖4.4 運(yùn)行結(jié)果

此時再次查詢數(shù)據(jù)庫中的user表,其結(jié)果如圖4.5所示。從中可以看出,使用JdbcTemplate的update()方法已成功地向數(shù)據(jù)表中插入了一條數(shù)據(jù)。

圖4.5 運(yùn)行結(jié)果

步驟06 執(zhí)行完插入操作后,接下來使用JdbcTemplate類的update()方法執(zhí)行更新操作。在測試類JdbcTemplateTest中添加一個測試方法updateUser Test(),其代碼如下所示。

與addUserTest()方法相比,更新操作的代碼增加了id屬性值的設(shè)置,并在將用戶名和密碼修改后調(diào)用了UserDao對象中的updateUser()方法執(zhí)行對數(shù)據(jù)表的更新操作。使用JUnit4運(yùn)行方法后,再次查詢數(shù)據(jù)庫中的user表,其結(jié)果如圖4.6所示。從中可以看出,使用update()方法已成功更新了user表中id為1的用戶的用戶名和密碼。

圖4.6 運(yùn)行結(jié)果

步驟07 在測試類JdbcTemplateTest中添加一個測試方法deleteUserTest()來執(zhí)行刪除操作,其代碼如下所示。

在上述代碼中,獲取了UserDao的實(shí)例后,執(zhí)行實(shí)例中的deleteUser()方法來刪除id為1的數(shù)據(jù)。

使用JUnit4測試運(yùn)行方法后,查詢user表中的數(shù)據(jù),其結(jié)果如圖4.7所示。從中可以看出,已成功通過deleteUser()方法刪除了id為1的數(shù)據(jù)。由于user表中只有一條數(shù)據(jù),因此刪除后表中數(shù)據(jù)為空。

圖4.7 運(yùn)行結(jié)果

4.2.3 query()——查詢數(shù)據(jù)

JdbcTemplate類中還提供了大量的query()方法來處理各種對數(shù)據(jù)庫表的查詢操作。其中常用的幾個query()方法格式如表4.4所示。

表4.4 JdbcTemplate中常用的query()方法

【示例4-3】通過一個具體的案例演示query()方法的使用,其實(shí)現(xiàn)步驟如下。

步驟01 向數(shù)據(jù)表user中插入幾條數(shù)據(jù),插入后user表中的數(shù)據(jù)如圖4.8所示。

圖4.8 運(yùn)行結(jié)果

步驟02 在UserDao中分別創(chuàng)建一個通過id查詢單個用戶和查詢所有用戶的方法,其代碼如下所示。

步驟03 在UserDao接口的實(shí)現(xiàn)類UserDaoImpl中實(shí)現(xiàn)接口中的方法,并使用query()方法分別進(jìn)行查詢,其代碼如下所示。

在上面兩個方法代碼中,BeanPropertyRowMapper是RowMapper接口的實(shí)現(xiàn)類,可以自動地將數(shù)據(jù)表中的數(shù)據(jù)映射到用戶自定義的類中(前提是用戶自定義類中的字段要與數(shù)據(jù)表中的字段相對應(yīng))。創(chuàng)建完BeanPropertyRowMapper對象后,在findUserById()方法中通過queryForObject()方法返回了一個Object類型的單行記錄,而在findAllUser()方法中通過query()方法返回了一個結(jié)果集合。

步驟04 在測試類 JdbcTemplateTest中添加一個測試方法findUserByIdTest()來測試條件查詢,其代碼如下所示。

上述代碼通過執(zhí)行findUserById()方法獲取了id為1的對象信息,并通過輸出語句輸出。使用JUnit4測試運(yùn)行后,控制臺的輸出結(jié)果如圖4.9所示。

圖4.9 運(yùn)行結(jié)果

步驟05 在測試類JdbcTemplateTest中添加一個測試方法findAllUserTest()來測試所有用戶信息,其代碼如下所示。

在上述代碼中,調(diào)用了UserDao對象的findAllUser()方法查詢所有用戶賬戶信息,并通過for循環(huán)輸出查詢結(jié)果。

使用JUnit4成功運(yùn)行findAllUser()方法后,控制臺的顯示信息如圖4.10所示。從中可以看出,數(shù)據(jù)表user中的4條記錄都已經(jīng)被查詢出來。

圖4.10 運(yùn)行結(jié)果

主站蜘蛛池模板: 德庆县| 灌阳县| 环江| 杭锦旗| 克山县| 阳曲县| 图们市| 周口市| 嘉祥县| 章丘市| 武宁县| 嘉鱼县| 内乡县| 汤阴县| 莱芜市| 合水县| 嵊州市| 侯马市| 玛多县| 泌阳县| 团风县| 海安县| 柯坪县| 宣汉县| 剑阁县| 余姚市| 布尔津县| 婺源县| 囊谦县| 江川县| 栖霞市| 新宁县| 五指山市| 闵行区| 新田县| 吉首市| 达孜县| 玛纳斯县| 准格尔旗| 渑池县| 桃源县|