SpringBoot-整合JPA

一 JPA是什么

JPA(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。他的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate,TopLink,JDO等ORM框架各自为营的局面。值得注意的是,JPA是在充分吸收了现有Hibernate,TopLink,JDO等ORM框架的基础上发展而来的,具有易于使用,伸缩性强等优点。从目前的开发社区的反应上看,JPA受到了极大的支持和赞扬,其中就包括了Spring与EJB3.0的开发团队。

注意:JPA是一套规范,不是一套产品,那么像Hibernate,TopLink,JDO他们是一套产品,如果说这些产品实现了这个JPA规范,那么我们就可以叫他们为JPA的实现产品。

二 Spring Data JPA

Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring Data JPA 可以极大提高开发效率!spring data jpa让我们解脱了DAO层的操作,基本上所有CRUD都可以依赖于它来实现。

三 快速实现一个简单案例

3.1 数据库准备

CREATE DATABASE IF NOT EXISTS springboot_project DEFAULT CHARSET utf8;

3.2 引入jar依赖

首先我们在pom.xml中引入jpa的依赖:


    org.springframework.boot
    spring-boot-starter-data-jpa

然后引入mysql连接和druid连接池:


    mysql
    mysql-connector-java
    runtime

 

    com.alibaba
    druid
    1.0.29

当然我们最后需要Controller层做个简单的测试,所以把web依赖也引入进来:


    org.springframework.boot
    spring-boot-starter-web

3.3 修改配置文件

在application-dev.properties文件配置mysql的驱动类、数据库连接地址、账号、密码以及ddl策略:

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot_project
spring.datasource.username=root
spring.datasource.password=Anbang713

spring.jpa.hibernate.ddl-auto:create
spring.jpa.show-sql:true

3.4 创建实体类

通过@Entity表明这是一个映射的实体类,@Id表明这是主键id,@GeneratedValue表明主键自动生成。

@Entity
public class Student {

  @Id
  @GeneratedValue
  private Integer id;
  private String name;
  private String cardNum;

  // 省略getter和setter
}

3.5 创建Dao 

数据访问层,通过编写一个继承自 JpaRepository 的接口就能完成数据访问,其中包含了几本的单表查询的方法,非常的方便。值得注意的是,这个Student是对象名,而不是具体的表名,另外Interger是主键的类型,一般为Integer或者Long。

public interface StudentDao extends JpaRepository {

}

3.6 创建Service及其实现类

public interface StudentService {

  List findAll();

  Student findById(Integer id);

  Integer save(Student entity) throws Exception;
}

@Service
public class StudentServiceImpl implements StudentService {

  @Autowired
  private StudentDao studentDao;

  @Override
  public List findAll() {
    return studentDao.findAll();
  }

  @Override
  public Student findById(Integer id) {
    Optional students = studentDao.findById(id);
    if (students.isPresent() && students.get() != null) {
      return students.get();
    }
    return null;
  }

  @Override
  public Integer save(Student entity) throws Exception {
    if (entity.getId() != null) {
      Student perz = studentDao.saveAndFlush(entity);
      return perz.getId();
    }
    Student perz = studentDao.save(entity);
    return perz.getId();
  }

}

 3.7 创建web做简单测试

@RestController
@RequestMapping("/student/*")
public class StudentController {

  @Autowired
  private StudentService studentService;

  @RequestMapping("findAll")
  public List findAll() {
    return studentService.findAll();
  }

  @RequestMapping(value = "{id}", method = RequestMethod.GET)
  public Student findById(@PathVariable("id") Integer id) {
    return studentService.findById(id);
  }

  @RequestMapping(value = "save", method = RequestMethod.POST)
  public Integer save(@RequestBody Student entity) throws Exception {
    return studentService.save(entity);
  }
}

至此,我们所有的编码都已经实现了,我们的整个代码结构看起来是这样的:

 SpringBoot-整合JPA_第1张图片

3.8 测试

启动springboot入口类,可以看到日志输出,由于我们配的ddl策略是create,所以会先删除表再创建相关表。 

SpringBoot-整合JPA_第2张图片

3.8.1 测试save接口 

SpringBoot-整合JPA_第3张图片

3.8.2 测试findById接口 

SpringBoot-整合JPA_第4张图片

3.8.3 测试findAll接口 

SpringBoot-整合JPA_第5张图片

源代码地址:https://gitee.com/chengab/SpringBoot/tree/master/springboot/src/main/java/com/study/springboot/jpa

参考博客: SpringBoot非官方教程 | 第四篇:SpringBoot 整合JPA

你可能感兴趣的:(SpringBoot)