MyBatisPlus中@TableField注解的基本使用
作者:小花皮猪
这篇文章主要介绍了MyBatisPlus中@TableField注解的基本使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
前言
在MP中通过@TableField注解可以指定字段的一些属性
常见解决的问题有2种:
- 1、对象中的属性名和字段名不一致的问题(非驼峰)
- 2、对象中的属性字段在表中不存在的问题
上述的两种情况,我们接下来一一举例说明
我们最长见的,应该就是下面这种@TableField的使用方式了,是的,没错,就是在实体里面标注这个属性是数据库表里面的某个字段,采用驼峰命名法的方式
@TableField(“user_name”) private String userName;
前提准备
在正式操作之前,我们需要提前准备一张表
/* 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 字段错误
首先我们恶意修改把正确的email 改为mail 让它故意对不上
此时运行查询 会报错 原因就是因为匹配不到email字段
然后使用@TableField指定这个mail字段就是数据库里面的email字段
//指定数据库字段名称 @TableField(value = "email")
然后再次运行查询方法 这次正确了 可见我们的注解起效了
同理 新增也是一样的 这里我们就直接设置mail的值 还是可以正常插入对应的email的值
使用场景2 不存在字段
这时我在是实体里面加入一个表里面不存在的字段
再次运行报错 找不到该字段
这时候怎么解决这个问题呢通过@TableField(exist = false) 指名表里没有这个字段
@TableField(exist = false)
这个时候再次查询 发现解决了
使用场景3 不被查询的字段
如果有的字段数据比较隐私 不想被查出来怎么办呢?
我们可以使用下面的这种方式
// 查询的时候不返回该字段的值 默认为true(返回)@TableField(select=false)
运行查询 发现password的值已经被隐藏为null
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。