Java/SpringBoot

[Spring] JPA 전체 Insert, Update

고기고기물고기 2023. 1. 26. 10:52

Spring JPA insert, Update 구현하는 예제

 

Post 방식으로 구현하였다.

 

AdminNoticeDto (DTO)

@Getter
@NoArgsConstructor
public class AdminNoticeDto {

	private long id;
    
    @NotNull (message = "관리자 명을 입력해주세요")
    private String serviceName;
    @NotNull (message = "서비스 그룹을 입력해주세요")
    private String serviceGroup;
    @NotNull (message = "제목을 입력해주세요")
    private String title;
    @NotNull (message = "내용을 입력해주세요")
    private String content;
    private String writeId;
    private String uptUsrid;
    private Date uptDtm;
    
    //Entity -> Dto
    @Builder
	public AdminNoticeDto(long id, String serviceName, String serviceGroup, 
           String title, String content, String writeId, Date writeDate, 
           String uptUsrid, Date uptDtm) 
   {
        this.id = id;
        this.serviceName = serviceName;
        this.serviceGroup = serviceGroup;
        this.title = title;
        this.content = content;
        this.writeId = writeId;
        this.writeDate = writeDate;
        this.uptUsrid = uptUSrid;
        this.uptDtm = uptDtm;
   }
}

 

AdminNoticeEntity (Entity)

 

@Entity
@NoArgsConstructor
@Getter
@Table(name="AdminNotice")
public class AdminNoticeEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String serviceName;
private String serviceGroup;
private String title;
private String content;
private String writeId;

// JsonFormat - > Select 할때 Format 변경
@JsonFormat(shape = JsomFormat.Shape.STRING, pattern = "yyyy-MM-dd MM:mm:ss"
, timezone = "Asia/Seoul")
@Column(updatable = false) // 수정이 되지 않게
private Date writeDate;
private String uptUsrid;

@JsonFormat(shape = JsomFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss"
, timezone = "Asia/Seoul")
private Date uptDtm;

@Builder
public AdminNoticeEntity(long id, String serviceName, String serviceGroup, String title,
	String content, String writeId, Date writeDate, String uptUsrid, Date uptDtm) {
    
    this.id = id;
    this.serviceName = serviceName;
    this.serviceGroup = serviceGroup;
    this.title = title;
    this.content = content;
    this.wruteId = writeId;
    this.writeDate = writeDate;
    this.uptUsrid = uptUSrid;
    this.uptDtm = uptDtm;
    
    }

}


Update 시 수정이 되지 않게 writeDate 컬럼을 @Column 설정 해줬습니다.

 

ResultMessage

@Data
public class ResultMessage<T> {

	private StatusEnum status;
    private String message;
    private int count;
    private T data;
    
    public ResultMessage()
    {
    	this.status = StatusEnum.BAD_REQUEST;
        this.message = null;
        this.count = 0;
        this.data = null;
    }
    
    public ResultMessage(StatusEnum status, String message, int count, T data)
    {
    	this.status = status;
        this.message = message;
        this.count = count;
        this.data = data;
    }
}

 

StatusEnum

public enum StatusEnum{

	OK(200, "OK"),
    BAD_REQUEST(400, "BAD_REQUEST"),
    NOT_FOUNT(404, "NOT_FOUND"),
    INTERNAL_SERVER_ERROR(500, "INTERNAL_SERVER_ERROR");
    
    int statusCode;
    String code;
    
    StatusEnum(int statusCode, String code)
    {
    	this.statusCode = statusCode;
    	this.code = code;
    }

}

 

 

AdminNoticeController (Controller)

 

@RestController
@RequestMapping("/adminKisline/notice")
public class AdminNoticeController {

	@Autowired
    private AdminMasterService service;
    
    @CrossOrigin(origins = "*")
    @PostMapping("/noticeSave")
    public ResponseEntity<ResultMessage> NoticeSave
    (@valid @RequestBody AdminNoticeDto adminNoticeDto, BindingResult bindingResult)
    {
    	ResultMessage result = new ResultMessage();
        
        String message = "";
        
        // 유효성검사
        if(bindingResult.hasErrors()) {
        	if(bindingResult.hasFieldErrors("serviceName")
            {
            	message = bindingResult.getFieldError("serviceName").getDefaultMessage();
            }
            else if(bindingResult.hasFieldErrors("serviceGroup")) {
            	message = bindingResult.getFieldError("serviceGroup").getDefaultMessage();
            }
            else if(bindgingResult.hasFieldErros("title")) {
            	message = bindgingResult.getFieldError("title").getDefaultMessage();
            }
            else if(bindingResult.hasFieldErrors("content")) {
            	message = bindingResult.getFieldError("content").getDefaultMessage();
            }
            
            result.setStatus(StatusEnum.BAD_REQUEST);
            result.setCount(0);
            result.setMessage(message);
            
            return ResponseEntity.badRequest().body(result);
        }
        
        long id = service.noticeSave(adminNoticeDto);
        
        if(id > 0)
        {
            result.setStatus(StatusEnum.OK);
            result.setCount(1);
            message = "저장 성공했습니다.";
        }
        else
        {
            result.setStatus(StatusEnum.BAD_REQUEST);
            result.SetCount(0);
            message = "저장 실패했습니다.";
        }
        
        result.setMessage(message);
        result.setData(id);
        
        return ResponseEntity.ok().body(result);
        
    }
}

 

AdminMasterService (Service)

 

@Service
public class AdminMasterService {

@Autowired
private AdminNoticeRepository adminNotice;

@Override
@Transactional
public long noticeSave(AdminNoticeDto adminNoticeDto) {

	AdminNoticeEntity adminNoticeEntity = adminNoticeDto.toEntity();

	long id = adminNotice.save(opAdminNotice).getId();
    
    return id;

}

 

save가 Insert 및 update 처리 해줍니다!

 

AdminNoticeRepository (Repository)

 

@EnableJpaRepositories
public interface AdminNoticeRepository extends CrudRepository<AdminNoticeEnitity, Long> {


}

 

 

호출 URL http://localhost:9090/adminKisline/notice/noticeSave Post 방식(Body)

 

Body raw 



{

    "serviceName" : "BWISE",
    "serviceGroup" : "DEV",
    "title" : "포스트맨 테스트입니다",
    "content": "내용 테스트입니다"

}

 

 

결과

{
"status" : "OK",
"message" : "저장 성공했습니다."
"count" : 1,
"data" : 57

}