4000-9696-28

不想写SQL了吗? 快来学习Spring Boot JPA吧

2023年02月07日 13:33供稿中心:北大青鸟总部

摘要: Spring Data JPA是基于Spring Data框架实现JPA规范的一个持久层抽象,Spring Data JPA底层实现了Hibernate框架,所以在使用的过程中可以少写很多SQL,极大的提高了开发效率。

背景介绍

自从踏上了后端程序猿这条路,从此就和数据库结下了不解之缘,每天都要CRUD

我们在使用Spring Boot的时候,有两种常用的操作数据库方案,一种是使用MyBatis框架,另一种就是Spring Data JPA,而且Spring Boot官方默认支持的也是Spring Data JPA,从名字上也能看出来,当然是因为它和Spring是一家人了。

为什么这么说呢?举个例子:如果大家用过MyBatis的话应该会发现,MyBatis依赖的artifactId是mybatis-spring-boot-starter,而接下来我们要讲的Spring Data JPA依赖的artifactId却是spring-boot-starter-data-jpa,从这个名字关键字(mybatis、jpa)的顺序上,就可以看出来谁才是亲生的。



Tips

通常情况下Spring Boot官方支持的技术,在起名字的时候都是以spring-boot-starter-xxx来命名,而第三方主动适配Spring Boot的技术,通常名字都是xxx-spring-boot-starter的命名方式。

接下来我们就来一起看下这个亲生的"儿子"为什么值得我们学习。


什么是Spring Data JPA

首先,来看下什么是Spring Data JPA,是Spring生态中,基于Spring Data框架实现JPA规范的一个持久层抽象,Spring Data JPA底层实现了Hibernate框架,所以在使用的过程中可以少写很多SQL,因为大部分基础的CRUD方法Spring Data JPA都已经帮我们实现了,几乎可以在不写具体实现代码的情况下完成对数据库的操作,除了基础的CRUD操作外,Spring Data JPA还提供了诸如分页、排序等常用功能,极大的提高了开发效率。


Spring Data JPA进行持久层开发

接下来,就开始进入实战环节,通过一个小案例,来体验Spring Data JPA的高效


准备数据

常言道:"工欲善其事,必先利其器",这句话放在程序开发中也是非常适合的。

在开始之前呢我们要先准备数据,使用Navicat(可以自选)先创建一个数据库,命名为kgc。数据库创建好之后,创建一张用户表,表名为t_user ,添加三列数据,列名分别是:

• id 唯一标记

• username 用户名称

• age 年龄

插入三条数据,数据库脚本如下:

# 数据库脚本文件
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;
# 插入数据
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依赖

数据准备好之后,就可以开始集成Spring Data JPA了,使用SpirngBoot Initializr 创建SpringBoot基础工程,因为我们是做持久层开发,所以此时需要添加一些数据库相关的依赖

数据库驱动依赖

这里如果不指定版本默认是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>

如果你不想手动添加依赖,也可以在创建项目的时候通过工具选择,如下图:



添加JPA相关配置项

在application.properties属性配置文件中配置两部分内容:

数据源

jpa相关配置

#配置数据源信息
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自动更新数据库结构
spring.jpa.hibernate.ddl-auto=update
# 控制台输出sql语句
spring.jpa.show-sql=true


创建实体类

创建User,并实现序列化接口Serializable,要注意实体类上的这些注解的使用

@Table(name="t_user")//table指的是和哪个表映射 默认是user
@Entity(name = "t_user") //实体类名和数据库表名映射
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:表示根据属性名在表中生成相应的字段,如果字段名和属性名不相同,可以使用name属性指定


创建一个 UserRepository接口

要注意的是用户模块的UserRepository接口,这里暂时不需要写任何方法,因为JpaRepository已经帮我们实现了很多常用的方法,如果需要使用特殊的方法可以自定义。

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


默认实现的方法,如下:



这些方方法,基本满足了我们日常的CRUD操作,大家可以跟着这个案例,试一次其他的这些方法


是骡子是马,拉出来遛遛

接下来就可以编写测试程序进行验证,查询所有的用户信息

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

/**
* 查询所有用户
*/
@Test
public void testSpringDataJpa() {
// 调用findAll方法,查询所有用户
List<User> userList = userRepository.findAll();
for (User user : userList) {
System.out.println(user);
}
}}


可以看到控制台输入了如下数据,成功查询出了所有的用户数据,到此,大功告成,而我们一个SQL语句也没有写。Spring Data JPA帮我们节省了很多陪女朋友的时间,是不是很赞呢,从此以后再也不用担心写SQL了。



标签:
关于我们
公司简介
发展历程
青鸟荣誉
联系我们
加入我们
青鸟课程
BCVE视频特效课程
BCUI全链路UI设计
BCSP软件开发专业
BCNT网络工程师
启能职业教育基础课程
学习客户端下载
青鸟优师
青鸟云课堂
微信 公众号 咨询 顶部 首页
官方新版意见收集

*

官方新版意见收集

提交成功,感谢您的反馈。

我们会认真阅读和考虑每个用户的反馈。