學(xué)AI,好工作 就找北大青鳥
關(guān)注小青 聽課做題,輕松學(xué)習(xí)
周一至周日
4000-9696-28

不想寫SQL了嗎? 快來學(xué)習(xí)Spring Boot JPA吧

來源:北大青鳥總部 2023年02月07日 13:33

摘要: Spring Data JPA是基于Spring Data框架實現(xiàn)JPA規(guī)范的一個持久層抽象,Spring Data JPA底層實現(xiàn)了Hibernate框架,所以在使用的過程中可以少寫很多SQL,極大的提高了開發(fā)效率。

背景介紹

自從踏上了后端程序猿這條路,從此就和數(shù)據(jù)庫結(jié)下了不解之緣,每天都要CRUD

我們在使用Spring Boot的時候,有兩種常用的操作數(shù)據(jù)庫方案,一種是使用MyBatis框架,另一種就是Spring Data JPA,而且Spring Boot官方默認支持的也是Spring Data JPA,從名字上也能看出來,當然是因為它和Spring是一家人了。

為什么這么說呢?舉個例子:如果大家用過MyBatis的話應(yīng)該會發(fā)現(xiàn),MyBatis依賴的artifactId是mybatis-spring-boot-starter,而接下來我們要講的Spring Data JPA依賴的artifactId卻是spring-boot-starter-data-jpa,從這個名字關(guān)鍵字(mybatis、jpa)的順序上,就可以看出來誰才是親生的。



Tips

通常情況下Spring Boot官方支持的技術(shù),在起名字的時候都是以spring-boot-starter-xxx來命名,而第三方主動適配Spring Boot的技術(shù),通常名字都是xxx-spring-boot-starter的命名方式。

接下來我們就來一起看下這個親生的"兒子"為什么值得我們學(xué)習(xí)。


什么是Spring Data JPA

首先,來看下什么是Spring Data JPA,是Spring生態(tài)中,基于Spring Data框架實現(xiàn)JPA規(guī)范的一個持久層抽象,Spring Data JPA底層實現(xiàn)了Hibernate框架,所以在使用的過程中可以少寫很多SQL,因為大部分基礎(chǔ)的CRUD方法Spring Data JPA都已經(jīng)幫我們實現(xiàn)了,幾乎可以在不寫具體實現(xiàn)代碼的情況下完成對數(shù)據(jù)庫的操作,除了基礎(chǔ)的CRUD操作外,Spring Data JPA還提供了諸如分頁、排序等常用功能,極大的提高了開發(fā)效率。


Spring Data JPA進行持久層開發(fā)

接下來,就開始進入實戰(zhàn)環(huán)節(jié),通過一個小案例,來體驗Spring Data JPA的高效


準備數(shù)據(jù)

常言道:"工欲善其事,必先利其器",這句話放在程序開發(fā)中也是非常適合的。

在開始之前呢我們要先準備數(shù)據(jù),使用Navicat(可以自選)先創(chuàng)建一個數(shù)據(jù)庫,命名為kgc。數(shù)據(jù)庫創(chuàng)建好之后,創(chuàng)建一張用戶表,表名為t_user ,添加三列數(shù)據(jù),列名分別是:

? id 唯一標記

? username 用戶名稱

? age 年齡

插入三條數(shù)據(jù),數(shù)據(jù)庫腳本如下:

# 數(shù)據(jù)庫腳本文件
SET NAMES utf8mb4;
-- ----------------------------
-- Table structure for t_user
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL,
`age` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;
# 插入數(shù)據(jù)
INSERT INTO `t_user`(username, age) VALUES ('張三', '18');
INSERT INTO `t_user`(username, age) VALUES ( '李四', '20');
INSERT INTO `t_user` (username, age) VALUES ('王五', '22');


添加POM依賴

數(shù)據(jù)準備好之后,就可以開始集成Spring Data JPA了,使用SpirngBoot Initializr 創(chuàng)建SpringBoot基礎(chǔ)工程,因為我們是做持久層開發(fā),所以此時需要添加一些數(shù)據(jù)庫相關(guān)的依賴

數(shù)據(jù)庫驅(qū)動依賴

這里如果不指定版本默認是8.0的版本,當然你也可以指定版本

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>


添加Spring Data JPA依賴

<!-- Spring Data JPA依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

如果你不想手動添加依賴,也可以在創(chuàng)建項目的時候通過工具選擇,如下圖:



添加JPA相關(guān)配置項

在application.properties屬性配置文件中配置兩部分內(nèi)容:

數(shù)據(jù)源

jpa相關(guān)配置

#配置數(shù)據(jù)源信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/kgc?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
# 加載hibernate自動更新數(shù)據(jù)庫結(jié)構(gòu)
spring.jpa.hibernate.ddl-auto=update
# 控制臺輸出sql語句
spring.jpa.show-sql=true


創(chuàng)建實體類

創(chuàng)建User,并實現(xiàn)序列化接口Serializable,要注意實體類上的這些注解的使用

@Table(name="t_user")//table指的是和哪個表映射 默認是user
@Entity(name = "t_user") //實體類名和數(shù)據(jù)庫表名映射
public class User implements Serializable{
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private Integer id; // 用戶id
@Column(name = "username")
private String username; //用戶名
@Column(name = "age")
private Integer age; // 年齡
// 省略 setter、getter方法
}


@Entity:表示這是一個實體類,項目啟動時會自動針對該類生成一張表,默認的表名為類名,name屬性表示自定義生成的表名。

? @Id:表示這個字段是一個id

? @GeneratedValue:表示主鍵的自增長策略

? @Column:表示根據(jù)屬性名在表中生成相應(yīng)的字段,如果字段名和屬性名不相同,可以使用name屬性指定


創(chuàng)建一個 UserRepository接口

要注意的是用戶模塊的UserRepository接口,這里暫時不需要寫任何方法,因為JpaRepository已經(jīng)幫我們實現(xiàn)了很多常用的方法,如果需要使用特殊的方法可以自定義。

public interface UserRepository extends JpaRepository<User, Integer> {
}


默認實現(xiàn)的方法,如下:



這些方方法,基本滿足了我們?nèi)粘5腃RUD操作,大家可以跟著這個案例,試一次其他的這些方法


是騾子是馬,拉出來遛遛

接下來就可以編寫測試程序進行驗證,查詢所有的用戶信息

@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
public class DemoApplicationTests {
@Autowired
private UserRepository userRepository;

/**
* 查詢所有用戶
*/
@Test
public void testSpringDataJpa() {
// 調(diào)用findAll方法,查詢所有用戶
List<User> userList = userRepository.findAll();
for (User user : userList) {
System.out.println(user);
}
}}


可以看到控制臺輸入了如下數(shù)據(jù),成功查詢出了所有的用戶數(shù)據(jù),到此,大功告成,而我們一個SQL語句也沒有寫。Spring Data JPA幫我們節(jié)省了很多陪女朋友的時間,是不是很贊呢,從此以后再也不用擔心寫SQL了。



熱門班型時間
人工智能就業(yè)班 即將爆滿
AI應(yīng)用線上班 即將爆滿
UI設(shè)計全能班 即將爆滿
數(shù)據(jù)分析綜合班 即將爆滿
軟件開發(fā)全能班 爆滿開班
網(wǎng)絡(luò)安全運營班 爆滿開班
報名優(yōu)惠
免費試聽
課程資料
官方微信
返回頂部
培訓(xùn)課程 熱門話題 站內(nèi)鏈接