MyBatisPlus中@TableField注解的基本使用
?前言
在MP中通過@TableField注解可以指定字段的一些屬性
常見解決的問題有2種:
- 1、對象中的屬性名和字段名不一致的問題(非駝峰)
- 2、對象中的屬性字段在表中不存在的問題
上述的兩種情況,我們接下來一一舉例說明
我們最長見的,應(yīng)該就是下面這種@TableField的使用方式了,是的,沒錯(cuò),就是在實(shí)體里面標(biāo)注這個(gè)屬性是數(shù)據(jù)庫表里面的某個(gè)字段,采用駝峰命名法的方式
@TableField(“user_name”) private String userName;
前提準(zhǔn)備
在正式操作之前,我們需要提前準(zhǔn)備一張表
/* Navicat Premium Data Transfer Source Server : 本地庫 Source Server Type : MySQL Source Server Version : 80017 Source Host : localhost:3306 Source Schema : mp Target Server Type : MySQL Target Server Version : 80017 File Encoding : 65001 Date: 23/08/2022 22:19:37 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for tb_user -- ---------------------------- DROP TABLE IF EXISTS `tb_user`; CREATE TABLE `tb_user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', `user_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用戶名', `password` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '密碼', `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '姓名', `age` int(11) NULL DEFAULT NULL COMMENT '年齡', `email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '郵箱', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of tb_user -- ---------------------------- INSERT INTO `tb_user` VALUES (1, 'zhangsan', '123456', '張三', 18, 'test1@qq.com'); INSERT INTO `tb_user` VALUES (2, 'lisi', '123456', '李四', 20, 'test2@qq.com'); INSERT INTO `tb_user` VALUES (3, 'wangwu', '123456', '王五', 22, 'test3@qq,com'); INSERT INTO `tb_user` VALUES (4, 'zhaoliu', '123456', '趙六', 24, 'test4@qq.com'); SET FOREIGN_KEY_CHECKS = 1;
使用場景1 字段錯(cuò)誤
首先我們惡意修改把正確的email 改為mail 讓它故意對不上

此時(shí)運(yùn)行查詢 會(huì)報(bào)錯(cuò) 原因就是因?yàn)槠ヅ洳坏絜mail字段

?然后使用@TableField指定這個(gè)mail字段就是數(shù)據(jù)庫里面的email字段
//指定數(shù)據(jù)庫字段名稱 @TableField(value = "email")

然后再次運(yùn)行查詢方法 這次正確了 可見我們的注解起效了

同理 新增也是一樣的 這里我們就直接設(shè)置mail的值 還是可以正常插入對應(yīng)的email的值


使用場景2 不存在字段
這時(shí)我在是實(shí)體里面加入一個(gè)表里面不存在的字段

再次運(yùn)行報(bào)錯(cuò) 找不到該字段

這時(shí)候怎么解決這個(gè)問題呢通過@TableField(exist = false) 指名表里沒有這個(gè)字段
@TableField(exist = false)

這個(gè)時(shí)候再次查詢 發(fā)現(xiàn)解決了

使用場景3 不被查詢的字段
如果有的字段數(shù)據(jù)比較隱私 不想被查出來怎么辦呢?
我們可以使用下面的這種方式
// 查詢的時(shí)候不返回該字段的值 默認(rèn)為true(返回)@TableField(select=false)

運(yùn)行查詢 發(fā)現(xiàn)password的值已經(jīng)被隱藏為null

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- j2ee mybatis注解@Data,@TableName,@TableField使用方式
- 注解@TableName,@TableField,pgsql的模式對應(yīng)方式
- mybatis-plus常用注解@TableId和@TableField的用法
- mybatis?plus框架@TableField注解不生效問題及解決方案
- Java如何獲取@TableField,@TableName注解的值
- MyBatisPlus使用@TableField注解處理默認(rèn)填充時(shí)間的問題
- Mybatis-plus使用注解 @TableField(exist = false)
- @TableField注解之深入理解與應(yīng)用方式
相關(guān)文章
SpringBoot集成tensorflow實(shí)現(xiàn)圖片檢測功能
TensorFlow名字的由來就是張量(Tensor)在計(jì)算圖(Computational?Graph)里的流動(dòng)(Flow),它的基礎(chǔ)就是前面介紹的基于計(jì)算圖的自動(dòng)微分,本文將給大家介紹Spring?Boot集成tensorflow實(shí)現(xiàn)圖片檢測功能,需要的朋友可以參考下2024-06-06
基于SpringBoot+jQuery實(shí)現(xiàn)留言板功能
本教程詳細(xì)介紹了如何使用Spring Boot 3.x和jQuery實(shí)現(xiàn)一個(gè)完整的留言板系統(tǒng),主要功能包括留言查看、提交、實(shí)時(shí)刷新和表單校驗(yàn),感興趣的可以了解一下2026-01-01
mybatis分割字符串并循環(huán),實(shí)現(xiàn)in多個(gè)參數(shù)的操作
這篇文章主要介紹了mybatis分割字符串并循環(huán),實(shí)現(xiàn)in多個(gè)參數(shù)的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
淺談Java中的interface應(yīng)用與面向接口編程
這篇文章主要介紹了淺談Java中的interface應(yīng)用與面向接口編程,Java的關(guān)鍵字interface應(yīng)用,一個(gè)接口,多個(gè)實(shí)現(xiàn)類,面向接口編程,把業(yè)務(wù)邏輯線提取出來作為接口,具體的業(yè)務(wù)實(shí)現(xiàn)通過該接口的實(shí)現(xiàn)類來完成,需要的朋友可以參考下2023-10-10
Java synchronized線程交替運(yùn)行實(shí)現(xiàn)過程詳解
這篇文章主要介紹了Java synchronized線程交替運(yùn)行實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11

