《SSM框架技術(shù)開發(fā)教程》課件 13 Spring的JDBC數(shù)據(jù)庫操作_第1頁
《SSM框架技術(shù)開發(fā)教程》課件 13 Spring的JDBC數(shù)據(jù)庫操作_第2頁
《SSM框架技術(shù)開發(fā)教程》課件 13 Spring的JDBC數(shù)據(jù)庫操作_第3頁
《SSM框架技術(shù)開發(fā)教程》課件 13 Spring的JDBC數(shù)據(jù)庫操作_第4頁
《SSM框架技術(shù)開發(fā)教程》課件 13 Spring的JDBC數(shù)據(jù)庫操作_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第十三章Spring的JDBC數(shù)據(jù)庫操作演講人2024-XX-XX本章學(xué)習(xí)目標(biāo):了解SpringJDBC的設(shè)計(jì)思路和原理理解JDBCTemplate的常用函數(shù)的使用方法掌握SpringJDBC的編程方法在軟件系統(tǒng)的開發(fā)過程中,數(shù)據(jù)庫或者說持久層的使用都是非常重要的。軟件的所有數(shù)據(jù),都需要通過數(shù)據(jù)庫系統(tǒng)固化存儲到硬盤上,用戶的所有信息和操作也都需要通過數(shù)據(jù)連接來啟動(dòng)和維持。1Spring框架的JDBC簡介1.1傳統(tǒng)JDBC的問題當(dāng)開發(fā)人員著手開發(fā)軟件系統(tǒng)時(shí),數(shù)據(jù)庫往往是采用SQL語句進(jìn)行編碼,從而實(shí)現(xiàn)數(shù)據(jù)的增刪改查等操作,而業(yè)務(wù)層往往使用的是面向?qū)ο蟮母呒壘幊陶Z言例如Java等來實(shí)現(xiàn)不同的界面和業(yè)務(wù)邏輯功能。這兩種開發(fā)語言同處一個(gè)軟件系統(tǒng),兩者如何進(jìn)行順暢的信息交換,就成了軟件系統(tǒng)開發(fā)中遇到的一個(gè)問題。傳統(tǒng)JDBC在一定程度上解決了這個(gè)問題,它讓開發(fā)者可以使用Java語言來驅(qū)動(dòng)和解析SQL語句,提供了Java語言環(huán)境下對數(shù)據(jù)庫進(jìn)行操作和管理的方法。但是,如前面章節(jié)所講,傳統(tǒng)JDBC中,存在著表關(guān)系維護(hù)復(fù)雜、代碼繁瑣、SQL語句硬編碼、代碼復(fù)用率較低等問題。1Spring框架的JDBC簡介1.2Spring的JDBC的基本思想為了解決這個(gè)問題,軟件開發(fā)者們想到了兩種思路。第一種是棄用傳統(tǒng)JDBC通過驅(qū)動(dòng)SQL語句來管理數(shù)據(jù)的方式。為了更好的方便業(yè)務(wù)層的邏輯開發(fā),適應(yīng)面向?qū)ο缶幊痰乃季S方式,研究人員決定使用映射的方式來管理數(shù)據(jù)。將數(shù)據(jù)庫中的多個(gè)孤立數(shù)據(jù),直接和Java類對象的成員變量形成映射。這就是ORM框架的由來。在ORM框架中,數(shù)據(jù)庫中的數(shù)據(jù)條目直接和Java對象進(jìn)行一一映射,可以大大的提升開發(fā)效率,降低代碼耦合度。前面章節(jié)所講的MyBatis就是ORM框架的典型代表之一。另外一種思路,并不棄用傳統(tǒng)JDBC,而是對其進(jìn)行改進(jìn)。針對傳統(tǒng)JDBC使用過程中的缺點(diǎn),進(jìn)行封裝和修正,使得新的接口更易用。這就是SpringJDBC的由來。在SpringJDBC中,對傳統(tǒng)JDBC進(jìn)行了封裝和增強(qiáng)。一方面可以進(jìn)行適當(dāng)?shù)腟QL代碼復(fù)用,在SpringJDBC中管理數(shù)據(jù)的代碼顯得更加精煉簡潔。另外一方面,SpringJDBC封裝了很多底層實(shí)現(xiàn),簡化了傳統(tǒng)JDBC的調(diào)用方法,使得基于SpringJDBC的編碼方式更加高效且不易出錯(cuò)。1Spring框架的JDBC簡介1.3Spring的JDBC和MyBatis的關(guān)聯(lián)需要注意的是,MyBatis框架和SpringJDBC并不是互相替代的關(guān)系,兩者并沒有特別明顯的孰優(yōu)孰劣之分。一般來說,如果是數(shù)據(jù)表附和ORM框架應(yīng)用場景,可以方便的映射成Java對象時(shí),優(yōu)先考慮使用MyBatis框架來實(shí)現(xiàn)相關(guān)功能。如果是數(shù)據(jù)操作較為繁瑣細(xì)碎的應(yīng)用場景,只需要輕量的完成部分?jǐn)?shù)據(jù)操作且數(shù)據(jù)不方便映射為Java對象時(shí),就可以優(yōu)先考慮SpringJDBC來實(shí)現(xiàn)。在同一個(gè)軟件系統(tǒng)中,根據(jù)開發(fā)者的需求和喜好,有可能根據(jù)實(shí)際的應(yīng)用場景,是需要將SpringJDBC和MyBatis兩者結(jié)合使用的。2Spring框架中的JDBCTemplate2.1JDBCTemplate的簡介為了方便開發(fā)人員對數(shù)據(jù)操作進(jìn)行編程,Spring框架提供了一個(gè)模板類JDBCTemplate。類的全稱是org.springframework.jdbc.core.JdbcTemplate,它是Spring框架核心功能的組成部分之一。JDBCTemplate類功能強(qiáng)大,它提供了所有操作數(shù)據(jù)庫的基本方法,包括新建或刪除數(shù)據(jù)表、數(shù)據(jù)的增刪改查、常規(guī)的SQL語句執(zhí)行等。其次,它對傳統(tǒng)JDBC進(jìn)行了簡化和封裝,開發(fā)者使用JDBCTemplate可以更方便的進(jìn)行開發(fā)而不用擔(dān)心底層細(xì)節(jié),同時(shí)也有助于避免常見錯(cuò)誤。它在運(yùn)行的時(shí)候會(huì)執(zhí)行核心JDBC工作流程,讓應(yīng)用層代碼提供SQL語句并操作數(shù)據(jù)庫返回結(jié)果,省去了很多傳統(tǒng)JDBC的復(fù)雜步驟,使得開發(fā)人員可以更加專注的投入到業(yè)務(wù)層的邏輯開發(fā)中。此外,借助于Spring框架的容器機(jī)制,SpringJDBC的功能實(shí)現(xiàn)都可以通過Bean對象來實(shí)現(xiàn),且開發(fā)者不需要額外編碼去管理這個(gè)對象,只需要在配置文件中按要求進(jìn)行設(shè)置然后直接使用即可,大大提升了開發(fā)效率。2Spring框架中的JDBCTemplate2.1JDBCTemplate的簡介從官網(wǎng)進(jìn)入JDBCTemplate類的主頁,可以查看其所有的內(nèi)置函數(shù)方法。如下圖所示。圖13-1JDBCTemplate類的官網(wǎng)示意圖2Spring框架中的JDBCTemplate2.2JDBCTemplate的使用為了應(yīng)對各種數(shù)據(jù)操作的應(yīng)用場景,JDBCTemplate提供了數(shù)量繁多的函數(shù)接口。這些接口很多都使用了函數(shù)重載,函數(shù)名一樣,但是所需的參數(shù)和返回值不同,主要目的就是為了應(yīng)對各種不同的開發(fā)需求。歸納總結(jié)后可知,JDBCTemplate類的接口主要分為三類,分別對應(yīng)數(shù)據(jù)庫的三種操作方式。第一種是DQL數(shù)據(jù)查詢,對應(yīng)query、queryForObject、queryForList等函數(shù),用于對數(shù)據(jù)庫進(jìn)行查詢操作。第二種是DML數(shù)據(jù)插入、修改、刪除,對應(yīng)update函數(shù),用于對數(shù)據(jù)庫的內(nèi)容就行添加、更改、刪除等操作。第三種是DDL數(shù)據(jù)表操作,對應(yīng)execute函數(shù),用于對數(shù)據(jù)庫中的表進(jìn)行新增或刪除等操作。此外,execute函數(shù)還可以直接用于執(zhí)行常規(guī)的SQL語句,功能較為強(qiáng)大。2Spring框架中的JDBCTemplate2.2JDBCTemplate的使用在Spring框架中使用JDBCTemplate是比較方便的,和傳統(tǒng)JDBC不同,JDBCTemplate的使用需要充分借助Spring的容器機(jī)制。一方面,需要通過配置文件定義DataSource對象,完成數(shù)據(jù)源的設(shè)置和綁定。另一方面,需要定義JDBCTemplate對象,供業(yè)務(wù)層調(diào)用后進(jìn)行SQL語句的執(zhí)行并獲取返回值。3SpringJDBC的簡單使用案例創(chuàng)建工程打開Eclipse,選擇新建項(xiàng)目中的DynamicWebProject也就是動(dòng)態(tài)Web項(xiàng)目。相關(guān)選項(xiàng)和配置使用默認(rèn)的,給項(xiàng)目起一個(gè)名稱,最后點(diǎn)擊Finish完成即完成項(xiàng)目的創(chuàng)建。3SpringJDBC的簡單使用案例項(xiàng)目的準(zhǔn)備工作找到項(xiàng)目的lib文件夾,路徑為項(xiàng)目根目錄下src/main/webapp/WEB-INF/lib,從之前下載Spring框架的文件夾里找到項(xiàng)目所需的jar包,復(fù)制到項(xiàng)目lib文件夾下,完成jar包的導(dǎo)入。如下圖所示。圖13-2項(xiàng)目所需的jar包示意圖3SpringJDBC的簡單使用案例編寫Java類的代碼在項(xiàng)目里新建一個(gè)Java包c(diǎn)om.pojo,創(chuàng)建Bean對象對應(yīng)的Java類com.pojo.Student.java,代碼如下。Student.java01packagecom.pojo;02publicclassStudent{03privateintid;04privateStringname;05privateintage;06privateStringcourse;07publicintgetId(){3SpringJDBC的簡單使用案例編寫Java類的代碼28publicvoidsetCourse(Stringcourse){29this.course=course;30}31@Override32publicStringtoString(){33return"Student[id="+id+",name="+name+",age="+age+",course="+course+"]";34}3SpringJDBC的簡單使用案例編寫Java類的代碼35}第03~06行代碼,定義了四個(gè)成員變量。為了后續(xù)方便對數(shù)據(jù)庫進(jìn)行操作,這里的成員變量的數(shù)據(jù)類型和變量名都基本都和數(shù)據(jù)表中的字段保持一致。其他是常規(guī)的Java類代碼,完善getter和setter函數(shù),并完善對象的打印函數(shù)。讀者可以自行輸入,也可以使用eclipse的代碼生成功能來快速完成。3SpringJDBC的簡單使用案例編寫配置文件的代碼在項(xiàng)目代碼的根目錄也就是src/main/java下,創(chuàng)建配置文件applicationContext.xml。在配置文件中,主要是完成相關(guān)的命名空間設(shè)置、xml的schema配置,以及項(xiàng)目中需要用到的JavaBean的定義和配置。具體代碼如下所示。applicationContext.xml01<?xmlversion="1.0"encoding="UTF-8"?>02<beansxmlns="/schema/beans"3SpringJDBC的簡單使用案例編寫配置文件的代碼03xmlns:xsi="/2001/XMLSchema-instance"04xsi:schemaLocation="/schema/beans05/schema/beans/spring-beans.xsd">06<beanid="springJDBCdatasource"class="org.springframework.jdbc.datasource.DriverManagerDataSource">3SpringJDBC的簡單使用案例編寫配置文件的代碼07<propertyname="driverClassName"value="com.mysql.jdbc.Driver"/>08<propertyname="url"value="jdbc:mysql://localhost:3306/ssm?useSSL=false"/>09<propertyname="username"value="root"/>10<propertyname="password"value="root"/>11</bean>3SpringJDBC的簡單使用案例編寫配置文件的代碼12<beanid="jdbcTemplate"class="org.springframework.jdbc.core.JdbcTemplate">13<propertyname="dataSource"ref="springJDBCdatasource"/>14</bean>15</beans>第01~05行代碼是xml文件的格式聲明、命名空間和xmlschema的配置等。3SpringJDBC的簡單使用案例編寫配置文件的代碼第06~11行代碼,定義了一個(gè)數(shù)據(jù)源的Bean對象。id值是springJDBCdatasource,對應(yīng)的Java類路徑是org.springframework.jdbc.datasource.DriverManagerDataSource,這是Spring框架自帶的Java類。讀者在輸入這個(gè)類路徑的時(shí)候,一方面要注意不能出錯(cuò),尤其是類名和英文大小寫;另外一方面要注意提前導(dǎo)入正確的Spring框架所需的jar包。如果這兩處不對,在項(xiàng)目運(yùn)行時(shí)就會(huì)報(bào)錯(cuò)。第07~10行代碼是對數(shù)據(jù)源的屬性進(jìn)行詳細(xì)設(shè)置,包括驅(qū)動(dòng)、數(shù)據(jù)庫地址、用戶名、密碼等,可以看到與之前MyBatis框架的數(shù)據(jù)源定義模式是很類似的。3SpringJDBC的簡單使用案例編寫配置文件的代碼第12~14行代碼,定義了SpringJDBC功能的核心對象JDBCTemplate。id值是jdbcTemplate,對應(yīng)的Java類路徑是org.springframework.jdbc.core.JdbcTemplate。這個(gè)Bean對象只需要做基礎(chǔ)的設(shè)置,即將屬性dataSource通過ref設(shè)置為剛定義的數(shù)據(jù)源springJDBCdatasource即可。3SpringJDBC的簡單使用案例編寫項(xiàng)目的測試代碼在根目錄下創(chuàng)建Java包c(diǎn)om.test,新建測試文檔TestMain.java,內(nèi)部代碼如下所示。TestMain.java01packagecom.test;02importjava.util.List;03importorg.springframework.context.ApplicationContext;04importorg.springframework.context.support.ClassPathXmlApplicationContext;3SpringJDBC的簡單使用案例編寫項(xiàng)目的測試代碼05importorg.springframework.jdbc.core.*;06importcom.pojo.Student;07publicclassTestMain{08publicstaticvoidmain(String[]args){09//TODOAuto-generatedmethodstub10ApplicationContextcontext=newClassPathXmlApplicationContext("applicationContext.xml");3SpringJDBC的簡單使用案例編寫項(xiàng)目的測試代碼11JdbcTemplatejdbcTemplate=context.getBean("jdbcTemplate",JdbcTemplate.class);12//DQL13StringsqlDQL="select*fromstudent";14RowMapper<Student>rowMapper=newBeanPropertyRowMapper<Student>(Student.class);3SpringJDBC的簡單使用案例編寫項(xiàng)目的測試代碼15List<Student>stuList=jdbcTemplate.query(sqlDQL,rowMapper);16for(Studentstudent:stuList){17System.out.println(student.toString());18}19}第10行代碼,和之前章節(jié)中Spring框架的使用流程一致,載入配置文件,完成ApplicationContext對象的創(chuàng)建。3SpringJDBC的簡單使用案例編寫項(xiàng)目的測試代碼第11行代碼,通過getBean獲取JDBCTemplate對象。如本章前面所講,Spring框架的JDBC通過容器來進(jìn)行管理,這里的JDBCTemplate就是容器中的Bean對象,開發(fā)者對數(shù)據(jù)庫的操作都通過這個(gè)對象來完成。第12~18行代碼,是簡單的SpringJDBC的DQL操作流程。第13行代碼,將SQL語句定義為一個(gè)String變量,作為JDBCTemplate對象操作數(shù)據(jù)庫的輸入?yún)?shù)。第14行代碼,定義了一個(gè)RowMapper對象。RowMapper來自于org.springframework.jdbc.core包,它的作用主要是將數(shù)據(jù)庫中的表字段和Java類的成員變量進(jìn)行映射,通過這樣可以直接獲取數(shù)據(jù)查詢后的Java對象返回值。在前面的Java類定義中已經(jīng)提到,成員變量需要與表字段的命名和數(shù)據(jù)類型保持一致,就是為了這里的RowMapper可以順利完成映射。3SpringJDBC的簡單使用案例編寫項(xiàng)目的測試代碼第15行代碼,新建一個(gè)Java類的List鏈表,作為JDBCTemplate對象操作數(shù)據(jù)庫的輸出返回值。由于查詢結(jié)果是復(fù)數(shù)形式,因此需要用到List鏈表。第16~18行代碼,對查詢結(jié)果的List鏈表進(jìn)行遍歷,打印出每個(gè)對象的String值。3SpringJDBC的簡單使用案例項(xiàng)目測試結(jié)果項(xiàng)目代碼編寫完成后,在TestMain.java文件中點(diǎn)擊右鍵,點(diǎn)擊運(yùn)行RunAs,選擇JavaApplication。項(xiàng)目運(yùn)行結(jié)果如下圖所示。圖13-3SpringJDBC的DQL操作的測試示意圖3SpringJDBC的簡單使用案例項(xiàng)目測試結(jié)果可以看到,SQL語句"select*fromstudent"順利執(zhí)行,查詢到了所有的student表的數(shù)據(jù)條目。返回值是自動(dòng)拼裝成了Java對象,并可以正常的打印其String值。讀者也可以進(jìn)一步和數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行對比,看看數(shù)據(jù)是否正確無誤。除了DQL操作外,JDBCTemplate也可以方便的進(jìn)行DML操作。在測試文件TestMain.java中,加入相關(guān)的代碼如下。//DMLStringsqlDML="updatestudentsetage=30whereid=6";3SpringJDBC的簡單使用案例項(xiàng)目測試結(jié)果intchangeRows=jdbcTemplate.update(sqlDML);System.out.println("\nchangedrows:"+changeRows);同樣的,DML操作中需要將SQL語句定義成String變量,"updatestudentsetage=30whereid=6"。JDBCTemplate對象在執(zhí)行DML操作時(shí)需要使用update函數(shù),函數(shù)的返回值是整數(shù)類型的changeRows,對應(yīng)數(shù)據(jù)表中被修改的數(shù)據(jù)條目個(gè)數(shù)。最后將此數(shù)值打印出來,用于查看是

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論