Spring使用JDBC访问MySQL数据库
在Java應用程序開發(fā)中,使用JDBC訪問MySQL數(shù)據(jù)庫是Java開發(fā)者常用的技術(shù)。在Spring框架中,Spring對JDBC又進行了封裝,簡化了程序訪問數(shù)據(jù)庫的復雜度。本課主要討論在Spring框架中如何使用封裝的JDBC訪問MySQL數(shù)據(jù)庫。通過本課的學習,可以解決如下問題。
● 在Spring框架下,如何讓程序連接數(shù)據(jù)庫?
● 如何利用DAO技術(shù)從數(shù)據(jù)源讀取和寫入數(shù)據(jù)?
企業(yè)級應用開發(fā)都會涉及到對數(shù)據(jù)庫的訪問,在Java編程環(huán)境中,訪問數(shù)據(jù)庫是非常繁瑣的事情,需要編寫啟動數(shù)據(jù)庫連接、準備和執(zhí)行SQL語句、處理事務和異常、關(guān)閉連接等大量數(shù)據(jù)庫操作代碼。
使用Spring框架可以簡化Java程序?qū)?shù)據(jù)庫的訪問,Spring提供了一套完整的數(shù)據(jù)庫訪問框架,用于簡化各種數(shù)據(jù)庫訪問技術(shù)的使用。Spring框架支持JDBC、Hibernate、Java Perssitence等數(shù)據(jù)庫訪問技術(shù),本文主要討論JDBC數(shù)據(jù)庫訪問技術(shù)。
?
1、 配置數(shù)據(jù)源
要讓Spring能夠訪問數(shù)據(jù)庫,就要把數(shù)據(jù)庫的位置,以及訪問數(shù)據(jù)庫的賬號和密碼告訴Spring。這個過程稱為配置數(shù)據(jù)源。Spring提供了多種方式配置數(shù)據(jù)源,下面主要討論基于JDBC驅(qū)動方式配置數(shù)據(jù)源。
Spring提供的JDBC驅(qū)動提供了三類數(shù)據(jù)源的配置方式,開發(fā)者可以根據(jù)程序需要選擇不同的配置方式,配置方式及其配置說明如下表所示。
?
表1 JDBC驅(qū)動配置數(shù)據(jù)源方式
?
本課主要使用DriverManagerDataSource連接數(shù)據(jù)源,沒有使用連接池技術(shù)。后面的課程會討論數(shù)據(jù)庫連接池技術(shù)。
數(shù)據(jù)源可以在Spring配置文件中進行配置,配置代碼如下。
?
2、創(chuàng)建數(shù)據(jù)訪問對象(DAO)
數(shù)據(jù)訪問對象(DAO)相當于程序和數(shù)據(jù)源之間的經(jīng)紀人。程序要訪問數(shù)據(jù)源,必須要通過DAO來訪問,DAO提供了程序訪問數(shù)據(jù)源必要的接口和方法,接口和方法的具體實現(xiàn)細節(jié),程序并不需要了解。
DAO由數(shù)據(jù)訪問對象接口、數(shù)據(jù)訪問對象實現(xiàn)類、訪問對象實體類組成。其中,數(shù)據(jù)訪問對象接口定義了訪問數(shù)據(jù)必要的接口聲明;數(shù)據(jù)訪問對象實現(xiàn)類實現(xiàn)了定義的接口,并負責從數(shù)據(jù)源讀取數(shù)據(jù),數(shù)據(jù)源可以是數(shù)據(jù)庫、XML文件或者是其它存儲對象;訪問對象實體類定義了要訪問的對象結(jié)構(gòu),假設(shè)要訪問的數(shù)據(jù)對象是數(shù)據(jù)庫,則該實體類定義了數(shù)據(jù)庫中一個表的結(jié)構(gòu)。下面以訪問數(shù)據(jù)庫為例,分別討論數(shù)據(jù)訪問對象接口、數(shù)據(jù)訪問對象實現(xiàn)類和訪問對象實體類。
(1)數(shù)據(jù)訪問對象接口
訪問數(shù)據(jù)庫的操作一般是增、刪、改、查。增是在指定的數(shù)據(jù)庫表中插入一條記錄;刪是在指定的數(shù)據(jù)庫表中刪除一條記錄;改是在指定的數(shù)據(jù)庫表中修改記錄;查是按指定條件查詢數(shù)據(jù)庫表記錄。數(shù)據(jù)訪問對象接口就是定義操作數(shù)據(jù)庫表的增刪改查接口。下面給出課程案例mooc數(shù)據(jù)庫course表的DAO接口。
課程案例mooc數(shù)據(jù)庫ER圖如下所示。
?
圖 1 mooc數(shù)據(jù)庫ER圖
?
?
mooc數(shù)據(jù)庫course表結(jié)構(gòu)如下。
?
表 2 課程表
?
course表DAO接口代碼如下。
?
(2)數(shù)據(jù)訪問對象實現(xiàn)類
數(shù)據(jù)訪問對象實現(xiàn)類實現(xiàn)DAO接口,并負責從mooc數(shù)據(jù)庫中讀取數(shù)據(jù)。在Spring中,可以采用JDBC、Hibernate、MyBits、JPA等技術(shù)在DAO層實現(xiàn)對數(shù)據(jù)庫的訪問。本科采用JDBC技術(shù),JdbcTemplate類是Spring對JDBC的封裝,讓JDBC更加容易使用,JdbcTemplate 類可以執(zhí)行 標準的SQL 語句和過程調(diào)用。數(shù)據(jù)訪問對象實現(xiàn)類代碼如下。
?
CourseJDBCTemplate類實現(xiàn)了CourseDao接口,并實現(xiàn)了接口的所有方法。CourseJDBCTemplate類內(nèi)置了DataSource和JdbcTemplate類。DataSource為數(shù)據(jù)源類,存儲了數(shù)據(jù)源的連接地址、登錄數(shù)據(jù)源的賬號密碼等數(shù)據(jù)。JdbcTemplate類是Spring對JDBC的封裝,JdbcTemplate 類可以執(zhí)行 標準的SQL 語句和過程調(diào)用,創(chuàng)建JdbcTemplate類時傳入的參數(shù)為DataSource。
?
代碼中用到了JdbcTemplate類的queryForObject方法,該方法從數(shù)據(jù)庫中查詢符合條件的記錄。queryForObject方法的第三個參數(shù)是RowMapper泛型類型,通過繼承RowMapper泛型,可以將查詢返回的ResultSet數(shù)據(jù)集映射到訪問對象實體類。
?
(3)訪問對象實體類
訪問對象實體類定義了要訪問的對象結(jié)構(gòu),假設(shè)要訪問的數(shù)據(jù)對象是數(shù)據(jù)庫,則該實體類定義了數(shù)據(jù)庫中一個表的結(jié)構(gòu)。mooc數(shù)據(jù)庫course表的實體類代碼如下。
?
?
3、運行JDBC的測試程序
前面主要討論了配置數(shù)據(jù)源和創(chuàng)建數(shù)據(jù)訪問對象(DAO)相關(guān)內(nèi)容,解決了程序如何訪問數(shù)據(jù)庫以及數(shù)據(jù)庫表的讀寫問題。下面給出一個程序?qū)嵗?#xff0c;利用前面配置的數(shù)據(jù)源和已創(chuàng)建的DAO對象,實現(xiàn)對mooc數(shù)據(jù)庫course表的課程插入和查詢操作。
mooc數(shù)據(jù)庫非常簡單,可以根據(jù)課程給出的ER圖和course二維表,手動創(chuàng)建mooc數(shù)據(jù)庫和course表。mooc數(shù)據(jù)庫創(chuàng)建完成后,需要修改Spring配置文件中配置的數(shù)據(jù)源,主要是修改數(shù)據(jù)庫的連接地址、登錄賬戶和密碼。
運行程序前需要確定項目已經(jīng)引入了Spring框架關(guān)于JDBC功能的jar包。下面列出的是spring 5.0版本相關(guān)JDBC的jar包。
● mysql-connector-java-5.1.7-bin
● spring-jdbc-5.0.8.RELEASE
測試程序代碼如下。
?
程序運行結(jié)果如下圖示所示。
?
?
?
課程小結(jié)
(1)要讓Spring能夠訪問數(shù)據(jù)庫,就要把數(shù)據(jù)庫的位置,以及訪問數(shù)據(jù)庫的賬號和密碼告訴Spring,這個過程稱為配置數(shù)據(jù)源。數(shù)據(jù)源可以在Spring配置文件中進行配置,也可以寫成Bean的方式,由DAO對象讀取。
(2)數(shù)據(jù)訪問對象(DAO)相當于程序和數(shù)據(jù)源之間的經(jīng)紀人。程序要訪問數(shù)據(jù)源,必須要通過DAO來訪問,DAO提供了程序訪問數(shù)據(jù)源必要的接口和方法,接口和方法的具體實現(xiàn)細節(jié),程序并不需要了解。DAO將底層數(shù)據(jù)操作細節(jié)和上層應用進行了有效隔離,在程序開發(fā)過程中,DAO和上層應用都可以獨立編寫代碼,然后再進行集成就可以了,利用DAO層也可以輕松實現(xiàn)不同數(shù)據(jù)庫的訪問。
總結(jié)
以上是生活随笔為你收集整理的Spring使用JDBC访问MySQL数据库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二进制高低位交换の琐事(洛谷P1100题
- 下一篇: 【Java】扑克牌の顺子Judge