温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

@TableName和@Table的区别有哪些

发布时间:2022-01-15 14:04:17 来源:亿速云 阅读:537 作者:iii 栏目:开发技术

这篇文章主要介绍“@TableName和@Table的区别有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“@TableName和@Table的区别有哪些”文章能帮助大家解决问题。

    @TableName注解和@Table区别

    最近开发项目的时候,从一个项目迁移代码到另一个项目,原有项目用的是Hibernate,现有项目用的是mybatis-plus,代码迁移过来后,schema属性用于指定数据库实例名。

    但是@Table属性schema在mybatis-plus框架中失效了,一直找不到对应的实例名。 

    前言

    @TableName是mybatis-plus中的注解,主要是实现实体类型和数据库中的表实现映射。

    注意,不要将@TableName和@Table注解认为是一个,虽然功能相同,但是,@TableName是mybatis-plus中的注解,@Table是Hibernate中的注解。

    @TableName参数说明

    @TableName和@Table的区别有哪些

    @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的库,运行就正常了,然后在加进来有正常了 。

    关于“@TableName和@Table的区别有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI