日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

java jpa注解哪个包好,Spring Data JPA 中常用注解详解

發(fā)布時(shí)間:2024/10/5 javascript 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java jpa注解哪个包好,Spring Data JPA 中常用注解详解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、java對象與數(shù)據(jù)庫字段轉(zhuǎn)化

@Entity:標(biāo)識實(shí)體類是JPA實(shí)體,告訴JPA在程序運(yùn)行時(shí)生成實(shí)體類對應(yīng)表

@Table:設(shè)置實(shí)體類在數(shù)據(jù)庫所對應(yīng)的表名

@Id:標(biāo)識類里所在變量為主鍵

@GeneratedValue:設(shè)置主鍵生成策略,此方式依賴于具體的數(shù)據(jù)庫

@Entity

@Table(name = "login_log")

public class LoginLogDO{

@Id

@GeneratedValue(strategy = GenerationType.AUTO)

private Long id;

private String remoteAddr;

private String username;

private String mobile;

...

@Column:表示屬性所對應(yīng)字段名進(jìn)行個(gè)性化設(shè)置

@Column注解一共有10個(gè)屬性,這10個(gè)屬性均為可選屬性,各屬性含義分別如下:

name

name屬性定義了被標(biāo)注字段在數(shù)據(jù)庫表中所對應(yīng)字段的名稱;

unique

unique屬性表示該字段是否為唯一標(biāo)識,默認(rèn)為false。如果表中有一個(gè)字段需要唯一標(biāo)識,則既可以使用該標(biāo)記,也可以使用@Table標(biāo)記中的@UniqueConstraint。

nullable

nullable屬性表示該字段是否可以為null值,默認(rèn)為true。

insertable

insertable屬性表示在使用“INSERT”腳本插入數(shù)據(jù)時(shí),是否需要插入該字段的值。

updatable

updatable屬性表示在使用“UPDATE”腳本插入數(shù)據(jù)時(shí),是否需要更新該字段的值。insertable和updatable屬性一般多用于只讀的屬性,例如主鍵和外鍵等。這些字段的值通常是自動生成的。

columnDefinition

columnDefinition屬性表示創(chuàng)建表時(shí),該字段創(chuàng)建的SQL語句,一般用于通過Entity生成表定義時(shí)使用。(也就是說,如果DB中表已經(jīng)建好,該屬性沒有必要使用。)

table

table屬性定義了包含當(dāng)前字段的表名。

length

length屬性表示字段的長度,當(dāng)字段的類型為varchar時(shí),該屬性才有效,默認(rèn)為255個(gè)字符。

precision和scale

precision屬性和scale屬性表示精度,當(dāng)字段類型為double時(shí),precision表示數(shù)值的總長度,scale表示小數(shù)點(diǎn)所占的位數(shù)。

@Temporal:

當(dāng)我們使用到j(luò)ava.util包中的時(shí)間日期類型,則可以使用此注釋轉(zhuǎn)化成java.util包中的類型。

注入數(shù)據(jù)庫的類型有三種:

TemporalType.DATE(2008-08-08)

TemporalType.TIME(20:00:00)

TemporalType.TIMESTAMP(2008-08-08 20:00:00.000000001)

@Enumerated:

使用此注解映射枚舉字段,以String類型存入數(shù)據(jù)庫

注入數(shù)據(jù)庫的類型有兩種:EnumType.ORDINAL(Interger)、EnumType.STRING(String)

@Embedded、@Embeddable:

當(dāng)一個(gè)實(shí)體類要在多個(gè)不同的實(shí)體類中進(jìn)行使用,而其不需要生成數(shù)據(jù)庫表

@Embeddable:注解在類上,表示此類是可以被其他類嵌套

@Embedded:注解在屬性上,表示嵌套被@Embeddable注解的同類型類

@ElementCollection:集合映射

@CreatedDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy:

表示字段為創(chuàng)建時(shí)間字段(insert自動設(shè)置)、創(chuàng)建用戶字段(insert自動設(shè)置)、最后修改時(shí)間字段(update自定設(shè)置)、最后修改用戶字段(update自定設(shè)置)

例如:

在新建用戶的時(shí)候,不用管用戶創(chuàng)建的時(shí)間和用戶屬性修改的時(shí)間,@CreateDate和@LastModifiedDate注解會自動幫你添加上時(shí)間。

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

@CreatedDate

@Column(updatable = false, nullable = false)

protected LocalDateTime gmtCreate;

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

@LastModifiedDate

protected LocalDateTime gmtModified;

這四個(gè)注解的使用需要在啟動類上加上@EnableJpaAuditing注解

@SpringBootApplication

@EnableSwagger2//啟動swagger2

@EnableJpaAuditing//啟動@CreatedDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy注解

@EntityScan(basePackages = {"com.bbd.finance.model.domain"})

@EnableJpaRepositories(basePackages = {"com.bbd.finance.model.dao"})

public class App {

private static final Logger log= LoggerFactory.getLogger(App.class);

public static void main(String[] args){

SpringApplication.run(App.class);

}

}

@MappedSuperclass:

實(shí)現(xiàn)將實(shí)體類的多個(gè)屬性分別封裝到不同的非實(shí)體類中

注解的類將不是完整的實(shí)體類,不會映射到數(shù)據(jù)庫表,但其屬性將映射到子類的數(shù)據(jù)庫字段

注解的類不能再標(biāo)注@Entity或@Table注解,也無需實(shí)現(xiàn)序列化接口

注解的類繼承另一個(gè)實(shí)體類?或 標(biāo)注@MappedSuperclass類,他可使用@AttributeOverride 或 @AttributeOverrides注解重定義其父類屬性映射到數(shù)據(jù)庫表中字段。

例如:

@MappedSuperclass

@EntityListeners(AuditingEntityListener.class)

public abstract class BaseDO{

@Id

@GeneratedValue(strategy = GenerationType.AUTO)

protected Long id;

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

@CreatedDate

@Column(updatable = false, nullable = false)

protected LocalDateTime gmtCreate;

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

@LastModifiedDate

protected LocalDateTime gmtModified;

//此處省略get、set方法

}

登陸日志類繼承BaseDo類(用戶類也繼承該類,這樣就減少了代碼的冗余)

@Entity

@Table(name = "login_log")

public class LoginLogDo extends BaseDO {

private String remoteAddr;

private String username;

private String employeeNo;

private boolean status;

private String reason;

//此處省略get、set方法

}

一對一關(guān)聯(lián)

@OneToOne、@JoinColumn

//企業(yè)ID

private Long companyId;

@OneToOne

@JoinColumn(name = "companyId", referencedColumnName = "id",insertable = false,updatable = false, foreignKey = @ForeignKey(name = "none", value = ConstraintMode.NO_CONSTRAINT))

private CompanyInfoDO companyInfoDO;

java對象與json轉(zhuǎn)化(spring注解)

1.@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8"):將Date屬性轉(zhuǎn)換為String類型,?timezone解決(相差8小時(shí))

2.@JsonSerialize:作用在類或字段上,轉(zhuǎn)化java對象到j(luò)son格式(需自定義轉(zhuǎn)化類繼承JsonSerializer)

class?DateSerializer extends?JsonSerializer{

@Override

public?void?serialize(Date value, JsonGenerator jgen, SerializerProvider provider)

throws?IOException {

SimpleDateFormat formatter = new?SimpleDateFormat(BankAccount.DATE_PATTERN);

jgen.writeString(formatter.format(value));

}

}

3.@JsonDeserialize:作用在類或字段上,轉(zhuǎn)化json格式到j(luò)ava對象(需自定義轉(zhuǎn)化類繼承JsonDeserializer)

class?DateDeSerializer extends?JsonDeserializer{

@Override

public?Date deserialize(JsonParser jp, DeserializationContext ctxt) throws?IOException {

Date date;

try?{

date = DateUtils.parseDate(jp.getText(), BankAccount.DATE_PATTERN);

} catch?(Exception e) {

return?null;

}

return?date;

}

}

4.@JsonProperty:作用在屬性上,把屬性名稱序列化為另一個(gè)名稱(trueName屬性序列化為name)

5.@JsonIgnoreProperties(ignoreUnknown =?true):作用在類上,json序列化時(shí)將Java bean中的一些屬性忽略掉,可選擇多個(gè)字段@JsonIgnoreProperties({“name”},{“age”});json轉(zhuǎn)javabean時(shí)忽略javabean中沒有的字段(如果json中字段javabean中沒有會拋出異常UnrecognizedPropertyException,此時(shí)可使用該注解)

6.@JsonIgnore:在json序列化時(shí)將java bean中的一些屬性忽略掉,序列化和反序列化都受影響

將時(shí)間進(jìn)行時(shí)間格式的轉(zhuǎn)換

@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8") ????出參格式轉(zhuǎn)換

@DateTimeFormat(pattern = "yyyy-MM-dd") ????入?yún)⒏袷睫D(zhuǎn)換

private Date testTime;

與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的java jpa注解哪个包好,Spring Data JPA 中常用注解详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。