(SpringBoot) JPA 예제2
깃허브 repository : SpringBoot class practice
스프링 부트 예제
스프링 부트 프레임 워크로 넘어와서의 JPA 예제입니다.
오늘은 JPA를 더 자세히 배워보도록 하는 것 같다.
프로젝트 생성 후 의존성 주입 해준다.
entity 패키지 생성 후 CrudEntity.java파일을 만들어줍니다.
어제와 비슷한데,
@Entity어노테이션은 application.yml 파일에서 jpa 설정에서 ddl: create라면 기존의 같은 이름의 테이블을 drop하고 새로 create해준다. 다만 여기서는 직접 entity이름을 지정해 줬으므로 그 이름으로 테이블이 생성된다.
@Build 어노테이션은 sql 사용시 파라미터 값을 쉽게 삽입해주기 위해 사용
@NoArgsConstructor / @AllArgsConstructor 는 묵시적 / 명시적 생성자를 생성해주는 어노테이션이다.
@Id 어제 했듯이 NOT NULL과 PRIMARY KEY 속성을 부여해 주는 어노테이션
@Column 은 추가로 칼럼 속성을 추가해주는 어노테이션이다. 위에서는 NOT NULL 속성을 부여해줬다.
Repostitory 생성
알고봤더니 클래스로 생성이 되어서 그랬던 것이다. Interface로 바꿔준다.
@Query : JPA에서 제공하는 기본 Repository 안에는 다양한 sql들이 만들어져 있다. 평소에는 이러한 sql문들을 쓰면 되지만 복잡하거나 직접 sql문을 작성할때 이 애노테이션을 선언하고 안에 sql문을 지정해주면 된다.
application.yml에 JPA ddl설정이 create라 서버를 돌리면 테이블이 drop되서 결과 값이 나오질 않는다. 이부분을 update로 바꿔준다.
다시 값들을 삽입하고 돌린다.
정보 검색을 넣어보겠다.
매핑은 /searchParamRepo?name=값 이런 형식으로 한다.
@GetMapping("/searchParamRepo")
public String searchParamRepoMember(@RequestParam(value = "name") String name){
return crudEntityRepository.searchParamRepo(name).toString();
}
searchParamRepo 매서드는 이미 repository에서 선언해 줬으므로 실행해 본다..
정보 삽입 구현
http://localhost:8080/test/insert?name=값&age=숫자 형식으로 구현
@GetMapping("/insert")
public String insertMember(@RequestParam(value = "name") String name, @RequestParam(value = "age") int age){
if(crudEntityRepository.findById(name).isPresent()){
return "동일한 이름이 있습니다.";
} else {
CrudEntity entity = CrudEntity.builder().name(name).age(age).build();
crudEntityRepository.save(entity);
return "이름 : "+name+"나이 : "+age+"으로 추가되었습니다.";
}
}
name과 age 값을 입력하면 값이 삽입된다. 중복된 이름이면 동일한 이름이 있다고 뜬다.
정보 업데이트 구현
http://localhost:8080/test/update?name=춘향이&age=40 형식
@GetMapping("/update")
public String updateMember(@RequestParam(value = "name") String name, @RequestParam(value = "age") int age){
if(crudEntityRepository.findById(name).isEmpty()){
return "입력한 "+ name+ "이 존재하지 않습니다.";
} else {
crudEntityRepository.save(CrudEntity.builder().name(name).age(age).build());
return name + "의 나이를 "+age+ "로 변경했습니다.";
}
}
이전들과 비슷하지만 다만, update에서도 insert와 똑같이 save 매서드를 쓴다는 것이다.
마지막으로 삭제 기능 구현
http://localhost:8080/test/delete?name=값 형식
@GetMapping("delete")
public String deleteMember(@RequestParam(value = "name") String name){
if(crudEntityRepository.findById(name).isEmpty()){
return "입력한 "+ name+ "이 존재하지 않습니다.";
} else {
crudEntityRepository.delete(CrudEntity.builder().name(name).build());
return name + "삭제 완료";
}
}