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);
}