前兩章我們簡單講解了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所示:

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

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

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

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

可以看到上述配置文件內(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所示:

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

創(chuàng)建實(shí)體
我們根據(jù)數(shù)據(jù)庫中的字段對應(yīng)創(chuàng)建一個UserEntity來作為對應(yīng)操作,如下圖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所示:

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

到這一步我們的數(shù)據(jù)庫層幾乎已經(jīng)編寫完成了,那么我們需要編寫控制器讓我們通過頁面可以訪問到數(shù)據(jù)。
編寫查詢方法
我們回到UserController中,然后創(chuàng)建一個查詢用戶列表的方法,如下圖12所示:

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

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

我們刪除完用戶后直接返回了用戶列表,可以查看到用戶是否已經(jīng)刪除成功。
?初嘗試運(yùn)行項(xiàng)目
具體如何運(yùn)行項(xiàng)目請到LessonTwo去閱讀,下面我們可以看到項(xiàng)目是正常運(yùn)行的如下圖15所示:

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

可以看下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所示:

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

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

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

可以看到上圖20,更新用戶的name屬性是有值得。你們可自行訪問用戶列表地址查詢是否已經(jīng)更新,我這里就不做演示了。
刪除用戶
我們可以根據(jù)用戶的主鍵來刪除一條數(shù)據(jù),如下圖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ù)道路?。?!
知識星球 - 恒宇少年