SpringBoot 특별 연구 Part22 : SpringBoot 통합 JPA - 스프링 데이터 JPA

첫째, 개념

1. 봄의 데이터는 무엇입니까

봄 데이터 목적은하는 것입니다 액세스 데이터에 스프링 프레임 워크를 기반으로 응용 프로그램을 구축 단순화
클라우드 데이터 서비스 등을위한 프레임 워크를지도-감소 비 관계형 데이터베이스를 포함하는 관계형 데이터베이스에 대한 액세스 지원이도 포함되어 있습니다

봄의 데이터는 아래에 많은 하위 프로젝트가 있습니다 :

– Spring Data Commons
– Spring Data JPA
– Spring Data KeyValue
– Spring Data LDAP
– Spring Data MongoDB
– Spring Data Gemfire
– Spring Data REST
– Spring Data Redis
– Spring Data for Apache Cassandra
– Spring Data for Apache Solr
– Spring Data Couchbase (community module)
– Spring Data Elasticsearch (community module)
– Spring Data Neo4j (community module)

SpringData는 사용 제공 통합 API를 데이터 액세스 계층에서 동작하는
목적을 달성하기 위해 주로 스프링 데이터를 공동으로 구성되어 프로젝트
관계형 또는 비 관계형 데이터 접근 기술을 사용하는 것은 때 스프링 데이터 가공을 스프링에 의해 제공된 통합 표준을 기반으로
그 표준이 포함 CRUD는 (업데이트가 삭제 얻을 생성) 정렬 쿼리페이징 관련 작업을

봄의 데이터는 일부 제공 통합 저장소 인터페이스
이 인터페이스 기능은 기능과 낙관적 잠금 장치를 페이징 CRUD 기능을 가지고

CrudRepository<T, ID extends Serializable> :基本CRUD操作
PagingAndSortingRepository<T, ID extends Serializable> :基本CRUD及分页
RevisionRepository<T, ID extends Serializable, N extends Number & Comparable<N>> :乐观锁机制

이들에게만 내장의 구체적인 실현에 대한 걱정없이 해당 기능을 가지고 인터페이스를 상속 자신의 인터페이스를 작성하는 데 사용할

봄 데이터는 데이터 액세스 클래스 템플릿 제공 템플릿
예 RedisTemplate MongoTemplate 등

그래서 봄 데이터와 "하는 것과 동일 지향 프로그래밍 SpringData는 "

2. JPA 무엇입니까

JPA는 프레임하지만 J2EE- 아닌 표준 : J AVA P의 ersistence의 파이 또한 사양에 규정 된 규격의 JSR JSR이 있다 J AVA S pecification R & LT 의미 equests 약어 자바 규격 제안 명세서의이 알려진 많은 구현 예 존재 최대 절전 모드 또한 상단 링크는 OpenJPA 등



이들 프레임 워크의 합에 해당 봄 데이터 재 포장
의 기본 최대 절전 모드를 기본 스프링 데이터


두, SpringBoot 통합 JPA

첫째, 프로젝트를 생성
그림 삽입 설명 여기
SpringBoot 이니셜을 만들 수있는 마법사가 스프링 데이터 JPA를 추가해야하는 경우

수동의 도입에 따라 작성해야하는 경우 :

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
        </exclusion>
    </exclusions>
</dependency>

그리고 데이터 소스 구성 파일을 작성 :

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/springboot_jpa?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
    username: root
    password: 123456

JPA 스펙이 ORM 기반으로하므로 (객체 관계형 매핑) 생각은
이렇게 기록 된 데이터 엔티티 클래스 테이블 콩 수 매핑매핑

엔티티 클래스의 제조 :
해당하는 테이블 스프링 데이터 JPA 또한 자동 테이블 생성 기능을 제공하지 않는 경우 데이터베이스 (물론, 전제가 구성된

// 使用JPA注解来配置映射关系
// @Entity注解:告诉JPA该类是一个实体类 是和数据表进行映射的类
@Entity
// @Table注解:主动指定和数据库中的哪个数据表进行映射 若省略 则默认表名为该类的类名小写
@Table(name = "tb_user")
public class User {

    // @Id注解:表明该属性是一个主键
    @Id
    // @GeneratedValue注解:指定该属性的主键生成策略 IDENTITY代表自增主键
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    // @Column注解:表明该属性是和数据表对应的一个列 还可指定列名和最大长度
    @Column(name = "last_name",length = 20)
    private String lastName;
    // 若不指定列名 则默认列名为该属性的属性名
    @Column
    private String email;

   getter()setter()方法省略...
}

마지막으로, 구성 파일의 몇 가지 간단한 기본 구성 :

jpa:
  hibernate:
    # 数据表的生成策略:update代表更新或创建数据表 若无该数据表 则创建 若有该数据表 则更新
    ddl-auto: update
  # 显示每次执行的sql语句
  show-sql: true

에서 JPA 특성 JpaPropertiesI 클래스를 참조하여 구성 가능한 속성을 모르는 경우이 클래스
까지 모든 구성이 완료

간단한 테스트 :

@RestController
public class UserController {

    @Autowired
    UserRepository userRepository;

    @GetMapping("/user/{id}")
    public User getUser(@PathVariable("id") Integer id)
    {
        // 在2.x的新版本的Spring Data JPA中 findById()返回值有可能是空值 须用orElse()进行判断
        return (User) userRepository.findById(id).orElse(null);
    }

    @GetMapping("/addUser")
    public User insertUser(User user)
    {
        // 返回该储存的对象
        return userRepository.save(user);
    }
}

결과 :
그림 삽입 설명 여기
시험은 모든 SQL 문을 작성하지 않고 성공


게시 된 174 개 원래 기사 · 원 찬양 5 ·은 240,000 + 조회수

추천

출처blog.csdn.net/Piconjo/article/details/105100031