Spring Boot学习(九):整合spring data jpa

这里是一个学习过程笔记的汇总:Spring Boot学习汇总


1、什么是jpa?

        JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。JPA的总体思想和现有Hibernate、TopLink、JDO等ORM框架大体一致。总的来说,JPA包括以下3方面的技术:

ORM映射元数据:

        JPA支持XML和JDK5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;

API:

        用来操作实体对象,执行CRUD操作,框架在后台替代我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。

查询语言:

        这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。

2、什么是spring data jpa?

看名字,就知道和spring 有关,没错,spring data jpa是spring 对jpa的整合,使用spring data jpa就可以拥有jpa相关的所有功能。

spring data jpa的核心概念:

  • Repository:最顶层的接口,是一个空的接口,目的是为了统一所有Repository的类型,且能让组件扫描的时候自动识别。
  • CrudRepository :是Repository的子接口,提供CRUD的功能
  • PagingAndSortingRepository:是CrudRepository的子接口,添加分页和排序的功能
  • JpaRepository:是PagingAndSortingRepository的子接口,增加了一些实用的功能,比如:批量操作等。
  • JpaSpecificationExecutor:用来做负责查询的接口
  • Specification:是Spring Data JPA提供的一个查询规范,要做复杂的查询,只需围绕这个规范来设置查询条件即可

3、开始创建整合的案例

这个案例创建过程参考上一篇:Spring Boot整合Mybatis

3.1、快速创建spring boot项目,选择web,jpa,mysql模块,这个过程就省略

3.2、修改主配置文件,添加数据库连接相关参数。

### database ###
spring.datasource.url=jdbc:mysql://localhost:3306/springboot_test?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=yjx941001
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

3.3、数据库创建user表,参考上一篇。

3.4、创建User实体类:

package com.example.jpa.domain;

import javax.persistence.*;
import java.io.Serializable;

/**
 * @author pavel
 * @date 2018/11/20 0020
 */
@Entity
@Table(name = "user")
public class User implements Serializable {

    private static final long serialVersionUID = -5974243692729544683L;

    @Id
    @GeneratedValue
    @Column(name = "id")
    private Long id;

    @Column(name = "age")
    private Integer age;

    @Column(name = "name")
    private String name;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
}

3.5、创建dao层,这里的UserDao接口继承JpaRepository和JpaSpeciaficationExecutor接口,拥有基本的curd,分页,排序功能

package com.example.jpa.dao;

import com.example.jpa.domain.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

/**
 * @author pavel
 * @date 2018/11/20 0020
 */
public interface UserDao extends JpaRepository<User, Long>, JpaSpecificationExecutor<User> {

}

3.6、创建service,这里就写一个查询列表的方法。

package com.example.jpa.service;

import com.example.jpa.dao.UserDao;
import com.example.jpa.domain.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author pavel
 * @date 2018/11/20 0020
 */
@Service
public class UserService {

    @Autowired
    private UserDao userDao;

    public List<User> findAll() {
        return userDao.findAll();
    }
}

3.7、测试,我们打印列表中user的详细信息

package com.example.jpa;

import com.example.jpa.domain.User;
import com.example.jpa.service.UserService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest
public class JpaApplicationTests {

    @Autowired
    private UserService userService;

    @Test
    public void contextLoads() {
        List<User> list = userService.findAll();
        list.forEach(user -> {
            System.out.println(user);
        });
    }

}

看控制台输出:

到此,spring boot整合spring data jpa的案例就结束了,其他的curd相关api可以自己测试一下。

发布了34 篇原创文章 · 获赞 43 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/pavel101/article/details/84289463