You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Spring Data JPA如何实现仅持久化时间和星期几数据?

实现方案

1. 数据库层设计

MySQL端直接使用原生字段类型匹配需求,不需要额外做格式转换:

  • startTime 字段选用TIME类型,原生支持HH:mm:ss格式的时间存储,无冗余日期数据
  • startDay 字段可选VARCHAR(10)或枚举类型ENUM('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'),使用枚举可额外增加数据合法性校验

建表参考SQL:

CREATE TABLE your_business_table (
    -- 主键及其他业务字段省略
    startTime TIME NOT NULL COMMENT '时间(格式HH:mm:ss)',
    startDay ENUM('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday') NOT NULL COMMENT '星期几'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

2. JPA实体类映射配置

依托Java 8的java.time时间API和JPA的转换能力,无需自定义复杂处理逻辑即可实现映射:

基础映射(直接用字符串存星期)

import javax.persistence.*;
import java.time.LocalTime;

@Entity
@Table(name = "your_business_table")
public class BusinessEntity {
    // 主键及其他字段、getter/setter省略

    // LocalTime默认会自动映射到MySQL的TIME类型,持久化后就是HH:mm:ss格式
    private LocalTime startTime;

    // 直接用String接收存储星期字符串即可
    private String startDay;
}

规范映射(用枚举存星期避免非法值)

如果希望在代码层面避免传入非法的星期值,可使用java.time.DayOfWeek枚举,配合自定义JPA转换器实现自动映射:
首先定义转换器:

import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
import java.time.DayOfWeek;

@Converter(autoApply = false)
public class DayOfWeekConverter implements AttributeConverter<DayOfWeek, String> {
    @Override
    public String convertToDatabaseColumn(DayOfWeek dayOfWeek) {
        if (dayOfWeek == null) return null;
        // 转换为首字母大写的英文全称,如MONDAY -> Monday
        return dayOfWeek.name().charAt(0) + dayOfWeek.name().substring(1).toLowerCase();
    }

    @Override
    public DayOfWeek convertToEntityAttribute(String dbValue) {
        if (dbValue == null || dbValue.isBlank()) return null;
        return DayOfWeek.valueOf(dbValue.toUpperCase());
    }
}

然后在实体类中引用转换器:

import javax.persistence.*;
import java.time.LocalTime;
import java.time.DayOfWeek;

@Entity
@Table(name = "your_business_table")
public class BusinessEntity {
    private LocalTime startTime;

    @Convert(converter = DayOfWeekConverter.class)
    private DayOfWeek startDay;
}

3. 接入注意事项

  • 接口层接收前端传入的HH:mm:ss格式字符串时,在对应的字段上添加@DateTimeFormat(pattern = "HH:mm:ss")即可自动转换为LocalTime类型
  • Spring Boot 2.x及以上版本默认已集成java.time类型的JPA映射和JSON序列化能力,无需额外引入依赖

内容的提问来源于stack exchange,提问作者Cork Kochi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 10:54:04