在Spring Data JPA 使用LocalDate映射MySQL的DATE类型

本文介绍如何在MySQL中使用Java8的LocalDate类型。通过实体类映射,结合Hibernate框架,实现LocalDate类型的正确存储。为了成功使用Java8的日期类型,需要引入hibernate-java8依赖。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySQL 类型:

`date_begin` DATE NOT NULL COMMENT '开始日期'

实体类:

@Entity
@Table(name = "tb_plan")
public class Plan {
    @Column(name = "date_begin")
    private LocalDate dateBegin;

    @Column(name = "date_end")
    private LocalDate dateEnd;

   // omit setter and getter 
}

参考博客:JDBC中使用Java8的日期LocalDate、LocalDateTime 但还是不能插入LocalDate类型。

看了persist java LocalDate in MySQL,还需要引入一个依赖才可以:

 <dependency>
     <groupId>org.hibernate</groupId>
     <artifactId>hibernate-java8</artifactId>
     <version>5.0.12.Final</version>
 </dependency>

Spring Data JPA底层还是Hibernate,要使用Java8的LocalDate得引入hibernate-java8依赖。

更多参考:JPA(Hibernate)中使用Java8的日期LocalDate、LocalDateTime

ok L !

### 数据库日期类型映射到Java实体类中的LocalDate类型 在现代的Java开发中,通常使用JPA(Java Persistence API)或Hibernate等框架来处理数据库与Java对象之间的映射。为了将数据库中的`DATE`类型映射为Java中的`LocalDate`类型,可以通过以下方式实现[^1]。 #### 1. 使用JPA注解进行字段映射 在实体类中定义一个字段,并使用`@Column`注解指定其数据类型。由于`LocalDate`是Java 8引入的时间API的一部分,JPA从2.2版本开始直接支持`LocalDate`类型[^2]。以下是一个示例: ```java import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import java.time.LocalDate; @Entity public class ExampleEntity { @Id private Long id; @Column(nullable = false) private LocalDate dateField; // Getter and Setter public Long getId() { return id; } public void setId(Long id) { this.id = id; } public LocalDate getDateField() { return dateField; } public void setDateField(LocalDate dateField) { this.dateField = dateField; } } ``` #### 2. 配置数据库驱动支持 确保使用的数据库驱动程序支持`LocalDate`类型。例如,对于MySQL数据库,需要确保使用的是较新的MySQL Connector/J版本(如8.x),该版本支持Java 8的时间API[^3]。 #### 3. 处理不支持的JPA版本 如果使用JPA版本低于2.2,则可以使用自定义转换器来实现映射。通过`@Converter`注解定义一个转换器,将`LocalDate`与数据库中的`DATE`类型进行转换[^4]。 ```java import javax.persistence.AttributeConverter; import javax.persistence.Converter; import java.sql.Date; import java.time.LocalDate; @Converter(autoApply = true) public class LocalDateConverter implements AttributeConverter<LocalDate, Date> { @Override public Date convertToDatabaseColumn(LocalDate locDate) { return (locDate == null ? null : Date.valueOf(locDate)); } @Override public LocalDate convertToEntityAttribute(Date sqlDate) { return (sqlDate == null ? null : sqlDate.toLocalDate()); } } ``` 在实体类中无需额外配置,上述转换器会自动应用于所有`LocalDate`类型的字段。 #### 4. 注意事项 - 确保数据库表中的字段类型为`DATE`,而不是`DATETIME`或`TIMESTAMP`,以避免时间部分的干扰[^5]。 - 如果使用Spring Data JPA,确保项目中已添加对Java 8时间API的支持依赖项(如`spring-boot-starter-data-jpa`)。 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值