@TableName註解和@Table的區別及說明
@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的庫,運行就正常瞭,然後在加進來有正常瞭 。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Java DatabaseMetaData用法案例詳解
- Mybatis-Plus自動生成的數據庫id過長的解決
- 關於@Entity和@Table註解的用法詳解
- Spring Data JPA 實體類中常用註解說明
- 記錄一個使用Spring Data JPA設置默認值的問題