写点什么

Spring Data JPA 简介与 SpringBoot 整合超详细教学

作者:陈老老老板
  • 2022-11-25
    北京
  • 本文字数:3405 字

    阅读完需:约 11 分钟

Spring Data JPA简介与SpringBoot整合超详细教学

陈老老老板

说明:工作了,学习一些新的技术栈,边学习边总结,各位一起加油。需要注意的地方都标红了,还有资源的分享. 一起加油。



1.JPA 简介

(1.)说明:  经过一星期的培训,这周正式入职了,接触很多新的技术栈,第一个就是 Spring Data JPA;  spirng data jpa 是 spring 提供的一套简化 JPA 开发的框架,按照约定好的规则进行【方法命名】去写 dao 层接口,就可以 在不写接口实现的情况下,实现对数据库的访问和操作。  同时提供了很多除了 CRUD 之外的功能,如分页、排序、复杂查 询等等。 Spring Data JPA 让我们解脱了 DAO 层的操作,基本上所有 CRUD 都可以依赖于它来实现,在实际的工作工程中,推荐使 用 Spring Data JPA + ORM(如:hibernate)完成操作,这样在切换不同的 ORM 框架时提供了极大的方便,同时也使 数据库层操作更加简单,方便解耦。其实就是通过 JPA 这个规范,对于简单的数据库操作可以不用写 SQL

2.与 JDBC 对比

相同处:1.都跟数据∙库操作有关,JPA 是 JDBC 的升华,升级版。2.JDBC 和 JPA 都是一组规范接口 3.都是由 SUN 官方推出的


不同处:1.JDBC 是由各个关系型数据库实现的, JPA 是由 ORM 框架实现 2.JDBC 使用 SQL 语句和数据库通信。 JPA 用面向对象方式, 通过 ORM 框架来生成 SQL,进行操作。 3.JPA 在 JDBC 之上的, JPA 也要依赖 JDBC 才能操作数据库。

3.Mybatis 与 Hibernate 对比

mybatis:小巧、方便?、高效、简单、直接、半自动的 ORM 框架。小巧: mybatis 就是 jdbc 封装 在国内更流行。 场景: 在业务比较复杂系统进行使用。


hibernate:强大、方便、高效、(简单)复杂、绕弯子、全自动的 ORM 框架。 强大:根据 ORM 映射生成不同 SQL 在国外更流。 场景: 在业务相对简单的系统进行使用,随着微服务的流行。

4. JPA 的优点

1.简化持久化操作的开发工作:让开发者从繁琐的 JDBC 和 SQL 代码中解脱出来,直接面向对象持久化操作。 2.Sun 希望持久化技术能够统一,实现天下归一:如果你是基于 JPA 进行持久化你可以随意切换数据库。


同时提供:1)ORM 映射元数据:JPA 支持 XML 和注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对 象持久化到数据库表中; 如:@Entity 、 @Table 、@Id 与 @Column 等注解。 2)JPA 的 API:用来操作实体对象,执行 CRUD 操作,框架在后台替我们完成所有的事情,开发者从繁琐的 JDBC 和 SQL 代码中解脱出来。 如:entityManager.merge(T t); 3)JPQL 查询语言:通过面向对象而非面向数据库的查询语言查询数据,避免程序的 SQL 语句紧密耦合。 如:from Student s where s.name = ?

5.阐述 JPA 与 Hibernate 关系

说明:其实上面讲 Mybatis 与 Hibernate 的对比就是为了让大家对 HIbernate 有个简单的了解,因为 JPA 只是一个 ORM 规范,告诉我们应该怎么做,而 Hibernate 就是实现了 JPA 接口的 ORM 框架。在使用 JDBC 对数据库进行操作,如下图所示:


6.SpringBoot 整合 Spring Data JPA

环境:IDEA 2020.3 Mysql 5.7 这里就是最简单的项目,一些其他细节的地方,还是去看一些视频学习为好

(1)创建项目

说明:创建新的 springboot 项目(这里使用的是 ali 的镜像网站)


说明:这里只添加 Spring Web 与 LombokLombok:实体类中通过注解可省略 getter,setter,有参构造,无参构造等。Spring Web:springboot 起步依赖,默认的服务器是 tomcat。

(2)配置依赖(pom 坐标)

