MyBatisPlus @TableName表名注解的基本操作
在 MyBatis-Plus 中,@TableName 是一個(gè)非常重要的注解,用于指定實(shí)體類(Entity)與數(shù)據(jù)庫(kù)表之間的映射關(guān)系。通過(guò)使用 @TableName 注解,可以明確地告訴 MyBatis-Plus 哪個(gè)實(shí)體類對(duì)應(yīng)數(shù)據(jù)庫(kù)中的哪張表。這使得 MyBatis-Plus 能夠正確地生成 SQL 語(yǔ)句并進(jìn)行數(shù)據(jù)操作。
1.@TableName的基本用法
@TableName 注解通常用于實(shí)體類的類定義上,用于指定實(shí)體類對(duì)應(yīng)的數(shù)據(jù)庫(kù)表名。如果實(shí)體類的類名與數(shù)據(jù)庫(kù)表名一致(按照駝峰命名規(guī)則),則可以省略 @TableName 注解。如果表名與類名不一致,則必須使用 @TableName 注解來(lái)指定表名。
示例 1:省略@TableName注解
假設(shè)數(shù)據(jù)庫(kù)中有一張表 user,表結(jié)構(gòu)如下:
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;
對(duì)應(yīng)的實(shí)體類可以這樣定義(省略 @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 方法
}因?yàn)閷?shí)體類 User 和表名 user 是一致的(按照駝峰命名規(guī)則),所以可以省略 @TableName 注解。
示例 2:使用@TableName注解
如果表名與實(shí)體類名不一致,或者表名是多級(jí)表名(例如 sys_user),則必須使用 @TableName 注解來(lái)指定表名。
假設(shè)數(shù)據(jù)庫(kù)中有一張表 sys_user,表結(jié)構(gòu)如下:
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;
對(duì)應(yīng)的實(shí)體類可以這樣定義:
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 注解提供了以下屬性,用于進(jìn)一步配置表名映射:
value:指定數(shù)據(jù)庫(kù)表名。resultMap:指定resultMap的名稱(可選)。autoResultMap:是否自動(dòng)生成resultMap(默認(rèn)為true)。exclude:指定需要排除的字段名(可選)。
示例:使用exclude屬性
假設(shè)表 sys_user 中有一個(gè)字段 create_time,但在實(shí)體類中不需要映射這個(gè)字段,可以使用 exclude 屬性來(lái)排除它:
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. 多級(jí)表名映射
在實(shí)際項(xiàng)目中,表名可能包含多級(jí)命名(例如 sys_user)。@TableName 注解可以直接指定完整的表名,MyBatis-Plus 會(huì)根據(jù)指定的表名生成 SQL 語(yǔ)句。
示例:多級(jí)表名
假設(shè)數(shù)據(jù)庫(kù)中有一張表 sys_user,表結(jié)構(gòu)如下:
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;
對(duì)應(yīng)的實(shí)體類可以這樣定義:
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") // 指定多級(jí)表名
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String username;
private Integer age;
// 省略 getter 和 setter 方法
}4. 動(dòng)態(tài)表名
在某些場(chǎng)景下,表名可能需要?jiǎng)討B(tài)生成(例如分表)。MyBatis-Plus 支持通過(guò) @TableName 注解的 value 屬性動(dòng)態(tài)拼接表名。
示例:動(dòng)態(tài)表名
假設(shè)有一個(gè)分表策略,表名根據(jù)年份動(dòng)態(tài)生成(例如 user_2024、user_2025 等),可以通過(guò)以下方式實(shí)現(xiàn):
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()) // 動(dòng)態(tài)表名
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
// 省略 getter 和 setter 方法
}5. 總結(jié)
@TableName 注解是 MyBatis-Plus 中用于指定實(shí)體類與數(shù)據(jù)庫(kù)表映射關(guān)系的重要工具。通過(guò)使用 @TableName 注解,可以明確地指定表名,支持多級(jí)表名和動(dòng)態(tài)表名。合理使用 @TableName 注解可以提高代碼的可讀性和可維護(hù)性,同時(shí)避免因表名不一致導(dǎo)致的問(wèn)題。
到此這篇關(guān)于MyBatisPlus @TableName表名注解的文章就介紹到這了,更多相關(guān)MyBatisPlus @TableName表名注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
對(duì)Mybatis?Plus中@TableField的使用正解
這篇文章主要介紹了對(duì)Mybatis?Plus中@TableField的使用正解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
Java獲取網(wǎng)頁(yè)數(shù)據(jù)步驟方法詳解
這篇文章主要介紹了Java獲取網(wǎng)頁(yè)數(shù)據(jù)步驟方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
java8如何根據(jù)某一屬性條件快速篩選list中的集合
這篇文章主要介紹了java8如何根據(jù)某一屬性條件快速篩選list中的集合,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
Maven項(xiàng)目外部jar包導(dǎo)入的實(shí)現(xiàn)示例
在Maven項(xiàng)目里,我們經(jīng)常需要導(dǎo)入jar包依賴,本文主要介紹了Maven項(xiàng)目外部jar包導(dǎo)入的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-08-08
微服務(wù)架構(gòu)設(shè)計(jì)RocketMQ進(jìn)階事務(wù)消息原理詳解
這篇文章主要介紹了為大家介紹了微服務(wù)架構(gòu)中RocketMQ進(jìn)階層面事務(wù)消息的原理詳解,有需要的朋友可以借鑒參考下希望能夠有所幫助2021-10-10
java實(shí)現(xiàn)單鏈表中是否有環(huán)的方法詳解
本篇文章介紹了,用java實(shí)現(xiàn)單鏈表中是否有環(huán)的方法詳解。需要的朋友參考下2013-05-05
springboot配置數(shù)據(jù)庫(kù)密碼特殊字符報(bào)錯(cuò)的解決
這篇文章主要介紹了springboot配置數(shù)據(jù)庫(kù)密碼特殊字符報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02

