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
}