1.JPA是什么
JPA(Java Persistence API)
意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范,JPA的出现主要是为了简化持久层开发以及整合ORM技术,结束Hibernate、TopLink、JDO等ORM框架各自为营的局面。JPA是在吸收现有ORM框架的基础上发展而来,易于使用,伸缩性强。
总的来说,JPA包括以下3方面的技术:
ORM映射:支持XML和注解描述对象和表之间的映射关系
API:操作实体对象来执行CRUD(create read update delete)(增删改查)操作
查询语言:通过面向对象而非面向数据库的查询语言(JPQL)查询数据
2.Spring Data JPA
Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据的访问和操作。Spring Data JPA不需要过多的关心Dao层的实现,只需关注我们继承的接口,按照一定的规则去编写我们的接口即可,spring会按照规范动态生成我们接口的实现类进行注入,并且实现类里包含了一些常规操作的方法实现。如果使用JPA提供的接口来操作ORM框架,可以不写任何实现就能对数据库进行CRUD操作,还可以进行简单的分页,排序操作。
3.Spring Data Jpa核心接口(API)
Repository:
所有接口的父接口,而且是一个空接口,目的是为了统一所有Repository的类型,让组件扫描的时候能进行识别。
CrudRepository:
是Repository的子接口,提供CRUD(增删改查)的功能。
PagingAndSortingRepository:
是CrudRepository的子接口,添加分页和排序的功能。
JpaRepository:
是PagingAndSortingRepository的子接口,增加了一些实用的功能,例如批量操作。
JpaSpecificationExecutor:
用来做负责动态条件查询的接口。
Specification:
是Spring Data JPA提供的一个查询规范,要做复杂的查询,只需围绕这个规范来设置查询条件即可。
4.Spring Data Jpa的使用
<!-- c3p0数据库连接池 -->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>${c3p0.version}</version>
</dependency>
<!-- spring-data-jpa -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.9.0.RELEASE</version>
</dependency>
2.在spring核心配置文件中配置spring-data-jpa相关项
applicationContext.properties
与Mybatis配置一样
mybatis.type-aliases-super-type=com.bdqn.t369spingboot.entity.User
spring.application.name=T369-Spring-Boot
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/crm?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=123456
mybatis.config-location=classpath:mybatis/mybatis-config.xml
#mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
mybatis.type-aliases-package=com.bdqn.t369spingboot.entity
logging.level.root=warn
logging.level.com.bdqn.t369spingboot.mapper=trace
logging.pattern.console=%p%m%n
#??JPA(Hibernate)????
#spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
3.编写实体类并使用JPA注解配置实体类和数据库表的映射关系
@Entity
@Table(name = "sys_user")
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "usr_id")
private Long usrId;
@Column(name = "usr_name")
private String usrName;
@Column(name = "usr_password")
private String usrPassword;
@ManyToOne(targetEntity = Role.class)
@JoinColumn(name = "usr_role_id")
private Role role;
@Column(name = "usr_role_id")
private Long usrRoleId;
@Column(name = "usr_flag")
private Integer usrFlag;
常见问题
JPA 和 Hibernate 有什么区别?
JPA 是一个 Java 持久化框架,它提供了一种标准的方式来访问和操作数据库。Hibernate 是一个实现了 JPA 的持久化框架,它是 JPA 的一个实现。
JPA 和 Spring Data JPA 有什么区别?
PA 是一个 Java 持久化框架,它提供了一种标准的方式来访问和操作数据库。Spring Data JPA 是 Spring 数据访问层的一部分,它提供了一种更简洁的方式来使用 JPA。
JPA 和 MyBatis 有什么区别?
JPA 是一个 Java 持久化框架,它提供了一种标准的方式来访问和操作数据库。MyBatis 是一个基于 XML 的持久化框架,它提供了一种更灵活的方式来访问和操作数据库