首頁 > 軟體

@TableName註解和@Table的區別及說明

2022-01-15 13:00:28

@TableName註解和@Table區別

最近開發專案的時候,從一個專案遷移程式碼到另一個專案,原有專案用的是Hibernate,現有專案用的是mybatis-plus,程式碼遷移過來後,schema屬性用於指定資料庫範例名。

但是@Table屬性schema在mybatis-plus框架中失效了,一直找不到對應的範例名。 

前言

@TableName是mybatis-plus中的註解,主要是實現實體型別和資料庫中的表實現對映。

注意,不要將@TableName和@Table註解認為是一個,雖然功能相同,但是,@TableName是mybatis-plus中的註解,@Table是Hibernate中的註解。

@TableName引數說明

@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")
// 該註解主要是現實實體型別和資料庫中的表實現對映。
public class SysUser implements Serializable {
    @TableId(type= IdType.AUTO)
    private Long id;
    private String username;
    //使用者名稱
    private String loginName;
    //登入密碼,密碼需要加密
    private String password;
}

@Table

當實體類與其對映的資料庫表名不同名時需要使用 @Table 標註說明,該標註與 @Entity 標註並列使用,置於實體類宣告語句之前,可寫於單獨語句行,也可與宣告語句同行。

@Table 標註的常用選項是 name,用於指明資料庫的表名

@Table標註還有一個兩個選項 catalog 和 schema 用於設定表所屬的資料庫目錄或模式,通常為資料庫名。uniqueConstraints選項用於設定約束條件,通常不須設定。

  • name屬性

name屬性用於指定資料庫表名稱

若不指定則以實體類名稱作為表名

  • catalog屬性

catalog屬性用於指定資料庫範例名

當catalog屬性不指定時,新建立的表將出現在url指定的資料庫範例中

當catalog屬性設定名稱時,若資料庫存在和指定名稱一致的範例,新建立的表將出現在該範例中

  • schema屬性

作用與catalog屬性作用一致,可自行測試

  • uniqueConstraints屬性

uniqueConstraints屬性用於設定約束條件

@Table(name="CUSTOMERS",uniqueConstraints={@UniqueConstraint(columnNames={"name"})})
@Entity
public class Customer {
    private Integer id;
    private String name;
    private String email;
    private int age;
    ......
}

小結一下

1.當實體類名和資料庫表名不一致時,name屬性可以實現對映,及時表名一致,也推薦使用,提高程式的可讀性

2.catalog和sechema屬性一般不需要指定

3.uniqueConstraints屬性一般也不需要指定,但是如有需要則可以指定

Table(name=“xx“)與Entity(name=“xx“) 問題

@Entity
@Table(name="T_qibie")

這樣寫的話在hql裡要用實體的名字 from QibieVo

如果是這樣的話

@Entity(name="T_qibie")

這樣寫的話在hql裡要用表的名字 from T_qibie

還有有時候只能用@Entity(name="T_qibie")的話,可能是:JAVAEE6.0中的 javax.persistence.jar與 hibernate中的hibernate-jpa-2.1-api-1.0.0.Final.jar衝突 ,而我採取的措施是刪除了JAVAEE6.0的庫,執行就正常了,然後在加進來有正常了 。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com