@TableName注解和@Table的区别及说明
⽬录
@TableName注解和@Table区别
前⾔
@TableName参数说明
@Table
⼩结⼀下
Table(name=“xx“)与Entity(name=“xx“) 问题
@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的库,运⾏就正常了,然后在加进来有正常了。
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。