MyBaits-Plus中@TableField和@TableId用法

导读:本篇文章讲解 MyBaits-Plus中@TableField和@TableId用法,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

目录

前言

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

二、@TableField(select = false)

 三、@TableField(exist = false)

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

总结



前言

接着前两篇mybatis-plus的知识点

Mybatis-Plus知识点[MyBatis+MyBatis-Plus的基础运用]_心态还需努力呀的博客-CSDN博客

Mybatis-Plus+SpringBoot结合运用_心态还需努力呀的博客-CSDN博客

本文主要写MP中注解@TableField的用法。这正是上文提到的数据库表与设置变量非驼峰该怎么对应?这种问题的解决方法。


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

如果表的字段与pojo类的属性值对应不上,就像表字段为user_name,但是属性的为uName时,在查询所有中就会报错,找不到表的字段信息。java.sql.SQLSyntaxErrorException: Unknown column ‘u_name’ in ‘field list’  如下图所示:

MyBaits-Plus中@TableField和@TableId用法

 就是表的字段和User类没有对应上。这里就需要加入该注解@TableField(value = “user_name”)

解决字段不一致问题(value写表字段名,使得一一对应起来。
注:但如果是下面情况:表字段user_name。定义的userName。驼峰命名会自动识别。不写注解也可以)


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

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

MyBaits-Plus中@TableField和@TableId用法

 及该问题就以解决。

二、@TableField(select = false)

这是用来解决如果用户名密码不想显示时可以在属性上添加该字段,sql语句就不会去查询该字段。这样在查询时密码字段会变成null输出,保证安全性。

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

 在使用测试方法查询所有用户信息 如下图所示:可看到密码都为null

MyBaits-Plus中@TableField和@TableId用法

 三、@TableField(exist = false)

在添加中,如果User类下的属性数据库字段没有,再添加时还会给这个属性赋值,然后发送到mapper执行插入数据操作时就会报错。java.sql.SQLSyntaxErrorException: Unknown column ‘hobby’ in ‘field list’

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

//测试添加方法
    @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("添加失败~");
        }
    }

如下图所示:

MyBaits-Plus中@TableField和@TableId用法

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

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

查看执行效果图:执行成功!!!

MyBaits-Plus中@TableField和@TableId用法

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

这个是通过id查询时,如果不在id主键属性上添加该注解的话,就会报以下错误,org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): cn.imust.mp.mapper.UserMapper.selectById

如图所示:

MyBaits-Plus中@TableField和@TableId用法

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

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

查看运行效果 如图所示:

MyBaits-Plus中@TableField和@TableId用法

可看出自动生成的sql语句和执行成功的该方法。 


总结

MP中的@TableField注解和@TableId注解的简单使用,保证一些简单的MP+SpringBoot开发中必备的知识点。学会使用这些知识点会使你的基础知识更加牢固,在以后碰到类似的情况会节约很多查资料的时间。也是在运用MP时必须要掌握的知识点。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/114643.html

(0)
Java光头强的头像Java光头强

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!