11: 12: 13.14``` (heures: minutes: secondes.millisecondes) acquis en tant que type chaîne
INSÉRER dans MySQL
Et comment afficher jusqu'à la milliseconde. (Aucune information de date requise)
*** N'est-il pas possible de l'implémenter normalement? *** *** Penses-tu
Cela n'a pas fonctionné sans le processus fastidieux qui semblait facile. .. .. Si quelqu'un connaît une manière plus intelligente, je serais très heureux si vous pouviez me le dire! !!
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
Prend en charge jusqu'à 3 chiffres MySQL :: MySQL 5.6 Reference Manual :: 11.1.2 Présentation des types de date et d'heure
create table timesample(
...
start_time TIME(3)
);
JPA ne prend pas en charge java.time.LocalDate, java.time.LocalTime et java.time.LocalDateTime en tant que types de champ de l'entité, vous devez donc créer le AttributeConverter suivant.
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);
Il n'y a pas de milliseconde!
Modifier la méthode convertToDatabaseColumn du LocalTimeConverter créé précédemment [Comment mapper spring-millisecond java.time.LocalTime à millisecond java.sql.Time](https://stackoverflow.com/questions/51182366/how-to-map-java-time-localtime- avec-millisecondes-à-un-temps-sql-java-avec-millisec)
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;
//Cette date sera supprimée par conversion, donc tout est 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;
}
}
Recommended Posts