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表名注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Springboot详解实现食品仓库管理系统流程

    Springboot详解实现食品仓库管理系统流程

    这是一个使用Springboot开发的食品仓库管理系统,是为商家提供商品货物进销存的信息化管理系统,具有一个仓库管理系统该有的所有功能,感兴趣的朋友快来看看吧
    2022-06-06
  • Java实现占位符名称替换值

    Java实现占位符名称替换值

    占位符现在应该说是比较流行的动态赋值,本文主要介绍了Java占位符名称替换值,根据一串带着参数名占位符的url,替换掉对应参数名的值,感兴趣的可以了解一下
    2021-07-07
  • idea打开和读取*properties文件乱码的解决

    idea打开和读取*properties文件乱码的解决

    本文主要介绍了idea打开和读取*properties文件乱码的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-09-09
  • Spring Security过滤器链体系的实例详解

    Spring Security过滤器链体系的实例详解

    这篇文章主要介绍了Spring Security过滤器链体系,通过思维导图可以很好的帮助大家理解配置类的相关知识,结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • Java设计模式之浅谈外观模式

    Java设计模式之浅谈外观模式

    这篇文章主要介绍了Java设计模式之外观模式的相关资料,需要的朋友可以参考下
    2022-09-09
  • Java设计模式七大原则之合成复用原则详解

    Java设计模式七大原则之合成复用原则详解

    合成复用原则(Composite Reuse Principle),即尽量使用组合/聚合的方式,而不是使用继承。本文将为大家具体介绍一下Java设计模式七大原则之一的合成复用原则,需要的可以参考一下
    2022-02-02
  • 解析Tomcat 6、7在EL表达式解析时存在的一个Bug

    解析Tomcat 6、7在EL表达式解析时存在的一个Bug

    这篇文章主要是对Tomcat 6、7在EL表达式解析时存在的一个Bug进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-12-12
  • mybatis配置Mapper.xml文件时遇到的问题及解决

    mybatis配置Mapper.xml文件时遇到的问题及解决

    这篇文章主要介绍了mybatis配置Mapper.xml文件时遇到的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • Java中ReentrantReadWriteLock读写锁的实现

    Java中ReentrantReadWriteLock读写锁的实现

    本文主要介绍了ReentrantReadWriteLock读写锁,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-05-05
  • 一文掌握Spring Boot 日志文件

    一文掌握Spring Boot 日志文件

    日志是程序的重要组成部分,日志对于我们来说,最主要的用途就是排除和定位问题,这篇文章主要介绍了Spring Boot 日志文件,需要的朋友可以参考下
    2023-03-03

最新评论