MyBatis-Plus中@TableField和@TableId说明

 更新时间:2026年01月12日 08:44:12   作者:strggle_bin  
文章详细介绍了Mybatis-plus中常用的注解及其用途,包括@TableField、@TableId等,通过这些注解可以解决字段不一致、字段不显示、忽略字段以及主键查询等问题,从而提高开发效率和数据安全性

一、@TableField(value = “表字段”)

如果表的字段与pojo类的属性值对应不上,就像表字段为user_name,但是属性的为uName时,在查询所有中就会报错,找不到表的字段信息。

java.sql.SQLSyntaxErrorException: Unknown column ‘u_name’ in ‘field list’

就是表的字段和User类没有对应上。

这里就需要加入该注解@TableField(value = “user_name”),解决字段不一致问题(value写表字段名),使得一一对应起来。

    @TableField(value = "user_name")
    private String uName;

注:

但如果表字段user_name。定义的userName。

驼峰命名会自动识别。不写注解也可以)

再次运行即可解决该问题 如图所示:

二、@TableField(select = false)

这是用来解决如果用户名密码不想显示时可以在属性上添加该字段,sql语句就不会去查询该字段。

这样在查询时密码字段会变成null输出,保证安全性。

 	//查询不显示用户密码
    @TableField(select = false)
    private String userPassword;

三、@TableField(exist = false)

在添加中,如果User类下的属性数据库字段没有,再添加时还会给这个属性赋值,然后发送到mapper执行插入数据操作时就会报错。

java.sql.SQLSyntaxErrorException: Unknown column ‘hobby’ in ‘field list’

Mybatis-plus忽略表中映射的字段:

Mybatis-plus使用entity和数据库进行关联映射,有时候可能有些字段,在当前表中不存在,但是操作的时候,又需要进行使用,所以有时候就需要进行忽略。

具体如何忽略如下:

  • @TableField(exist = false):表示该属性不是表中字段,但又是必须使用的。
  • @TableField(exist = true):表示该属性是表中字段。

执行下面的测试方法进行测试:

	//测试添加方法
    @Test
    public void testInsert(){
        User user=new User();
        user.setUserName("哈哈111");
        user.setUserEmail("12433");
        user.setUserRole("ADMIN");
        user.setUserStatus("0");
        user.setUserPassword("12344");
 
		// 表中没有字段
        user.setHobby("足球");
        //受影响的行数  count
        int count = userMapper.insert(user);
        if(count>0){//添加成功
            //输出所有数据
            testSelectList();
        }else {//添加失败
            System.out.println("添加失败~");
        }
    }

解决该方法:

就要使用 @TableField(exist = false)注解,表示数据表中没有该字段,添加时生成sql代码就会知道。

//数据库中没有该字段时需要添加注解
@TableField(exist = false)
private String hobby;

四、@TableId(type = IdType.AUTO)补充

这个是通过id查询时,如果不在id主键属性上添加该注解的话,就会报以下错误

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): cn.imust.mp.mapper.UserMapper.selectById

这就表名虽然有属性和表字段也对应,但是在通过id查询时MP不知道这个是主键,所以无法执行该方法,解决方法就是在属性上添加@TableId(type = IdType.AUTO),type等于的值有很多,一般主键都是用这个。

	@TableId(type = IdType.AUTO)
    private Integer userId;

查看运行效果 如图所示:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java多线程及分布式爬虫架构原理解析

    Java多线程及分布式爬虫架构原理解析

    这篇文章主要介绍了Java多线程及分布式爬虫架构原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Springboot主程序类注解配置过程图解

    Springboot主程序类注解配置过程图解

    这篇文章主要介绍了Springboot主程序类注解配置过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • 基于SSM+Shiro+Bootstrap实现用户权限管理系统

    基于SSM+Shiro+Bootstrap实现用户权限管理系统

    这篇文章主要介绍了基于SSM+Shiro实现一个用户权限管理系统,每位用户只可访问指定的页面,文中的示例代码讲解详细,对我们学习或工作有一定帮助,快跟随小编一起学习吧
    2021-12-12
  • java往php传数据操作方法

    java往php传数据操作方法

    在本篇内容里小编给大家分享的是关于java往php传数据操作方法和技巧,需要的朋友们可以跟着学习下。
    2018-12-12
  • 详解java google Thumbnails 图片处理

    详解java google Thumbnails 图片处理

    这篇文章主要介绍了java google Thumbnails 图片处理的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Java图形化界面设计之布局管理器之BorderLayout案例详解

    Java图形化界面设计之布局管理器之BorderLayout案例详解

    这篇文章主要介绍了Java图形化界面设计之布局管理器之BorderLayout案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • springcloud实现注册中心Eureka

    springcloud实现注册中心Eureka

    这篇文章主要介绍了springcloud实现注册中心Eureka,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • 详解Java数据结构和算法(有序数组和二分查找)

    详解Java数据结构和算法(有序数组和二分查找)

    本篇文章主要介绍了详解Java数据结构和算法(有序数组和二分查找),具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • SpringCloud Gateway中GatewayFilterChain执行流程详解

    SpringCloud Gateway中GatewayFilterChain执行流程详解

    Spring Cloud Gateway旨在为微服务架构提供一种简单有效的、统一的 API 路由管理方式。Spring Cloud Gateway 作为 Spring Cloud 生态系中的网关,它不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全、监控/埋点和限流等
    2022-10-10
  • SpringBoot使用CORS实现无缝跨域的方法实现

    SpringBoot使用CORS实现无缝跨域的方法实现

    CORS 是一种在服务端设置响应头部信息的机制,允许特定的源进行跨域访问,本文主要介绍了SpringBoot使用CORS实现无缝跨域的方法实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10

最新评论