第三章:SpringBoot使用SpringDataJPA完成CRUD

前兩章咱們簡單講解了SpringBoot的易用性,SpringBoot框架內部提供了不少咱們須要用到的組件,須要什麼你就能夠拿到項目裏。
在咱們平時的項目中,數據的存儲以及訪問都是最爲核心的關鍵部分,如今有不少企業採用主流的數據庫,如關係型數據庫:MySQL,oracle,sqlserver。非關係型數據庫:redis,mongodb等。
SpringBoot已經爲咱們提供了不少種的數據庫來作數據存儲以及讀取,上面只是簡單的幾種,那麼我接下來以MySQL爲例來說述下本章的內容。java

本章目標

學習而且使用SpringBoot訪問MySQL數據庫,而且結合SpringDataJPA完成CRUD(Create,Read,Update,Delete)簡單操做。mysql

構建項目

接下來咱們先來建立SpringBoot項目,以下圖1所示:git


圖1

點擊Next輸入一些項目參數,以下圖2所示:web


圖2

點擊Next後選擇咱們須要導入項目的SpringBoot組件,這裏要注意必定要選擇正確的組件,以下圖3所示:redis


圖3

能夠看到圖3咱們選擇了,web,MySQL,JPA組件做爲咱們開發必備組件,咱們點擊Next輸入項目名稱後進入項目窗口,以下圖4所示:spring


圖4

咱們打開pom.xml能夠看到springboot自動爲咱們添加了spring-data-jpa、mysql-connector-java的支持,以下圖5所示:sql


圖5

上圖的註釋是我添加的,項目默認建立完成後是沒有註釋的。
注意:若是使用內部tomcat運行項目須要將spring-boot-starter-tomcat的scope標籤註釋掉。mongodb

配置數據源以及JPA

從此咱們修改application.properties文件配置爲application.yml配置。.yml配置文件與.properties配置要更清晰更有層次感,能夠很明瞭的看懂配置信息。
咱們在resources目錄下建立application.yml文件,而且配置DataSource以及JPA,以下圖6所示:數據庫


圖6

能夠看到上述配置文件內,咱們使用了本地的一個mysql數據庫,mysql數據庫是咱們事先安裝好的,而且建立了一個名叫test的數據庫,JPA的配置了show-sql用來在控制檯輸出JPA自動生成的sql語句。
上述數據配置文件已經完成,接下來咱們新建數據庫測試表結構我使用的數據庫工具是Navicat大家可自行下載或者使用其餘工具,結構以下圖7所示:tomcat


圖7

建立表語句我會放到resources目錄下,請你們到文檔地址下載對應課程源碼。
接下來咱們開始編寫springmvc控制器以及實體類,咱們採用@RestController註解來編寫一個控制器,以下圖8所示:


圖8

建立實體

咱們根據數據庫中的字段對應建立一個UserEntity來做爲對應操做,以下圖9所示:


圖9

能夠看到圖9中咱們使用到了不少註解,關於註解的具體含義咱們放到下面章節中具體講解。

建立JPA

既然實體類咱們也已經建立完成了,那麼接下來咱們須要使用SpringDataJPA來完成數據庫操做,咱們新建名字叫作jpa的package,而後建立UserJPA接口而且繼承SpringDataJPA內的接口做爲父類,以下圖10所示:


圖10

咱們UserJPA繼承了JpaRepository接口(SpringDataJPA提供的簡單數據操做接口)、JpaSpecificationExecutor(SpringDataJPA提供的複雜查詢接口)、Serializable(序列化接口)。
咱們並不須要作其餘的任何操做了,由於SpringBoot以及SpringDataJPA會爲咱們所有搞定,SpringDataJPA內部使用了類代理的方式讓繼承了它接口的子接口都以spring管理的Bean的形式存在,也就是說咱們能夠直接使用@Autowired註解在spring管理bean使用,以下圖11所示:


圖11

到這一步咱們的數據庫層幾乎已經編寫完成了,那麼咱們須要編寫控制器讓咱們經過頁面能夠訪問到數據。

