@TableName注解和@Table的區(qū)別及說(shuō)明
@TableName注解和@Table區(qū)別
最近開(kāi)發(fā)項(xiàng)目的時(shí)候,從一個(gè)項(xiàng)目遷移代碼到另一個(gè)項(xiàng)目,原有項(xiàng)目用的是Hibernate,現(xiàn)有項(xiàng)目用的是mybatis-plus,代碼遷移過(guò)來(lái)后,schema屬性用于指定數(shù)據(jù)庫(kù)實(shí)例名。
但是@Table屬性schema在mybatis-plus框架中失效了,一直找不到對(duì)應(yīng)的實(shí)例名。
前言
@TableName是mybatis-plus中的注解,主要是實(shí)現(xiàn)實(shí)體類(lèi)型和數(shù)據(jù)庫(kù)中的表實(shí)現(xiàn)映射。
注意,不要將@TableName和@Table注解認(rèn)為是一個(gè),雖然功能相同,但是,@TableName是mybatis-plus中的注解,@Table是Hibernate中的注解。
@TableName參數(shù)說(shuō)明
@TableName源碼
public @interface TableName { java.lang.String value() default ""; java.lang.String schema() default ""; boolean keepGlobalPrefix() default false; java.lang.String resultMap() default ""; boolean autoResultMap() default false; }
@TableName使用
@TableName("sys_user") // 該注解主要是現(xiàn)實(shí)實(shí)體類(lèi)型和數(shù)據(jù)庫(kù)中的表實(shí)現(xiàn)映射。 public class SysUser implements Serializable { @TableId(type= IdType.AUTO) private Long id; private String username; //用戶名 private String loginName; //登錄密碼,密碼需要加密 private String password; }
@Table
當(dāng)實(shí)體類(lèi)與其映射的數(shù)據(jù)庫(kù)表名不同名時(shí)需要使用 @Table 標(biāo)注說(shuō)明,該標(biāo)注與 @Entity 標(biāo)注并列使用,置于實(shí)體類(lèi)聲明語(yǔ)句之前,可寫(xiě)于單獨(dú)語(yǔ)句行,也可與聲明語(yǔ)句同行。
@Table 標(biāo)注的常用選項(xiàng)是 name,用于指明數(shù)據(jù)庫(kù)的表名
@Table標(biāo)注還有一個(gè)兩個(gè)選項(xiàng) catalog 和 schema 用于設(shè)置表所屬的數(shù)據(jù)庫(kù)目錄或模式,通常為數(shù)據(jù)庫(kù)名。uniqueConstraints選項(xiàng)用于設(shè)置約束條件,通常不須設(shè)置。
name
屬性
name屬性用于指定數(shù)據(jù)庫(kù)表名稱(chēng)
若不指定則以實(shí)體類(lèi)名稱(chēng)作為表名
catalog
屬性
catalog屬性用于指定數(shù)據(jù)庫(kù)實(shí)例名
當(dāng)catalog屬性不指定時(shí),新創(chuàng)建的表將出現(xiàn)在url指定的數(shù)據(jù)庫(kù)實(shí)例中
當(dāng)catalog屬性設(shè)置名稱(chēng)時(shí),若數(shù)據(jù)庫(kù)存在和指定名稱(chēng)一致的實(shí)例,新創(chuàng)建的表將出現(xiàn)在該實(shí)例中
schema
屬性
作用與catalog屬性作用一致,可自行測(cè)試
uniqueConstraints
屬性
uniqueConstraints屬性用于設(shè)定約束條件
@Table(name="CUSTOMERS",uniqueConstraints={@UniqueConstraint(columnNames={"name"})}) @Entity public class Customer { private Integer id; private String name; private String email; private int age; ...... }
小結(jié)一下
1.當(dāng)實(shí)體類(lèi)名和數(shù)據(jù)庫(kù)表名不一致時(shí),name屬性可以實(shí)現(xiàn)映射,及時(shí)表名一致,也推薦使用,提高程序的可讀性
2.catalog和sechema屬性一般不需要指定
3.uniqueConstraints屬性一般也不需要指定,但是如有需要?jiǎng)t可以指定
Table(name=“xx“)與Entity(name=“xx“) 問(wèn)題
@Entity @Table(name="T_qibie")
這樣寫(xiě)的話在hql里要用實(shí)體的名字 from QibieVo
如果是這樣的話
@Entity(name="T_qibie")
這樣寫(xiě)的話在hql里要用表的名字 from T_qibie
還有有時(shí)候只能用@Entity(name="T_qibie")的話,可能是:JAVAEE6.0中的 javax.persistence.jar與 hibernate中的hibernate-jpa-2.1-api-1.0.0.Final.jar沖突 ,而我采取的措施是刪除了JAVAEE6.0的庫(kù),運(yùn)行就正常了,然后在加進(jìn)來(lái)有正常了 。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Cloud Ribbon負(fù)載均衡器處理方法
這篇文章主要介紹了Spring Cloud Ribbon負(fù)載均衡器處理方法,看看是如何獲取服務(wù)實(shí)例,獲取以后做了哪些處理,處理后又是如何選取服務(wù)實(shí)例的,需要的朋友可以參考下2018-02-02SpringBoot整合Canal與RabbitMQ監(jiān)聽(tīng)數(shù)據(jù)變更記錄
這篇文章主要介紹了SpringBoot整合Canal與RabbitMQ監(jiān)聽(tīng)數(shù)據(jù)變更記錄,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09Springboot+WebSocket+Netty實(shí)現(xiàn)在線聊天/群聊系統(tǒng)
這篇文章主要實(shí)現(xiàn)在好友添加、建群、聊天對(duì)話、群聊功能,使用Java作為后端語(yǔ)言進(jìn)行支持,界面友好,開(kāi)發(fā)簡(jiǎn)單,文章中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下2023-08-08Java 匯編JVM編寫(xiě)jasmin程序的操作方法
這篇文章主要介紹了Java 匯編JVM編寫(xiě)jasmin程序的操作方法,本文通過(guò)幾個(gè)示例講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04SpringBoot 回滾操作的幾種實(shí)現(xiàn)方式
回滾操作是一種常見(jiàn)的操作,用于撤銷(xiāo)之前執(zhí)行的操作,本文主要介紹了SpringBoot回滾操作的幾種實(shí)現(xiàn)方式,包含基于異常類(lèi)型的回滾、基于自定義邏輯的回滾和基于數(shù)據(jù)庫(kù)狀態(tài)的回滾,感興趣的可以了解一下2024-03-03jvm crash的崩潰日志詳細(xì)分析及注意點(diǎn)
本篇文章主要介紹了jvm crash的崩潰日志詳細(xì)分析及注意點(diǎn)。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-04-04springboot集成ES實(shí)現(xiàn)磁盤(pán)文件全文檢索的示例代碼
這篇文章主要介紹了springboot集成ES實(shí)現(xiàn)磁盤(pán)文件全文檢索的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11