JPA之映射mysql text類型的問題
JPA之映射mysql text類型
問題背景
jpa如果直接映射mysql的text/longtext/tinytext類型到String字段會報(bào)錯。需要設(shè)置一下@Lob和@Column。
@Lob代表是長字段類型,默認(rèn)的話,是longtext類型,所以需要下面這個屬性來指定對應(yīng)的類型。
columnDefinition="text"里面的類型可以隨意改,后面mysql可能會有新的類型,只要是對應(yīng)java的String類型,就可以在這里動態(tài)配置。
解決方案
@Data
@Entity
@Table(name="question")
public class Question {
@Id
@GeneratedValue
public int questionId;
//....省略其他字段
@Lob
@Column(columnDefinition="text")
public String explainStr;
public Date createTime;
}
JPA各種類型映射處理
1.日期格式類型字段的映射,利用@Temporal(TemporalType.Date)進(jìn)行注解;例如:
private Date birthday;
@Temporal(TemporalType.DATE)
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
2.枚舉類型的映射,利用@Enumerated,其參數(shù)EnumType表示指定存放在數(shù)據(jù)表中的形式,整型還是String;
首先創(chuàng)建一個枚舉:
public enum Gender
{
Male,Female
}
在實(shí)體類中調(diào)用:
private Gender gender = Gender.Male; // 為枚舉設(shè)置默認(rèn)值
@Enumerated(EnumType.STRING)
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
3.大文本數(shù)據(jù)類型的映射,例如:網(wǎng)絡(luò)日志,字符串類型的長度顯然不夠,利用@Lob注解,該注解用在字符串類型之上在數(shù)據(jù)庫生成LongText類型的數(shù)據(jù);例如:
private String diary;
@Lob
public String getDiary() {
return diary;
}
public void setDiary(String diary) {
this.diary = diary;
}
4.@Lob注解用在Byte[]數(shù)組類型,例如:保存一個文件可以用此類型,用在這個上面在數(shù)據(jù)庫中可以生成LongBolb數(shù)據(jù)類型;例如:
private Byte[] file;
@Lob
public Byte[] getFile() {
return file;
}
public void setFile(Byte[] file) {
this.file = file;
}
5.如果在實(shí)體類中不需要該字段與數(shù)據(jù)庫中的表進(jìn)行映射,但是默認(rèn)的情況下是將實(shí)體類的全部字段映射成數(shù)據(jù)表的列,那該怎樣做呢?利用@Transient注解,例如:
private String other;
@Transient
public String getOther() {
return other;
}
public void setOther(String other) {
this.other = other;
}
6.如果一個實(shí)體類中包含一個大數(shù)據(jù)類型的字段,如Byte[]類型,當(dāng)我們查詢該實(shí)體類時不得不查詢出該數(shù)據(jù)類型的字段,如果我們在查詢時只用到一個其它字段的數(shù)據(jù),但是默認(rèn)情況下是查詢?nèi)康?,那該怎樣避免查詢該大?shù)據(jù)類型的數(shù)據(jù)呢?利用@Basic注解進(jìn)行標(biāo)注,將fetch屬性值設(shè)置為Lazy即可,這樣只有在我們調(diào)用該屬性的get方法時才會進(jìn)行加載;
private Byte[] file;
@Lob @Basic(fetch=FetchType.LAZY)
public Byte[] getFile() {
return file;
}
public void setFile(Byte[] file) {
this.file = file;
}
7.@Column 該注解表示數(shù)據(jù)表的映射列,放在屬性的getter方法上:
.length:該屬性表示該映射列的長度;.nullable:該屬性表示該列是否可為空,true表示可為空,false表示不可為空;.name:該屬性表示為該列起別名,不讓實(shí)體類的屬性名與數(shù)據(jù)庫的列名相同;
8.@Table 該注解表示映射的表;放在該實(shí)體類之上:
.name:該屬性表示為表起別名,讓實(shí)體類與數(shù)據(jù)表名不相同;
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
- Springboot2.0配置JPA多數(shù)據(jù)源連接兩個mysql數(shù)據(jù)庫方式
- Spring boot基于JPA訪問MySQL數(shù)據(jù)庫的實(shí)現(xiàn)
- 解決springboot的JPA在Mysql8新增記錄失敗的問題
- Spring Data Jpa Mysql使用utf8mb4編碼的示例代碼
- springboot使用spring-data-jpa操作MySQL數(shù)據(jù)庫
- Spring-Data-JPA整合MySQL和配置的方法
- SpringBoot連接MYSQL數(shù)據(jù)庫并使用JPA進(jìn)行操作
- Spring Boot 添加MySQL數(shù)據(jù)庫及JPA實(shí)例
- 在JPA項(xiàng)目啟動時如何新增MySQL字段
相關(guān)文章
Spring Boot 2 整合 QuartJob 實(shí)現(xiàn)定時器實(shí)時管理功能
Quartz是一個完全由java編寫的開源作業(yè)調(diào)度框架,形式簡易,功能強(qiáng)大。接下來通過本文給大家分享Spring Boot 2 整合 QuartJob 實(shí)現(xiàn)定時器實(shí)時管理功能,感興趣的朋友一起看看吧2019-11-11
Springboot中的Validation參數(shù)校驗(yàn)詳解
這篇文章主要介紹了Springboot中的Validation參數(shù)校驗(yàn)詳解,Springboot參數(shù)校驗(yàn)是一種常用的驗(yàn)證機(jī)制,在傳遞參數(shù)時進(jìn)行校驗(yàn),以確保參數(shù)的有效性和正確性,該機(jī)制可以幫助開發(fā)者在代碼實(shí)現(xiàn)前就避免一些常見的錯誤,需要的朋友可以參考下2023-10-10
java實(shí)現(xiàn)大文件導(dǎo)出的實(shí)現(xiàn)與優(yōu)化
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)大文件導(dǎo)出的實(shí)現(xiàn)與優(yōu)化的相關(guān)資料,文中的示例代碼講解詳細(xì),對我們深入了解java有一定的幫助,感興趣的小伙伴可以了解下2023-11-11
JAVA實(shí)現(xiàn)網(wǎng)絡(luò)/本地圖片轉(zhuǎn)BASE64存儲代碼示例
這篇文章主要給大家介紹了關(guān)于JAVA實(shí)現(xiàn)網(wǎng)絡(luò)/本地圖片轉(zhuǎn)BASE64存儲的相關(guān)資料,Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)碼的編碼方式之一,Base64就是一種基于64個可打印字符來表示二進(jìn)制數(shù)據(jù)的方法,需要的朋友可以參考下2023-07-07
Spring Boot整合Web項(xiàng)目常用功能詳解
這篇文章主要介紹了Spring Boot整合Web項(xiàng)目常用功能詳解,在Web應(yīng)用開發(fā)過程中,可以通過Spring Boot的Starter來將這些常用功能進(jìn)行整合與集中維護(hù),以達(dá)到開箱即用的目的。,需要的朋友可以參考下2019-06-06
Java Web Filter 過濾器學(xué)習(xí)教程(推薦)
Filter也稱之為過濾器,它是Servlet技術(shù)中最激動人心的技術(shù).這篇文章主要介紹了Java Web Filter 過濾器學(xué)習(xí)教程的相關(guān)資料,需要的朋友可以參考下2016-05-05