編寫查詢方法

咱們回到UserController中,而後建立一個查詢用戶列表的方法,以下圖12所示:


圖12

其中userJps.findAll()方法就是SpringDataJPA爲咱們提供的內置方法,它能夠查詢表內全部的數據,除了findAll還有不少有用的方法,咱們後期使用一章的內容來詳細介紹這個強大的傢伙!

編寫添加、更新方法


圖13

能夠看到上圖13中,咱們只是簡單的實現實體的持久化操做,userJPA.save方法能夠執行添加也能夠執行更新,若是須要執行持久化的實體存在主鍵值則更新數據,若是不存在則添加數據。

編寫刪除方法



圖14

咱們刪除完用戶後直接返回了用戶列表,能夠查看到用戶是否已經刪除成功。

初嘗試運行項目

具體如何運行項目請到LessonTwo去閱讀,下面咱們能夠看到項目是正常運行的以下圖15所示:


圖15

我紅色標記的部分能夠看到,springmvc加載了我定義的請求。那麼咱們嘗試訪問用戶列表路徑:127.0.0.1:8080/user/list能夠看到以下圖16所示,由於咱們數據庫中並無數據,因此咱們沒有查詢到結果:


圖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_
由於咱們沒有設置格式化sql因此生成的sql語句都是一行顯示的。

添加更新用戶

咱們如今添加一條用戶信息到數據庫,請求地址:http://127.0.0.1:8080/user/save?name=admin&age=22&address=jinan,效果以下圖17所示:


圖17

能夠看到咱們成功的添加了一條數據,而且用戶數據主鍵編號也返回了,咱們在執行參數中並無添加id的值,這個id是數據庫自動生成的,springDataJPA查詢成功後會自動返回主鍵的值到實體主鍵映射字段中。
多插入幾條數據方便咱們下一步操做,插入完成後咱們再次訪問用戶列表請求地址,效果以下圖18所示:


圖18

上圖18咱們查詢出了數據庫中的全部用戶數據,那麼咱們接下來更新下主鍵編號爲1的用戶信息,咱們把age以及address分別改爲,23,beijing,效果以下圖19所示:


圖19

咱們能夠看到,在訪問地址的時候我並無傳name字段的值,那麼springDataJPA會認爲你要清空name字段的值因此這樣訪問是不能夠的,咱們須要將name也傳入,效果以下圖20所示:


圖20

能夠看到上圖20,更新用戶的name屬性是有值得。大家可自行訪問用戶列表地址查詢是否已經更新,我這裏就不作演示了。

刪除用戶

咱們能夠根據用戶的主鍵來刪除一條數據,以下圖21所示:


圖21

咱們能夠看到我傳入的id=1,刪除完成後咱們自動讀取了用戶列表,springDataJPA給咱們沒有返回id=1的用戶,咱們查看數據庫數據也沒有發現id=1用戶,證實id=1的用戶確實已經被從數據庫中刪除了。

總結

上述內容就是咱們本章的所有內容,主要講述了springboot整合mysql而且使用SpringDataJPA來完成數據庫的CRUD操做。
由於咱們是接着上一章的內容講解的,若是你有不明白的地方能夠去查看個人第二章:SpringBoot與JSP間不可描述的祕密

本章內容已經更新到碼雲,請你們下載學習:

SpringBoot配套源碼地址:gitee.com/hengboy/spr…

SpringCloud配套源碼地址:gitee.com/hengboy/spr…

SpringBoot相關係列文章請訪問:目錄:SpringBoot學習目錄

QueryDSL相關係列文章請訪問:QueryDSL通用查詢框架學習目錄

SpringDataJPA相關係列文章請訪問:目錄:SpringDataJPA學習目錄

SpringBoot相關文章請訪問:目錄:SpringBoot學習目錄,感謝閱讀!

歡迎加入QQ技術交流羣,共同進步。


QQ技術交流羣
相關文章
相關標籤/搜索