MyBatisPlus @TableName表名注解的基本操作

 更新时间:2025年09月17日 11:11:35   作者:awonw  
@TableName注解是MyBatis-Plus中用于指定实体类与数据库表映射关系的重要工具,通过使用@TableName注解,可以明确地指定表名,支持多级表名和动态表名,本文给大家介绍MyBatisPlus @TableName表名注解的相关操作,感兴趣的朋友跟随小编一起看看吧

在 MyBatis-Plus 中,@TableName 是一个非常重要的注解,用于指定实体类(Entity)与数据库表之间的映射关系。通过使用 @TableName 注解,可以明确地告诉 MyBatis-Plus 哪个实体类对应数据库中的哪张表。这使得 MyBatis-Plus 能够正确地生成 SQL 语句并进行数据操作。

1.@TableName的基本用法

@TableName 注解通常用于实体类的类定义上,用于指定实体类对应的数据库表名。如果实体类的类名与数据库表名一致(按照驼峰命名规则),则可以省略 @TableName 注解。如果表名与类名不一致,则必须使用 @TableName 注解来指定表名。

示例 1:省略@TableName注解

假设数据库中有一张表 user,表结构如下:

CREATE TABLE `user` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(50) NOT NULL,
  `age` INT(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

对应的实体类可以这样定义(省略 @TableName 注解):

package com.example.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    // 省略 getter 和 setter 方法
}

因为实体类 User 和表名 user 是一致的(按照驼峰命名规则),所以可以省略 @TableName 注解。

示例 2:使用@TableName注解

如果表名与实体类名不一致,或者表名是多级表名(例如 sys_user),则必须使用 @TableName 注解来指定表名。

假设数据库中有一张表 sys_user,表结构如下:

CREATE TABLE `sys_user` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(50) NOT NULL,
  `age` INT(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

对应的实体类可以这样定义:

package com.example.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@TableName("sys_user") // 指定表名
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String username; // 注意字段名与表字段名一致
    private Integer age;
    // 省略 getter 和 setter 方法
}

2.@TableName的属性

@TableName 注解提供了以下属性,用于进一步配置表名映射:

  • value:指定数据库表名。
  • resultMap:指定 resultMap 的名称(可选)。
  • autoResultMap:是否自动生成 resultMap(默认为 true)。
  • exclude:指定需要排除的字段名(可选)。

示例:使用exclude属性

假设表 sys_user 中有一个字段 create_time,但在实体类中不需要映射这个字段,可以使用 exclude 属性来排除它:

package com.example.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@TableName(value = "sys_user", exclude = "create_time")
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String username;
    private Integer age;
    // 省略 getter 和 setter 方法
}

3. 多级表名映射

在实际项目中,表名可能包含多级命名(例如 sys_user)。@TableName 注解可以直接指定完整的表名,MyBatis-Plus 会根据指定的表名生成 SQL 语句。

示例:多级表名

假设数据库中有一张表 sys_user,表结构如下:

CREATE TABLE `sys_user` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(50) NOT NULL,
  `age` INT(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

对应的实体类可以这样定义:

package com.example.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@TableName("sys_user") // 指定多级表名
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String username;
    private Integer age;
    // 省略 getter 和 setter 方法
}

4. 动态表名

在某些场景下,表名可能需要动态生成(例如分表)。MyBatis-Plus 支持通过 @TableName 注解的 value 属性动态拼接表名。

示例:动态表名

假设有一个分表策略,表名根据年份动态生成(例如 user_2024user_2025 等),可以通过以下方式实现:

package com.example.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.time.LocalDate;
@TableName(value = "user_" + LocalDate.now().getYear()) // 动态表名
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    // 省略 getter 和 setter 方法
}

5. 总结

@TableName 注解是 MyBatis-Plus 中用于指定实体类与数据库表映射关系的重要工具。通过使用 @TableName 注解,可以明确地指定表名,支持多级表名和动态表名。合理使用 @TableName 注解可以提高代码的可读性和可维护性,同时避免因表名不一致导致的问题。

到此这篇关于MyBatisPlus @TableName表名注解的文章就介绍到这了,更多相关MyBatisPlus @TableName表名注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 对Mybatis Plus中@TableField的使用正解

    对Mybatis Plus中@TableField的使用正解

    这篇文章主要介绍了对Mybatis Plus中@TableField的使用正解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • java反射常用方法案例详解

    java反射常用方法案例详解

    Java反射指的是一个机制,这种机制可以在Java程序运行时(动态)实例化对象、读写属性、调用方法,这篇文章主要介绍了java反射常用方法,需要的朋友可以参考下
    2023-06-06
  • Java获取网页数据步骤方法详解

    Java获取网页数据步骤方法详解

    这篇文章主要介绍了Java获取网页数据步骤方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • java中如何区分==和equals

    java中如何区分==和equals

    这篇文章主要介绍了java中如何区分==和equals,文中讲解的非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • java8如何根据某一属性条件快速筛选list中的集合

    java8如何根据某一属性条件快速筛选list中的集合

    这篇文章主要介绍了java8如何根据某一属性条件快速筛选list中的集合,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Maven项目外部jar包导入的实现示例

    Maven项目外部jar包导入的实现示例

    在Maven项目里,我们经常需要导入jar包依赖,本文主要介绍了Maven项目外部jar包导入的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08
  • 微服务架构设计RocketMQ进阶事务消息原理详解

    微服务架构设计RocketMQ进阶事务消息原理详解

    这篇文章主要介绍了为大家介绍了微服务架构中RocketMQ进阶层面事务消息的原理详解,有需要的朋友可以借鉴参考下希望能够有所帮助
    2021-10-10
  • java实现单链表中是否有环的方法详解

    java实现单链表中是否有环的方法详解

    本篇文章介绍了,用java实现单链表中是否有环的方法详解。需要的朋友参考下
    2013-05-05
  • springboot配置数据库密码特殊字符报错的解决

    springboot配置数据库密码特殊字符报错的解决

    这篇文章主要介绍了springboot配置数据库密码特殊字符报错的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • 深入理解Spring Boot的日志管理

    深入理解Spring Boot的日志管理

    这篇文章主要给大家深入的介绍了Spring Boot日志管理的相关资料,文中介绍的很详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-02-02

最新评论