• SpringDataJpa实体类常用注解


    最近公司在使用SpringDataJpa时,需要创建实体类,通过实体类来创建数据库表结构,生成数据库表。

    下面我们就来看下在创建实体类时一些常用的注解吧!!!

    1.实体类常用注解

    @Entity

    标识这个实体类是一个JPA实体,告诉JPA在程序运行的时候记得生成这个实体类所对应的表

    @Table(name = "自定义的表名")

    自定义设置这个实体类在数据库所对应的表名,默认是实体类名。注:Mysql关键字不要设置为实体类,会发生创建表不成功的问题。例如:leave

    @org.hibernate.annotations.Table(appliesTo = "t_holiday_info", comment = "节假日信息表")

    定义表的注释,用来了解表的内容

    @Id

    把这个类里面所在的变量设置为主键Id

    @GeneratedValue

    设置主键的生成策略,这种方式依赖于具体的数据库,如果数据库不支持自增主键,那么这个类型是没法用的

    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "repair_seq"):表示主键生成策略是sequence(可以为Auto、IDENTITY、native等,Auto表示可在多个数据库间切换),指定sequence的名字是repair_seq。

    例如:

    @Basic

    表示一个简单的属性到数据库表的字段的映射,对于没有任何标注的getXxxx()方法,默认 即为 @Basic fetch: 表示该属性的读取策略,有EAGER和LAZY两种,分别表示主支抓取和延迟加载,默认为EAGER.

    @Column

    @Column表示列的说明,如果字段名与列名相同,则可以省略。@Column注解属性详细说明

    (1)name属性:被标注字段在数据库表中所对应字段的名称;
    (2)length属性:表示该字段的长度,当字段的类型为varchar时,该属性才有效果,默认为255个字符;
    (3)nullable属性:表示该字段是否可以为null值,默认是true。
    (4)unique属性:表示该字段是否为唯一标识,默认fasle。
    (5)precision和scale属性:precision属性和scale属性表示精度,当字段类型为double时,precision表示数值的总长度,scale表示小数点所占的位数。

    @Transient

    表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性. 如果一个属性并非数据库表的字段映射,就务必将其标示为 @Transient ,否则,ORM框架默认其注 解为 @Basic

    @Temporal

    @Temporal注解表示格式化时间日期。有三种,默认是@Temporal(TemporalType.TIMESTAMP)。具体如下:
    (1)@Temporal(TemporalType.DATE):日期,页面取得结果格式如:2016-08-05
    (2)@Temporal(TemporalType.TIME):时间,页面取得结果是: 13:46:25
    (3)@Temporal(TemporalType.TIMESTAMP):时间和日期,页面取得结果是:2016-08-05 13:46:25

    注解方式有两种: 

    写在字段上:

        @Temporal(TemporalType.TIMESTAMP)
        private Date birthday;

    写在 getXxx方法上:

        @Temporal(TemporalType.DATE)
        @Column(name = "birthday", length = 10)
        public Date getBirthday() {
            return this.birthday;
        }

    @Enumerated("需要定义存入数据库的类型”)

    使用@Enumerated映射枚举字段,我这里为性别建立了性别的枚举类型,而后面跟上的是存入数据库以String类型存入。

    实体类示例(Customer):

     

     

     @DateTimeFormat

    因为传入的参数是 String 类型的,而用来接收参数的 DateVo 的 date 属性是 java.util.Date 类型的,类型无法转换

    可以使用 Spring 的 @DateTimeFormat 注解格式化参数

    假如注解为:

    @DateTimeFormat(pattern="yyyy/MM/dd HH:mm:ss")

    则传入的参数应该是这样的:

    2018/08/02 22:05:55

    否则会抛出异常。

    @JsonFormat

     1.使用maven引入@JsonFormat所需要的jar包,我贴一下我这里的pom文件的依赖

    <!--JsonFormat-->
      
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
                <version>2.8.8</version>
            </dependency>
      
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.8.8</version>
            </dependency>
      
            <dependency>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>jackson-mapper-asl</artifactId>
                <version>1.9.13</version>
            </dependency>

    2.在你需要查询出来的时间的数据库字段对应的实体类的属性上添加@JsonFormat

    import java.util.Date;
      
    import com.fasterxml.jackson.annotation.JsonFormat;
      
    public class TestClass {
      
        //设置时区为上海时区,时间格式自己据需求定。
        @JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
        private Date testTime;
      
         
        public Date gettestTime() {
            return testTime;
        }
      
        public void settestTime(Date testTimee) {
            this.testTime= testTime;
        }
    }

    这里解释一下:@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")

       pattern:是你需要转换的时间日期的格式

       timezone:是时间设置为东八区,避免时间在转换中有误差

      提示:@JsonFormat注解可以在属性的上方,同样可以在属性对应的get方法上,两种方式没有区别

    3.完成上面两步之后,我们用对应的实体类来接收数据库查询出来的结果时就完成了时间格式的转换,再返回给前端时就是一个符合我们设置的时间格式了

    注解@JsonFormat主要是后台到前台的时间格式的转换

    注解@DataFormAT主要是前后到后台的时间格式的转换

     表的

  • 相关阅读:
    STM32F10x_ADC三通道逐次转换(单次、单通道软件触发)
    STM32F10x_RTC日历
    STM32F4_TIM输入波形捕获(脉冲频率)
    详解 C 语言开发五子棋游戏以及游戏中的重要算法与思路
    平安银行 深度解析梧州模式 或许是国内医药分开最好的模板!
    屏蔽双绞线和非屏蔽双绞线之间的区别
    如何刷新本地的DNS缓存?
    无线网络发射和接收的物理原理!
    wifi基本原理
    大润发创始人黄明端挥泪离场:我战胜了所有对手,却输给了时代!
  • 原文地址:https://www.cnblogs.com/zhukf/p/11813556.html
Copyright © 2020-2023  润新知