springdata jpa 단일 표 조작 crud 의 인 스 턴 스 코드 상세 설명

7447 단어 springdatajpa시계
1.프로젝트 구축
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 단일 표 조작 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기