MyBatisPlus @TableName表名注解的基本操作
作者:awonw
在 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_2024、user_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表名注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
