JPA的由来
ORM框架能够将Java对象映射到关系型数据库中,能够直接持久化复杂的 Java对象。ORM框架的出现,可以让开发者从数据库编程中解脱出来,把更多的精力放在业务模型与业务逻辑上。目前比较流行的 ORM框架有MyBatis、Hibernate、TopLink、JDO 等。
在JPA 规范之前,由于没有官方的标准,使得各ORM框架之间的 API差别很大,使用了某种ORM框架的系统会严重受制于该ORM的标准。基于此,Sun引入新的JPA ORM,主要的原因有:其一,简化现有JavaEE和Java SE应用开发工作;其二,Sun希望整合ORM 技术,实现统一的 API调用接口。
JPA是什么
JPA (Java Persistence API)是Sun官方提出的Java持久化规范。它为 Java 开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据。它的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate、TopLink、JDO等 ORM框架各自为营的局面。
值得注意的是,JPA 是在充分吸收了现有的 Hibernate、TopLink、JDO等 ORM框架的基础上发展而来的,具有易于使用、伸缩性强等优点。从目前的开发社区的反应上看,PA 受到了极大的支持和赞扬,其中就包括了Spring与EJB3.0的开发团队。
注意:JPA是一套规范,不是一套产品,那么像Hibernate、TopLink、JDO它们是一套产品,如果说这些产品实现了这个JPA规范,那么我们就可以称他们为JPA的实现产品。
Spring Data JPA
Spring Data是Spring 的一个子项目,用于简化数据库访问,包括NoSQL非关系型数据库,另外还包括对关系型数据库的访问支持。Spring Data使我们可以快速简单地使用普通的数据访问技术及新的数据访问技术,Spring Data 会让数据的访问变得更加方便。
Spring Data JPA是Spring 基于ORM框架、JPA 规范的基础上封装的一套JPA 应用框架,可以让开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增、删、改、查等在内的常用功能,且易于扩展,学习并使用Spring Data JPA可以极大提高开发效.Spring Data JPA其实就是Spring 基于 Hibernate之上构建的JPA使用解决方案,方便在Spring Boot项目中使用 JPA 技术。
Spring Data JPA 让我们解脱了DAO层的操作,基本上所有CRUD 都可以依赖于它实现。
快速上手
1.创建项目
这篇就不详细讲了,在上一篇博客中可以查看如何详细快速创建Spring Boot项目上篇博客传送门
但是要记得添加相关的依赖(Spring Data JPA , MySQL Driver)
项目 pom.xml 文件如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
2.application.properties添加配置信息
#配置数据源相关信息
#MySQL5.x版本的驱动
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://localhost:3306/crm?useUnicode=true&characterEncoding=utf-8
#配置JPA相关信息
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
3.编写实体类:User.java
@Data
@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;
@Column(name="usr_role_id")
private Long usrRoleId;
@Column(name="usr_flag")
private Integer usrFlag;
}
JPA注解详细说明如下:
@Entity(name=“EntityName”)必须,用来标注一个数据库表对应的实体,数据库中创建的表明默认和类名一致,其中,name可选,对应数据库中的一个表,使用此注解标记Pojo是一个JPA实体。
@Table(name=“”,catalog=“”,schema=“”)可选,用来标注一个数据库对应的实体类,数据库中创建的表明默认和类名一致,通常和@Entity配合使用,只能标注在实体的class定义处,表示实体对应的数据库表的信息
@Id必须,@Id定义了映射到据库表的主键的属性,一个实体只能有一个属性被映射为主键。
4.编写Repository(仓库)
创建UserRository.java
public interface UserRepository extends JpaRepository<User,Long>{
}
5.测试结果
@SpringBootTest
public class UserMapperTester {
@Autowired
private UserMapper userMapper;
@Test
public void testInsert() throws Exception{
userMapper.insert(new User("ktjiaoyu","123456",9L,1));
}
@Test
public void testGet() {
User user = userMapper.get(85L);
System.out.println("usrName:"+user.getUsrName());
}
}
testInsert()方法运行结果:
testGet()方法运行结果: