第三章:SpringBoot使用SpringDataJPA完成CRUD

前兩章我們簡單講解了SpringBoot的易用性,SpringBoot框架內(nèi)部提供了很多我們需要用到的組件,需要什么你就可以拿到項(xiàng)目里。
在我們平時的項(xiàng)目中,數(shù)據(jù)的存儲以及訪問都是最為核心的關(guān)鍵部分,現(xiàn)在有很多企業(yè)采用主流的數(shù)據(jù)庫,如關(guān)系型數(shù)據(jù)庫:MySQL,oracle,sqlserver。非關(guān)系型數(shù)據(jù)庫:redis,mongodb等。
SpringBoot已經(jīng)為我們提供了很多種的數(shù)據(jù)庫來做數(shù)據(jù)存儲以及讀取,上面只是簡單的幾種,那么我接下來以MySQL為例來講述下本章的內(nèi)容。

免費(fèi)專題文章匯總

恒宇少年在博客整理出來了SpringBoot、ApiBoot、SpringCloud的文章匯總【SpringBoot基礎(chǔ)教程專題】,【SpringCloud基礎(chǔ)教程專題】,【ApiBoot組件使用專題

本章目標(biāo)

學(xué)習(xí)并且使用SpringBoot訪問MySQL數(shù)據(jù)庫,并且結(jié)合SpringDataJPA完成CRUD(Create,Read,Update,Delete)簡單操作。

構(gòu)建項(xiàng)目

接下來我們先來創(chuàng)建SpringBoot項(xiàng)目,如下圖1所示:

圖1

點(diǎn)擊Next輸入一些項(xiàng)目參數(shù),如下圖2所示:

圖2

點(diǎn)擊Next后選擇我們需要導(dǎo)入項(xiàng)目的SpringBoot組件,這里要注意一定要選擇正確的組件,如下圖3所示:

圖3

可以看到圖3我們選擇了,web,MySQL,JPA組件作為我們開發(fā)必備組件,我們點(diǎn)擊Next輸入項(xiàng)目名稱后進(jìn)入項(xiàng)目窗口,如下圖4所示:

圖4

我們打開pom.xml可以看到springboot自動為我們添加了spring-data-jpa、mysql-connector-java的支持,如下圖5所示:

圖5

上圖的注釋是我添加的,項(xiàng)目默認(rèn)創(chuàng)建完成后是沒有注釋的。
注意:如果使用內(nèi)部tomcat運(yùn)行項(xiàng)目需要將spring-boot-starter-tomcat的scope標(biāo)簽注釋掉。

配置數(shù)據(jù)源以及JPA

今后我們修改application.properties文件配置為application.yml配置。.yml配置文件與.properties配置要更清晰更有層次感,可以很明了的看懂配置信息。
我們在resources目錄下創(chuàng)建application.yml文件,并且配置DataSource以及JPA,如下圖6所示:

圖6

可以看到上述配置文件內(nèi),我們使用了本地的一個mysql數(shù)據(jù)庫,mysql數(shù)據(jù)庫是我們事先安裝好的,并且創(chuàng)建了一個名叫test的數(shù)據(jù)庫,JPA的配置了show-sql用來在控制臺輸出JPA自動生成的sql語句。
上述數(shù)據(jù)配置文件已經(jīng)完成,接下來我們新建數(shù)據(jù)庫測試表結(jié)構(gòu)我使用的數(shù)據(jù)庫工具是Navicat你們可自行下載或者使用其他工具,結(jié)構(gòu)如下圖7所示:

圖7

創(chuàng)建表語句我會放到resources目錄下,請大家到文檔地址下載對應(yīng)課程源碼。
接下來我們開始編寫springmvc控制器以及實(shí)體類,我們采用@RestController注解來編寫一個控制器,如下圖8所示:

圖8

創(chuàng)建實(shí)體

我們根據(jù)數(shù)據(jù)庫中的字段對應(yīng)創(chuàng)建一個UserEntity來作為對應(yīng)操作,如下圖9所示:

圖9

可以看到圖9中我們使用到了很多注解,關(guān)于注解的具體含義我們放到下面章節(jié)中具體講解。

創(chuàng)建JPA

既然實(shí)體類我們也已經(jīng)創(chuàng)建完成了,那么接下來我們需要使用SpringDataJPA來完成數(shù)據(jù)庫操作,我們新建名字叫做jpa的package,然后創(chuàng)建UserJPA接口并且繼承SpringDataJPA內(nèi)的接口作為父類,如下圖10所示:

圖10

我們UserJPA繼承了JpaRepository接口(SpringDataJPA提供的簡單數(shù)據(jù)操作接口)、JpaSpecificationExecutor(SpringDataJPA提供的復(fù)雜查詢接口)、Serializable(序列化接口)。
我們并不需要做其他的任何操作了,因?yàn)镾pringBoot以及SpringDataJPA會為我們?nèi)扛愣?,SpringDataJPA內(nèi)部使用了類代理的方式讓繼承了它接口的子接口都以spring管理的Bean的形式存在,也就是說我們可以直接使用@Autowired注解在spring管理bean使用,如下圖11所示:

圖11

到這一步我們的數(shù)據(jù)庫層幾乎已經(jīng)編寫完成了,那么我們需要編寫控制器讓我們通過頁面可以訪問到數(shù)據(jù)。

