Spring의 LocalTime을 MySQL의 Time으로 INSERT하고 싶다 (milliseconds도)
11626 단어 자바spring-bootspring
개요
String 형으로 취득한
11:12:13.14
(시간:분:초.밀리초)를MySQL에 INSERT하여
와 밀리초까지 표시시키는 방법에 대해입니다. (날짜 정보 필요 없음)
그런 보통으로 구현하면 할 수 있을 것 같지 않아?
라고 생각하지 않습니까?
간단하게 보이고 귀찮은 처리를 끼지 않으면 잘 되지 않았습니다. . .
더 스마트한 방법을 아시는 분이 있으면 가르쳐 주시면 매우 기쁩니다! !
버전
Spring
build.gradle
id 'org.springframework.boot' version '2.2.2.BUILD-SNAPSHOT'
sourceCompatibility = '1.8'
runtimeOnly('mysql:mysql-connector-java')
implementation 'org.springframework.boot:spring-boot-starter'
implementation('org.springframework.boot:spring-boot-starter-web')
implementation('org.springframework.boot:spring-boot-starter-data-jpa')
데이터베이스
MySQL 8.0
스텝 그 1 테이블 작성
소수점 3자리까지 대응
MySQL :: MySQL 5.6 참조 설명서 :: 11.1.2 날짜 및 시간 유형 개요
create table timesample(
...
start_time TIME(3)
);
스텝 그 2 AttributeConverter의 작성
JPA 가 엔티티의 필드의 형태로서 java.time.LocalDate, java.time.LocalTime, java.time.LocalDateTime 는 대응하고 있지 않기 때문에, 다음과 같은 AttributeConverter 를 작성할 필요가 있습니다.
package app.entities.converter;
import java.time.LocalTime;
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
@Converter(autoApply = true)
public class LocalTimeConverter implements AttributeConverter<LocalTime, java.sql.Time> {
@Override
public java.sql.Time convertToDatabaseColumn(LocalTime time) {
return time == null ? null : java.sql.Time.valueOf(time);
}
@Override
public LocalTime convertToEntityAttribute(java.sql.Time value) {
return value == null ? null : value.toLocalTime();
}
}
Entity
@Column(name = "start_time")
private LocalTime startTime;
entity.setStartTime(LocalTime.of(11, 12, 13, 14*10000000));
repository.save(entity);
밀리 초가 들어 있지 않습니다!
스텝 그 3 밀리 세컨드를 보유해 java.sql.Time 로 변환한다
방금 만든 LocalTimeConverter의 convertToDatabaseColumn 메서드 변경
spring-밀리초 java.time.LocalTime을 밀리초 java.sql.Time에 매핑하는 방법
LocalTimeConverter
package app.entities.converter;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalTime;
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
@Converter(autoApply = true)
public class LocalTimeConverter implements AttributeConverter<LocalTime, java.sql.Time> {
@Override
public java.sql.Time convertToDatabaseColumn(LocalTime time) {
if(time == null) return null;
// この日付はコンバートで捨てられるので何でもOK
long epochMilli = time.atDate(LocalDate.of(2019, 1, 1)).atZone(java.time.ZoneId.systemDefault())
.toInstant().toEpochMilli();
java.sql.Time sqlTime = new java.sql.Time(epochMilli);
return sqlTime;
}
@Override
public LocalTime convertToEntityAttribute(java.sql.Time value) {
if (value == null) return null;
String localTimeStr = new SimpleDateFormat("HH:mm:ss.SSS").format(value);
LocalTime localTime = LocalTime.parse(localTimeStr);
return localTime;
}
}
Reference
이 문제에 관하여(Spring의 LocalTime을 MySQL의 Time으로 INSERT하고 싶다 (milliseconds도)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/zakki/items/56a19ab4a040b5483d4d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)