JPA with Springboot, 저장, 수정, 삭제 방법, RUD
이전 포스팅에서 Springboot에서 JPA 설정 및 단일, 복수 조회, 페이징, 조건문처리
방법에 대해서 알아보았습니다.
Link : aljjabaegi.tistory.com/561
Link : aljjabaegi.tistory.com/562
Link : aljjabaegi.tistory.com/563
Link : aljjabaegi.tistory.com/564
이어서, 데이터의 추가, 수정, 삭제 방법에 대해 알아보도록 하겠습니다.
위의 포스팅에 있는 코드를 참고하여 사용하니, 포스팅을 순서대로 참고하시고 봐주시길 바랍니다.
RUD 기능을 구현하기 위해 Interface를 생성하였습니다.
[RecordService Interface]
public interface RecordService {
/**
* 데이터 등록
* @param Map<String, Object>
* @throws Exception
*/
void insGridInfo(Map<String, Object> m) throws Exception;
/**
* 데이터 수정
* @param Map<String, Object>
* @throws Exception
*/
void udtGridInfo(Map<String, Object> m) throws Exception;
/**
* 데이터 삭제 (단일)
* @param Map<String, Object>
* @throws Exception
*/
void delGridInfo(Map<String, Object> m) throws Exception;
/**
* 데이터 삭제 (복수)
* @param Map<String, Object>
* @throws Exception
*/
void delGridList(List<Map<String, Object>> list) throws Exception;
}
저장, 수정, 단일데이터 삭제, 복수데이터 삭제 메소드가 있는 Interface이고
기존에 작성하였던 MemberService에 Implements 하여 메소드를 오버라이드 해줍니다.
@Service("memberService")
public class MemberListService implements MemberListServiceImpl, RecordService{
@Autowired
private MemberRepository repo;
@Override public List<Member> getMemberList(Map<String, Object> map) throws Exception {
.
.
.
.
.
}
/*새로 추가된 RUD 메소드*/
@Override
public void insGridInfo(Map<String, Object> map) throws Exception{
}
@Override
public void udtGridInfo(Map<String, Object> map) throws Exception{
}
@Override
public void delGridInfo(Map<String, Object> map) throws Exception{
}
@Override
public void delGridList<List<Map<String, Object>> list) throws Exception{
}
}
이제 각 메소드의 기능을 구현해보도록 하겠습니다.
[Insert]
@Override
public void insGridInfo(Map<String, Object> map) throws Exception {
Member member = new Member();
member.setId((String) map.get("id"));
member.setName((String) map.get("name"));
member.setPassword((String) map.get("password"));
member.setRoles((String) map.get("roles"));
member.setUseYn((String) map.get("useYn"));
member.setRegDtm(CmmnVar.getDateString());
memberRepo.save(member);
}
저장로직은 Member 객체를 새로 생성하여 값을 채우고 save 메소드로 전달만 해주면 됩니다.
[update]
@Override
public void udtGridInfo(Map<String, Object> map) throws Exception {
Optional<Member> oMember = memberRepo.findById((String) map.get("id"));
if(oMember.isPresent()) {
Member member = oMember.get();
if(!StringUtils.isEmpty((String) map.get("name"))) {
member.setName((String) map.get("name"));
member.setRoles((String) map.get("roles"));
member.setUseYn((String) map.get("useYn"));
}
memberRepo.save(member);
}
}
수정로직은 키 값을 전달하여 수정할 데이터를 Optional로 받습니다.
Optional 로 받는 이유는 없을 수도 있는 객체(null)를 처리하기 위함입니다.
그리고 isPresnet 메소드를 통해 객체가 있는지 판단하여 있을 경우 값을 넣고 save 해주시면 됩니다.
[delete - single]
@Override
public void delGridInfo(Map<String, Object> map) throws Exception {
Optional<Member> oMember = memberRepo.findById((String) map.get("id"));
if(oMember.isPresent()) {
memberRepo.delete(oMember.get());
}
}
update와 같은 방식입니다. Optional로 데이터를 받아 있을 경우 delete 해줍니다.
[delete - multi]
@Override
public void delGridList(List<Map<String, Object>> list) throws Exception {
for(Map<String, Object> map : list) {
Optional<Member> oMember = memberRepo.findById((String) map.get("id"));
if(oMember.isPresent()) {
memberRepo.delete(oMember.get());
}
}
}
단일 삭제와 반복문의 차이만 있습니다.
이번 포스팅까지 총 5개로 JPA를 활용한 CRUD 기능을 모두 구현해 보았습니다.
진입장벽이 낮지는 않기 때문에 복잡한 쿼리를 작성해야 할 때는 한계점에 부딛히기도 할 것 입니다.
하지만 장점이 너무 명확하기 때문에 조금씩 공부하여 익숙해지면
프로젝트를 진행하는데 많은 도움이 될 것 입니다.
공부합니다!
'Programing > JPA' 카테고리의 다른 글
JPA MapStruct, ModelMapper 설정 방법, 차이 Entity to DTO, DTO to Entity (0) | 2023.02.03 |
---|---|
JPA with Springboot, @convert date type to string or reverse (0) | 2021.05.11 |
JPA with Springboot, 조건 조회, Specification, Predicate, CriteriaBuilder (2) | 2021.05.04 |
JPA with Springboot, paging, sorting 방법 Pageable, Sort (0) | 2021.05.04 |
JPA with Springboot, Entity mapping 데이터 조회 방법 (4) | 2021.05.04 |
댓글