说明:在 pom.xml 中加入坐标在进行下载 jar 包。如果依然报红,就升一下 springboot 版本。


<font color="red"><b><b><code class="language-java">         <!-- Spring Data JPA 依赖(重要) -->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-data-jpa</artifactId>        </dependency>        <!-- MySQL 驱动(重要) -->        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>        </dependency></code></b></b></font>
复制代码


(3)填写配置文件

说明:在 application.properties 中填写一下配置,这里数据库,用户名,密码 换成自己的。


<font color="red"><b><b><code class="language-java">#自动生成数据库表(关键)spring.jpa.hibernate.ddl-auto=update#mysql数据库连接配置(非常重要)spring.datasource.url = jdbc:mysql://localhost:3306/springbootjpa?serverTimezone=Asia/Shanghai#数据库用户名spring.datasource.username = root#数据库密码spring.datasource.password = root#mysql数据库驱动程序(重要)spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver#jpa配置:在控制台显示Hibernate的sql(可选)spring.jpa.show-sql = true#其他配置:关闭Thymeleaf 的缓存spring.thymeleaf.cache = false</code></b></b></font>
复制代码


(4)创建数据库并写实体类

说明:只用创建库和实体类,不用创建表信息,当运行项目有实体类就自动生成表了。这也是方便的一点。



<font color="red"><b><b><code class="language-java">package com.example.demo.pojo;
import lombok.Data;import org.springframework.format.annotation.DateTimeFormat;
import javax.persistence.*;import java.io.Serializable;import java.util.Date;

//lombok@Data//声明为实体类@Entitypublic class Admin implements Serializable {
//主键id @Id //主键id 生成策略 IDENTITY表示数据库自动生成 @GeneratedValue(strategy = GenerationType.IDENTITY) //Long 代表bigint private Long id;
//数据库列的字段,非空唯一,长度20 @Column(nullable = false,unique = true,length = 20) private String username;
//数据库列的字段,非空,长度20 @Column(nullable = false,unique = true,length = 20) private String password;
@Column(nullable = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date rdate;
}</code></b></b></font>
复制代码


说明:这时再看数据库已经出现表了,说明成功!!!


(5)编写 repository 接口与 Controller 类

说明:创建 repository 包下接口 AdminrRepository,该接口要 extends PagingAndSortingRepository<Admin,Long>接口,这个接口是最新的,有分页和排序功能。其中 Admin 表示实体模型,Long 代表主键类型。**


<font color="red"><b><b><code class="language-java">package com.example.demo.repository;
import com.example.demo.pojo.Admin;import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.data.repository.PagingAndSortingRepository;import org.springframework.stereotype.Repository;
//声明为repository@Repositorypublic interface AdminRepository extends PagingAndSortingRepository<Admin,Long> { }</code></b></b></font>
复制代码


<font color="red"><b><b><code class="language-java">package com.example.demo.controller;
import com.example.demo.pojo.Admin;import com.example.demo.repository.AdminRepository;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestControllerpublic class AdminController {
@Autowired private AdminRepository adminRepository;
@GetMapping("findall") public List<Admin> finall(){ List<Admin> all = (List<Admin>) adminRepository.findAll(); return all; }}</code></b></b></font>
复制代码


(6)测试

说明:在数据库 admin 表中填写一条/多条数据,重新启动项目。然后在网址中输入 localhost:8080/findall 出现数据说明成功!!!



注:其他的方法就不写了,只是做一个配置演示,都是很简单的。JPA 最厉害的是使用命名规则进行创建接口方法,将会在下一个博客中介绍常见的命名规则。


总结:JPA 目的是 Code First。Mybatis 是 Db First。 JPA 也有适合自己的环境,每个技术都有自己的特点,多学一点没有坏处。希望对您有帮助,感谢阅读结束语:裸体一旦成为艺术,便是最圣洁的。道德一旦沦为虚伪,便是最下流的。勇敢去做你认为正确的事,不要被世俗的流言蜚语所困扰。


发布于: 2022-11-25阅读数: 28
用户头像

奇安信开发工程师,有问题可以私聊我! 2019-03-16 加入

还未添加个人简介

评论

发布
暂无评论
Spring Data JPA简介与SpringBoot整合超详细教学_Spring JPA_陈老老老板_InfoQ写作社区