Programing/JPA

JPA with Springboot, 저장, 수정, 삭제 방법, RUD

리커니 2021. 5. 7.
반응형

JPA with Springboot, 저장, 수정, 삭제 방법, RUD

 

이전 포스팅에서 Springboot에서 JPA 설정 및 단일, 복수 조회, 페이징, 조건문처리

방법에 대해서 알아보았습니다.

 

Link : aljjabaegi.tistory.com/561

 

JPA 설정 방법, Guide To JPA with Springboot

JPA 설정 방법, Guide To JPA with Springboot 이전 포스팅에서 JPA를 왜 사용해야 하는지에 대해서 포스팅 했었습니다. Link : aljjabaegi.tistory.com/553 JPA (Java Persistance API) 란? 왜 써야하는가..

aljjabaegi.tistory.com

Link : aljjabaegi.tistory.com/562

 

JPA with Springboot, Entity mapping 데이터 조회 방법

JPA with Springboot, Entity mapping 데이터 조회 방법 이전 포스팅에서 JPA 설정 방법을 알아보았습니다. Link : aljjabaegi.tistory.com/561 JPA 설정 방법, Guide To JPA with Springboot JPA 설정 방법, G..

aljjabaegi.tistory.com

Link : aljjabaegi.tistory.com/563

 

JPA with Springboot, paging, sorting 방법 Pageable, Sort

Sprincboot JPA paging, sorting 방법 Pageable, Sort Springboot JPA 설정 방법과 Entity mapping 방법은 아래의 Link를 참고하세요. Link : aljjabaegi.tistory.com/561 JPA 설정 방법, Guide To JPA with Sprin..

aljjabaegi.tistory.com

Link : aljjabaegi.tistory.com/564

 

JPA with Springboot, 조건 조회, Specification, Predicate, CriteriaBuilder

JPA with Springboot, 조건 조회, Specification, Predicate, CriteriaBuilder 이번 포스팅의 코드는 아래의 Link 들의 코드에 이어 진행됩니다. 아래의 Link를 참고하세요. Link : aljjabaegi.tistory.com/562 JP..

aljjabaegi.tistory.com

 

이어서, 데이터의 추가, 수정, 삭제 방법에 대해 알아보도록 하겠습니다. 

위의 포스팅에 있는 코드를 참고하여 사용하니, 포스팅을 순서대로 참고하시고 봐주시길 바랍니다.

 

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 기능을 모두 구현해 보았습니다.

진입장벽이 낮지는 않기 때문에 복잡한 쿼리를 작성해야 할 때는 한계점에 부딛히기도 할 것 입니다.

 

하지만 장점이 너무 명확하기 때문에 조금씩 공부하여 익숙해지면

프로젝트를 진행하는데 많은 도움이 될 것 입니다.

공부합니다!

 

반응형

댓글

💲 추천 글