Spring Data Jpa的@Temporal注解

 @Temporal注解存在于Spring Data Jpa依赖中

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <version>2.1.3.RELEASE</version>
</dependency>
package javax.persistence;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Temporal {
    TemporalType value();
}
package javax.persistence;

public enum TemporalType {
    DATE,
    TIME,
    TIMESTAMP;

    private TemporalType() {
    }
}

 @Temporal注解使用时 TemporalType 的取值共有三个:DATETIMETIMESTAMP

构建的数据库表 tb_user 的结构如下:

CREATE TABLE `tb_user` (
  `id` INT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `name` VARCHAR(32) NOT NULL COMMENT '姓名',
  `age` INT NOT NULL COMMENT '年龄',
  `create_time` DATETIME NOT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)
) COMMENT = '用户表';

tb_user 表中的数据记录如下: 

insert into `tb_user` (`id`, `name`, `age`, `create_time`) values('1','张三','18','2021-11-09');

 第一种:@Temporal(TemporalType.DATE)

  假设当前实体类中存在字段createTime,在此字段上添加@Temporal(TemporalType.Date)注解,如果数据库中存储的是'yyyy-MM-dd hh:MM:ss'这种格式,即MySQL数据库该字段的类型为datetime

import javax.persistence.*;
import lombok.Data;
import java.util.Date;

@Data
@Entity
@Table ( name ="tb_user" )
public class TbUser{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;

    @Column(name = "name")
    private String name;

    @Column(name = "age")
    private Integer age;

    @Column(name = "create_time")
    @Temporal(TemporalType.DATE)
    private Date createTime;
}

构建的测试类为:

import com.bc.single.dao.UserDao;
import com.bc.single.entity.TbUser;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@Slf4j
@SpringBootTest
class SingleApplicationTests {

    @Autowired
    private UserDao userDao;

    @Test
    void contextLoads(){
        List<TbUser> list= userDao.findAll();
        System.out.println(list);
    }
}

输出结果:

[TbUser(id=1, name=张三, age=18, createTime=2021-11-09)]

第二种:@Temporal(TemporalType.TIME)

将createTime字段上的注解修改为@Temporal(TemporalType.TIME)注解

import javax.persistence.*;
import lombok.Data;
import java.util.Date;

@Data
@Entity
@Table ( name ="tb_user" )
public class TbUser{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;

    @Column(name = "name")
    private String name;

    @Column(name = "age")
    private Integer age;

    @Column(name = "create_time")
    @Temporal(TemporalType.TIME)
    private Date createTime;
}

执行上述测试类,其输出结果:

[TbUser(id=1, name=张三, age=18, createTime=17:07:08)]

第三种:@Temporal(TemporalType.TIMESTAMP)

将createTime字段上的注解修改为@Temporal(TemporalType.TIMESTAMP)注解

import javax.persistence.*;
import lombok.Data;
import java.util.Date;

@Data
@Entity
@Table ( name ="tb_user" )
public class TbUser{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;

    @Column(name = "name")
    private String name;

    @Column(name = "age")
    private Integer age;

    @Column(name = "create_time")
    @Temporal(TemporalType.TIMESTAMP)
    private Date createTime;
}

执行上述测试类,其输出结果:

[TbUser(id=1, name=张三, age=18, createTime=2021-11-09 17:07:08.0)]

特别提示:如果MySQL数据库该字段的类型为date,则在使用@Temporal(TemporalType.TIME)注解时会报错,使用其它两个注解不会报错

猜你喜欢

转载自blog.csdn.net/y_bccl27/article/details/118382271