springdata jpa 단일 표 조작 crud 의 인 스 턴 스 코드 상세 설명
7447 단어 springdatajpa시계
boot 통합 을 사용 하여 springdata jap,my sql 드라이브,lombok,웹 을 가 져 옵 니 다.
1.1 설정
# boot add jpa, oh~ crud in single table
server:
port: 8888
spring:
# datasource
datasource:
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
# jpa config
jpa:
hibernate:
#
ddl-auto: update
# sql
show-sql: true
1.2 실체 클래스
package top.bitqian.springdatajpa.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author echo lovely
* @date 2021/1/10 16:06
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "programmer_info")
@Entity
public class ProgrammerInfo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer programmerId;
@Column(name = "name", unique = true, nullable = false, length = 50)
private String name;
/**
* 0 male
* 1 female
*/
private Integer gender;
private Date personBirth;
@Transient // money
private BigDecimal money;
}
1.3 계승 JpaRepository 인터페이스
package top.bitqian.springdatajpa.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import top.bitqian.springdatajpa.entity.ProgrammerInfo;
/**
* @author echo lovely
* @date 2021/1/10 16:13
*/
public interface ProgrammerRepository extends JpaRepository<ProgrammerInfo, Integer> {
// TODO: todo sth...
}
2.대량 증가비 즈 니스 클래스
package top.bitqian.springdatajpa.service.impl;
import org.springframework.stereotype.Service;
import top.bitqian.springdatajpa.entity.ProgrammerInfo;
import top.bitqian.springdatajpa.repository.ProgrammerRepository;
import top.bitqian.springdatajpa.service.ProgrammerInfoService;
import javax.annotation.Resource;
import java.util.List;
/**
* @author echo lovely
* @date 2021/1/10 16:15
*/
@Service
public class ProgrammerInfoServiceImpl implements ProgrammerInfoService {
@Resource
private ProgrammerRepository programmerRepository;
@Override
public void saveBatch(List<ProgrammerInfo> programmerInfos) {
programmerRepository.
saveAll(programmerInfos).
forEach(r -> System.out.println(" =>" + r));
}
}
테스트
package top.bitqian.springdatajpa;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import top.bitqian.springdatajpa.entity.ProgrammerInfo;
import top.bitqian.springdatajpa.service.ProgrammerInfoService;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@SpringBootTest
class SpringdataJpaApplicationTests {
@Resource
private ProgrammerInfoService programmerInfoService;
@Test
void contextLoads() {
List<ProgrammerInfo> list = new ArrayList<>();
Date date = new Date();
list.add(new ProgrammerInfo(null, " ", 0, date, null));
list.add(new ProgrammerInfo(null, " ", 1, date, null));
list.add(new ProgrammerInfo(null, " ", 0, date, null));
programmerInfoService.saveBatch(list);
}
}
3.조회
조건 에 따라 정확하게 조회 하고 Example 을 매개 변수 로 합 니 다.
@Override
public List<ProgrammerInfo> getProgrammerByInfo(ProgrammerInfo programmerInfo) {
//
Example<ProgrammerInfo> example = Example.of(programmerInfo);
return programmerRepository.findAll(example);
}
@Test
void testGetProgrammerByInfo() {
// 。
ProgrammerInfo info = new ProgrammerInfo(null, " ", null, null, null);
programmerInfoService.getProgrammerByInfo(info).forEach(System.out::println);
}
사용자 정의 hql 구문 조회
// 1. query by hql
@Query(value = "from ProgrammerInfo pi where pi.name like ?1")
List<ProgrammerInfo> findProgrammerByName(String name);
@Test
void testPrByName() {
// ' '
pr.findProgrammerByName("% %").forEach(System.out::println);
}
사용자 정의 sql 구문 조회
// 2. query by sql
@Query(value = "select * from programmer_info where name like :#{#pi.name} and gender = :#{#pi.gender}", nativeQuery = true)
List<ProgrammerInfo> findPrByPrInfo(@Param("pi") ProgrammerInfo programmerInfo);
@Test
void testPrByPr() {
ProgrammerInfo info = new ProgrammerInfo(null, "% %", 0, null, null);
pr.findPrByPrInfo(info).forEach(System.out::println);
}
4.hql 로 수정
sql 도 좋 습 니 다.hql 우선 입 니 다.
// upd
@Transactional
@Modifying
@Query(value = "update ProgrammerInfo p set p.name = :#{#pi.name}, p.personBirth = :#{#pi.personBirth} where p.programmerId = :#{#pi.programmerId}")
void updPrById(@Param("pi") ProgrammerInfo programmerInfo);
@Test
void testPrUpd() {
ProgrammerInfo info = new ProgrammerInfo(1, " ", 0, new Date(), null);
pr.updPrById(info);
}
5.hql 로 삭제
// del
@Transactional
@Modifying
@Query(value = "delete from ProgrammerInfo where programmerId = :#{#pi.programmerId}")
void delPrById(@Param("pi") ProgrammerInfo programmerInfo);
@Test
void testPrDel() {
ProgrammerInfo info = new ProgrammerInfo(1, null, 0, null, null);
pr.delPrById(info);
}
구덩이:
1.수정 작업 은 사무 통 제 를 더 해 야 한다.
2.@Query 가 작업 을 진행 할 때 자리 표시 자 는 주의 세트 를 사용 합 니 다.착각 하지 마.
단일 표 조작 은 가능 하지만 my batisPlus 는 더 easy.jpg.
springdata jpa 단일 표 조작 crud 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 springdata jpa 단일 표 조작 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin Springboot -- JPA, 최대 절전 모드, h2 DB の初期設定に失敗Spring 公式の츄트리알 永続的なストレージとしては機能しない. つまりアプリの起動のたびに初期化される. 組み込みとして追加できる. ( なので psql サーバーを Docker 에서 立てて ) URL ( と認証 ) 書いて接続...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.