@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 的取值共有三个:DATE、TIME和TIMESTAMP
构建的数据库表 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)注解时会报错,使用其它两个注解不会报错