編寫查詢方法

我們回到UserController中,然后創(chuàng)建一個查詢用戶列表的方法,如下圖12所示:

圖12

其中userJps.findAll()方法就是SpringDataJPA為我們提供的內(nèi)置方法,它可以查詢表內(nèi)所有的數(shù)據(jù),除了findAll還有很多有用的方法,我們后期使用一章的內(nèi)容來詳細(xì)介紹這個強(qiáng)大的家伙!

編寫添加、更新方法

圖13

可以看到上圖13中,我們只是簡單的實(shí)現(xiàn)實(shí)體的持久化操作,userJPA.save方法可以執(zhí)行添加也可以執(zhí)行更新,如果需要執(zhí)行持久化的實(shí)體存在主鍵值則更新數(shù)據(jù),如果不存在則添加數(shù)據(jù)。

編寫刪除方法


圖14

我們刪除完用戶后直接返回了用戶列表,可以查看到用戶是否已經(jīng)刪除成功。

?初嘗試運(yùn)行項(xiàng)目

具體如何運(yùn)行項(xiàng)目請到LessonTwo去閱讀,下面我們可以看到項(xiàng)目是正常運(yùn)行的如下圖15所示:

圖15

我紅色標(biāo)記的部分可以看到,springmvc加載了我定義的請求。那么我們嘗試訪問用戶列表路徑:127.0.0.1:8080/user/list可以看到如下圖16所示,因?yàn)槲覀償?shù)據(jù)庫中并沒有數(shù)據(jù),所以我們沒有查詢到結(jié)果:

圖16

可以看下IntelliJ IDEA工具控制臺輸出的語句:
Hibernate: select userentity0_.t_id as t_id1_0_, userentity0_.t_address as t_addres2_0_, userentity0_.t_age as t_age3_0_, userentity0_.t_name as t_name4_0_ from t_user userentity0_
因?yàn)槲覀儧]有設(shè)置格式化sql所以生成的sql語句都是一行顯示的。

添加更新用戶

我們現(xiàn)在添加一條用戶信息到數(shù)據(jù)庫,請求地址:http://127.0.0.1:8080/user/save?name=admin&age=22&address=jinan,效果如下圖17所示:

圖17

可以看到我們成功的添加了一條數(shù)據(jù),并且用戶數(shù)據(jù)主鍵編號也返回了,我們在執(zhí)行參數(shù)中并沒有添加id的值,這個id是數(shù)據(jù)庫自動生成的,springDataJPA查詢成功后會自動返回主鍵的值到實(shí)體主鍵映射字段中。
多插入幾條數(shù)據(jù)方便我們下一步操作,插入完成后我們再次訪問用戶列表請求地址,效果如下圖18所示:

圖18

上圖18我們查詢出了數(shù)據(jù)庫中的所有用戶數(shù)據(jù),那么我們接下來更新下主鍵編號為1的用戶信息,我們把a(bǔ)ge以及address分別改成,23,beijing,效果如下圖19所示:

圖19

我們可以看到,在訪問地址的時候我并沒有傳name字段的值,那么springDataJPA會認(rèn)為你要清空name字段的值所以這樣訪問是不可以的,我們需要將name也傳入,效果如下圖20所示:

圖20

可以看到上圖20,更新用戶的name屬性是有值得。你們可自行訪問用戶列表地址查詢是否已經(jīng)更新,我這里就不做演示了。

刪除用戶

我們可以根據(jù)用戶的主鍵來刪除一條數(shù)據(jù),如下圖21所示:

圖21

我們可以看到我傳入的id=1,刪除完成后我們自動讀取了用戶列表,springDataJPA給我們沒有返回id=1的用戶,我們查看數(shù)據(jù)庫數(shù)據(jù)也沒有發(fā)現(xiàn)id=1用戶,證明id=1的用戶確實(shí)已經(jīng)被從數(shù)據(jù)庫中刪除了。

總結(jié)

上述內(nèi)容就是我們本章的全部內(nèi)容,主要講述了springboot整合mysql并且使用SpringDataJPA來完成數(shù)據(jù)庫的CRUD操作。
因?yàn)槲覀兪墙又弦徽碌膬?nèi)容講解的,如果你有不明白的地方可以去查看我的第二章:SpringBoot與JSP間不可描述的秘密。

本章內(nèi)容已經(jīng)更新到碼云,請大家下載學(xué)習(xí):

SpringBoot配套源碼地址:https://gitee.com/hengboy/spring-boot-chapter

SpringCloud配套源碼地址:https://gitee.com/hengboy/spring-cloud-chapter

SpringBoot相關(guān)系列文章請?jiān)L問:目錄:SpringBoot學(xué)習(xí)目錄

QueryDSL相關(guān)系列文章請?jiān)L問:QueryDSL通用查詢框架學(xué)習(xí)目錄

SpringDataJPA相關(guān)系列文章請?jiān)L問:目錄:SpringDataJPA學(xué)習(xí)目錄

SpringBoot相關(guān)文章請?jiān)L問:目錄:SpringBoot學(xué)習(xí)目錄,感謝閱讀!

歡迎微信掃碼加入知識星球,恒宇少年帶你走以后的技術(shù)道路?。?!

知識星球 - 恒宇少年

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容