첫째, 개념
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 특성 JpaProperties
I 클래스를 참조하여 구성 가능한 속성을 모르는 경우이 클래스
까지 모든 구성이 완료
간단한 테스트 :
@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 문을 작성하지 않고 성공