Spring Data JPA01 引入与 实体类注解

Spring Data JPA - Reference Documentation

1. 引入配置

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://12.8.14.189:3306/study?useUnicode=true&characterEncoding=utf8
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    database: mysql
    database-platform: org.hibernate.dialect.MySQL8Dialect
    hibernate:
      # 禁用 hibernate 的表结构自动更新
      ddl-auto: none
    properties:
      hibernate:
        connection:
          provider_disables_autocommit: true
        generate_statistics: false
        id:
          new_generator_mappings: true
        jdbc:
          batch_size: 25
        order_inserts: true
        order_updates: true
        query:
          fail_on_pagination_over_collection_fetch: true
          in_clause_parameter_padding: true
    show-sql: true

2. 实体类注解 

@Entity

@Table(name="cst_customer")

主键

UUID

IDENTITY

@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Column(name="cust_id")
private Long custId;

 AUTO

TABLE

使用一个特定的数据库表格来保存主键

@Id  
@GeneratedValue(strategy = GenerationType.TABLE, generator="payablemoney_gen")  
@TableGenerator(name = "pk_gen",  
                table="tb_generator",  
                pkColumnName="gen_name",  
                valueColumnName="gen_value",  
                pkColumnValue="PAYABLEMOENY_PK",  
                allocationSize=1  
               ) 
private Long custId;


//@TableGenerator的定义:
@Target({TYPE, METHOD, FIELD})   
@Retention(RUNTIME)  
public @interface TableGenerator {  
  //表示该表主键生成策略的名称,它被引用在@GeneratedValue中设置的“generator”值中
  String name();  
  //表示表生成策略所持久化的表名,例如,这里表使用的是数据库中的“tb_generator”。
  String table() default "";  
  //catalog和schema具体指定表所在的目录名或是数据库名
  String catalog() default "";  
  String schema() default "";  
  //属性的值表示在持久化表中,该主键生成策略所对应键值的名称。例如在“tb_generator”中将“gen_name”作为主键的键值
  String pkColumnName() default "";  
  //属性的值表示在持久化表中,该主键当前所生成的值,它的值将会随着每次创建累加。例如,在“tb_generator”中将“gen_value”作为主键的值 
  String valueColumnName() default "";  
  //属性的值表示在持久化表中,该生成策略所对应的主键。例如在“tb_generator”表中,将“gen_name”的值为“CUSTOMER_PK”。 
  String pkColumnValue() default "";  
  //表示主键初识值,默认为0。 
  int initialValue() default 0;  
  //表示每次主键值增加的大小,例如设置成1,则表示每次创建新记录后自动加1,默认为50。
  int allocationSize() default 50;  
  UniqueConstraint[] uniqueConstraints() default {};  
} 

//这里应用表tb_generator,定义为 :
CREATE TABLE  tb_generator (  
  id NUMBER NOT NULL,  
  gen_name VARCHAR2(255) NOT NULL,  
gen_value NUMBER NOT NULL,  
PRIMARY KEY(id)  
)

@SQLDelete

当执行删除语句的时候

@SQLDelete(sql = "Update Cluster set IsDeleted = 1, DeletedAt = ROUND(UNIX_TIMESTAMP(NOW(4))*1000) where Id = ?")

public class Cluster extends BaseEntity implements Comparable<Cluster> {}

 @Where

当执行查询

@Where(clause = "isDeleted = 0")

public class Cluster extends BaseEntity implements Comparable<Cluster> {}

@Temporal

日期类型映射

@Temporal(TemporalType.DATE)

private Date date;

从 Java 8 开始,引入了新的日期和时间 API (java.time.*),它比旧的 java.util.Date 更加现代和强大。因此,如果你正在开发新项目,建议使用 LocalDate, LocalTime, LocalDateTime, ZonedDateTime 等类,而 JPA 也支持直接映射这些类到数据库中的日期和时间字段,无需使用 @Temporal 注解。

Transient

定不参与映射

@Basic @Lob

@Lob @Basic(fetch=FetchType.LAZY)

@Column(name="blobtest")

private String blobtest;

 Column

  1. name
  2. unique
  3. nullable
  4. int length() default 255;
  5. insertable
  6. updatable
  7. table
  8. String columnDefinition() default "";

@Column(name="cust_name",columnDefinition = "varchar(32) NOT NULL")

numeric

@Column(precision = 5, scale = 2)

private double assets;

`assets` double(5,2) DEFAULT NULL,

  • 14
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值