jpa系列:
springboot jpa使用
springboot jpa 關(guān)系注解和mappedBy
springboot jpa自定義查詢
前言:
1.jpa(Java Persistence API)看作是hibernate的一個高級封裝庫。日志中顯示執(zhí)行的語句是經(jīng)過jpa處理后的sql語句。比起jdbc更加方便(jdbc你還要自己編寫大量sql語句等等操作)
2.IDE為idea,配置文件為yml,數(shù)據(jù)庫為mysql,maven依賴需要jpa和mysql,到中央倉庫直接查/百度其他文章就行
3.你還需要:在mysql里面建好數(shù)據(jù)庫和一張表,設(shè)置好用戶名和密碼
4.中途看的煩躁,建議拉到結(jié)尾看總結(jié)再回頭看
application.yml 配置:
spring:
jpa:
#設(shè)置數(shù)據(jù)庫為mysql
database: mysql
#顯示執(zhí)行的語句(開了能在日志看到j(luò)pa執(zhí)行的sql語句)
show-sql: true
#自行百度,不累述
hibernate:
ddl-auto: update
datasource:
url: jdbc:mysql://localhost:3306/數(shù)據(jù)庫名?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
username: root
password: root
注意jpa和datasource在spring范圍下(即注意yml的格式),賬戶密碼和數(shù)據(jù)庫名等東西自己看著改,后面那一大段uesXX=xx的用翻譯看一下就知道了,可加可不加,防bug而已
Entity (實體,一個javabean類):一個表對應一個實體類。
依靠注解實現(xiàn)對應:類成員---表的各列。這里直接轉(zhuǎn)大佬博客
Jpa 實體類常用注解
個人JPA參考手冊
可以偷懶不人工寫這一大堆東西,直接使用idea的jpa工具生成代碼(建議):
idea 從數(shù)據(jù)庫快速生成Spring Data JPA實體類
DAO
寫一個接口繼承JpaRepository<T,ID>,在service層用@Resource注入這個DAO,然后直接使用這個DAO的對象來操作就行。其中T為實體類,ID為主鍵的類型(Entity中@ID注解那個)
FAQ:
誰來實現(xiàn)這個接口?
獲取注解后交由jpa進行處理實現(xiàn),不信逐步調(diào)試跟蹤看看。(有了注解就能夠像元編程那樣,對代碼進行編程,即生成所需的代碼,詳情右轉(zhuǎn)java注解)
JpaRepository<T,ID>接口只有幾個方法,我還需要額外的怎么辦?
直接在你的接口中聲明一個“規(guī)范的函數(shù)名”即可。
比如你想根據(jù)username來查詢一個用戶,那么接口寫一個findByUsername()方法即可。在idea里面看下自動補齊估計就能理解了,jpa能夠根據(jù)這些方法名生成對應的操作。提醒一下,要是不按照規(guī)范寫一些"toGetUsername"這些jpa不認的方法名,是沒有效果的。
總結(jié)和坑
1.一個典型例子:spring-boot-jpa-thymeleaf-curd
2.在數(shù)據(jù)庫弄好、必須的兩三行jpa配置弄好后,和數(shù)據(jù)庫打交道只需:
(1)寫一個與表對應的類(可自動生成,賊爽)
(2)寫一個接口繼承jpa提供的接口,視需求再聲明幾個方法進去,jpa能夠智能自動的實現(xiàn)你所聲明的方法。(方法名靠idea自動補齊即可不用記憶細節(jié))
3.關(guān)于駱駝峰與下劃線的問題:
受spring.jpa.hibernate.naming.physical-strategy設(shè)置的影響,默認ImprovedNamingStrategy,會把@Column由駱駝峰轉(zhuǎn)換為下劃線來對應數(shù)據(jù)庫表的列名。如果數(shù)據(jù)庫存在駱駝峰的字段,這個設(shè)置改為PhysicalNamingStrategyStandardImpl即可(看idea自動補全,需要加一些前綴,這里不打了)