SpringDataJPA-02-JPA 입문 사례
Hibernate,JPA,SpringDataJpaJPA 입문 안 열★JPA 의 API 소개
getOne 과 findOne 의 비교JPQL 의 기본 사용specification 의 기본 사용example 의 기본 사용
멀 티 탭 디자인
표 간 의 구분
분석 절차
다 중 표 디자인(한 쌍 이 많다)
대상 내 비게 이 션 조회
JPA 입문 안 열
수요 소개
『8195』우리 가 실현 하 는 기능 은 한 고객 을 데이터 뱅 크 의 고객 표 에 저장 하 는 것 이다.
데이터베이스 만 들 기
/* */
CREATE TABLE cst_customer (
cust_id bigint(32) NOT NULL AUTO_INCREMENT COMMENT ' ( )',
cust_name varchar(32) NOT NULL COMMENT ' ( )',
cust_source varchar(32) DEFAULT NULL COMMENT ' ',
cust_industry varchar(32) DEFAULT NULL COMMENT ' ',
cust_level varchar(32) DEFAULT NULL COMMENT ' ',
cust_address varchar(128) DEFAULT NULL COMMENT ' ',
cust_phone varchar(64) DEFAULT NULL COMMENT ' ',
PRIMARY KEY (`cust_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
가 져 오기 의존
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.3.1.RELEASEversion>
<relativePath/>
parent>
<properties>
<java.version>1.8java.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starterartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-jpaartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-jdbcartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<scope>runtimescope>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-configuration-processorartifactId>
<optional>trueoptional>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<optional>trueoptional>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
<exclusions>
<exclusion>
<groupId>org.junit.vintagegroupId>
<artifactId>junit-vintage-engineartifactId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druid-spring-boot-starterartifactId>
<version>1.1.20version>
dependency>
dependencies>
project>
프로필
spring:
datasource:
username: jiang
password: jiang
url: jdbc:mysql://localhost:3306/learn?characterEncoding=UTF-8&serverTimezone=UTC
type: com.alibaba.druid.pool.DruidDataSource
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 30000
validationQuery: select 'x';
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
filters: stat,wall,slf4j
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
useGlobalDataSourceStat: true
jpa:
hibernate:
# ,create: ( , ); update: ( , ); none:
ddl-auto: update
show-sql: true # SQ
logging:
level:
top.codekiller.test.testspringdataone: debug
실체 류
@Entity
『8195』역할:현재 클래스 를 실체 클래스 로 지정 합 니 다.
@Table
『8195』역할:실체 류 와 표 간 의 대응 관 계 를 지정 합 니 다.
속성:name:데이터베이스 시트 의 이름 을 지정 합 니 다.
@Id
*8195:현재 필드 를 주 키 로 지정 합 니 다.
@GeneratedValue
*8195:메 인 키 의 생 성 방식 을 지정 합 니 다.
속성:strategy:메 인 키 생 성 전략 을 지정 합 니 다.Generation Type 매 거 진 을 통 해 값 을 얻 을 수 있 습 니 다.
@Column
작용:실체 류 속성 과 데이터베이스 테이블 간 의 대응 관 계 를 지정 합 니 다.
속성:
*8195*8195*name:데이터베이스 시트 의 열 이름 을 지정 합 니 다.
unique:유일 하 게
nullable:비어 있 을 수 있 습 니까?
삽입 가능 여부
업데이트 가능 여부
columnDefinition:테이블 을 만 들 때 이 열 을 만 드 는 DDL 을 정의 합 니 다.
secondary Table:시계 이름 에서.이 열 이 주 표 에 세 워 지지 않 으 면(기본 값 은 주 표 에 세 워 집 니 다)이 속성 은 표 의 이름 으로 개발 환경 을 만 드 는 것 을 정의 합 니 다[중점]
package top.codekiller.test.testspringdataone.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
/**
* @author codekiller
* @date 2020/6/27 20:49
* @Description
*/
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name="cst_customer")
public class Customer {
/**
* ( )
*/
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY) // , Auto
@Column(name="cust_id") // ,
private Long custId;
/**
* ( )
*/
@Column(name="cust_name")
private String custName;
/**
*
*/
@Column(name="cust_source")
private String custSource;
/**
*
*/
@Column(name="cust_industry")
private String custIndustry;
/**
*
*/
@Column(name="cust_level")
private String custLevel;
/**
*
*/
@Column(name="cust_address")
private String custAddress;
/**
*
*/
@Column(name="cust_phone")
private String custPhone;
}
예금 류
spring 통합 이 적용 되 지 않 으 면 Repository 를 만 들 필요 가 없습니다.이 단 계 는 건 너 뛸 수 있 습 니 다.
@Repository
public interface CustomerRepository extends JpaRepository<Customer,Long>, JpaSpecificationExecutor<Customer> {
}
JpaRepository:기본 CRUD 조작Jpa SpecificationExecutor:복잡 한 CRUD 작업,예 를 들 어 페이지조작 하 다.
데이터 추가
spring 통합 이 적용 되 지 않 습 니 다(Repository 를 만 들 필요 가 없습니다)
/**
* , Persistence
* , jpa
*/
EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
//
EntityManager em = factory.createEntityManager();
//
EntityTransaction tx = em.getTransaction();
//
tx.begin();
Customer c = new Customer();
c.setCustName(" ");
//
em.persist(c);
//
tx.commit();
//
em.close();
factory.close();
spring 통합 작업
@Autowired
private CustomerRepository customerRepository;
/**
* @Description
* @date 2020/6/27 22:52
* @return void
*/
@Test
@Transactional(rollbackFor = Exception.class)
public void testSave(){
Customer customer=new Customer();
customer.setCustId(null);
customer.setCustName(" ");
customer.setCustIndustry(" ");
//
this.customerRepository.save(customer);
}
조회 데이터
@Test
public void testQuery(){
Optional<Customer> optional = this.customerRepository.findById(1L);
System.out.println(optional.get());
}
기본 업데이트
@Test
public void testUpdate(){
Customer customer=new Customer();
customer.setCustId(2L);
customer.setCustName(" ");
this.customerRepository.save(customer);
}
기본 삭제
@Test
public void testDelete(){
this.customerRepository.deleteById(3L);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.