Java/SpringBoot
[Spring] JPA 특정 컬럼 Update
고기고기물고기
2023. 1. 26. 13:41
Spring JPA 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 char useYn
private String writeId;
private String uptUsrid;
private Date uptDtm;
//Entity -> Dto
@Builder
public AdminNoticeDto(long id, String serviceName, String serviceGroup,
String title, String content, char useYn, String writeId, Date writeDate,
String uptUsrid, Date uptDtm)
{
this.id = id;
this.serviceName = serviceName;
this.serviceGroup = serviceGroup;
this.title = title;
this.content = content;
this.useYn = useYn;
this.writeId = writeId;
this.writeDate = writeDate;
this.uptUsrid = uptUSrid;
this.uptDtm = uptDtm;
}
// Dto -> Entity
public AdminNoticeEntity toEntity()
{
return AdminNoticeEntity.builder()
.id(id)
.serviceName(serviceName)
.serviceGroup(serviceGroup)
.title(title)
.content(content)
.useYn(useYn)
.writeId(writeId)
.writeDate(new Date()) // 현재 날짜
.uptUsrid(uptUsrid)
.uptDtm(new Date()) // 현재 날짜
.build();
}
// Entity -> Dto
public AdminNoticeDto(AdminNoticeEntity adminNoticeEntity)
{
this.id = adminNoticeEntity.getId();
this.serviceName = adminNoticeEntity.getServiceName();
this.serviceGroup = adminNoticeEntity.getServiceGroup();
this.title = adminNoticeEntity.getTitle();
this.content = adminNoticeEntity.getContent();
this.useYn = adminNoticeEntity.getUseYn();
this.writeId = adminNoticeEntity.getWritedId();
this.writeDate = adminNoticeEntity.getWriteDate();
this.uptUsrid = adminNoticeEntity.getUptUsrid();
this.uptDtm = adminNoticeEntity.getUptDtm();
}
}
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 AdminNoticeServiceImpl noticeService;
@CrossOrigin(origins = "*")
@PostMapping("/noticeDelete")
public ResponseEntity<ResultMessage> deleteSave
(@valid @RequestBody AdminNoticeDto adminNoticeDto, BindingResult bindingResult)
throws Exception
{
ResultMessage result = new ResultMessage();
String message = "";
long id = adminNoticeDto.getId();
int resultCount = noticeService.deleteAdminNotice(id);
if(resultCount > 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);
}
}
AdminNoticeServiceimpl
@Service
public interface AdminNoticeServiceimpl{
public int deleteAdminNotice(long id) throws Esception;
}
AdminNoticeService
@Service
public class AdminNoticeService implements AdminNoticeServiceImpl{
@Autowired
private AdminNoticeRepository adminNotice;
public int deleteAdminNotice(long id) throws Esception {
return adminNotice.updateAdminNoticeUseYn(id);
}
}
AdminNoticeRepository
@Service
public class AdminNoticeRepository extends CrudRepository<AdminNoticeEntity, Long> {
@Transactional
@Modifying
@Query(update AdminNoticeEntity o set o.useYn = 'N', o.uptdtm = current_timestamp where o.id = :id")
int updateAdminNoticeUseYn(long id);
}