数据访问:JPA
相关概念
1.JPA的由来
ORM框架能够将Java对象映射到关系型数据库中,能够直接持久化复杂的 Java对象。ORM框架的出现,可以让开发者从数据库编程中解脱出来,把更多的精力放在业务模型与业务逻辑上。目前比较流行的 ORM框架有MyBatis、Hibernate、TopLink、JDO 等。
在JPA 规范之前,由于没有官方的标准,使得各ORM框架之间的 API差别很大,使用了某种ORM框架的系统会严重受制于该ORM的标准。基于此,Sun引入新的JPA ORM,主要的原因有:其一,简化现有JavaEE和Java SE应用开发工作;其二,Sun希望整合ORM 技术,实现统一的 API调用接口。
2.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的实现产品。
3.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 都可以依赖于它实现。
4.上手写代码。
1.导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
2.配置文件
#配置数据源相关信息
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/appinfodb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
#配置JPA(Hibernate)相关信息
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
#设置是否在日志中打印自动生成的sql,方便调试的时候查看
spring.jpa.show-sql=true
#格式化sql语句
spring.jpa.properties.hibernate.format_sql=true
3.创建实体类
@Data
@Entity
@Table(name = "dev_user1")
public class DevUser {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;//主键id
@Column(name = "dev_code")
private String devCode;//开发者帐号
@Column(name = "dev_name")
private String devName;//开发者名称
@Column(name = "dev_password")
private String devPassword;//开发者密码
@Column(name = "dev_email")
private String devEmail;//开发者电子邮箱
@Column(name = "dev_info")
private String devInfo;//开发者简介
@Column(name = "created_by")
private Integer createdBy;//创建者(来源于backend_user用户表的用户id)
@Column(name = "creation_date")
private Date creationDate;//创建时间
@Column(name = "modify_by")
private Integer modifyBy;//更新者(来源于backend_user用户表的用户id)
@Column(name = "modify_date")
private Date modifyDate;//最新更新时间
}
具体注解意思
看这里
4.编写DevUserRepository相当于一起的Dao层
public interface DevUserRepository extends JpaRepository<DevUser,Integer>, JpaSpecificationExecutor<DevUser> {
//他会知道生成相关的方法,我们只需要继承JpaRepository接口即可
//JpaSpecificationExecutor是使用复杂查询时使用,或者多条件
}
5.编写测试类运行
@Autowired
DevUserRepository devUserRepository;
@Test
public void contextLoads() {
//查
List<DevUser> devUser = devUserRepository.findAll();
devUser.forEach(devUser1 -> System.out.println(devUser1));
}
@Test
public void contextSave() { // 添加
DevUser devUser = new DevUser();
devUser.setDevCode("test003");
devUser.setDevName("张三3");
devUser.setDevPassword("123456");
devUser.setDevEmail("123@qq.com");
devUser.setDevInfo("我是sb");
devUser.setCreatedBy(1);
devUser.setCreationDate(new Date());
DevUser devUser1 = devUserRepository.save(devUser);
System.out.println(devUser1);
}
以上就是添加和查询的方法。