MyBatis-Plus中@TableField和@TableId说明
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>一、@TableField(value = “表字段”)</li><li>二、@TableField(select = false)</li><li>三、@TableField(exist = false)</li><li>四、@TableId(type = IdType.AUTO)补充</li><li>总结</li></ul></div><p class="maodian"></p><h2>一、@TableField(value = “表字段”)</h2><p>如果表的字段与pojo类的属性值对应不上,就像表字段为user_name,但是属性的为uName时,在查询所有中就会报错,找不到表的字段信息。</p>
<blockquote><p>java.sql.SQLSyntaxErrorException: Unknown column ‘u_name’ in ‘field list’</p></blockquote>
<p>就是表的字段和User类没有对应上。</p>
<p>这里就需要加入该注解@TableField(value = “user_name”),解决字段不一致问题(value写表字段名),使得一一对应起来。</p>
<div class="jb51code"><pre class="brush:java;"> @TableField(value = "user_name")
private String uName;
</pre></div>
<p><strong>注:</strong></p>
<p>但如果表字段user_name。定义的userName。</p>
<p>驼峰命名会自动识别。不写注解也可以)</p>
<p>再次运行即可解决该问题 如图所示:</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202601/2026011208422645.png" /></p>
<p class="maodian"></p><h2>二、@TableField(select = false)</h2>
<p>这是用来解决如果用户名密码不想显示时可以在属性上添加该字段,sql语句就不会去查询该字段。</p>
<p>这样在查询时密码字段会变成null输出,保证安全性。</p>
<div class="jb51code"><pre class="brush:java;"> //查询不显示用户密码
@TableField(select = false)
private String userPassword;
</pre></div>
<p class="maodian"></p><h2>三、@TableField(exist = false)</h2>
<p>在添加中,如果User类下的属性数据库字段没有,再添加时还会给这个属性赋值,然后发送到mapper执行插入数据操作时就会报错。</p>
<blockquote><p>java.sql.SQLSyntaxErrorException: Unknown column ‘hobby’ in ‘field list’</p></blockquote>
<p>Mybatis-plus忽略表中映射的字段:</p>
<p>Mybatis-plus使用entity和数据库进行关联映射,有时候可能有些字段,在当前表中不存在,但是操作的时候,又需要进行使用,所以有时候就需要进行忽略。</p>
<p>具体如何忽略如下:</p>
<ul><li>@TableField(exist = false):表示该属性不是表中字段,但又是必须使用的。</li><li>@TableField(exist = true):表示该属性是表中字段。</li></ul>
<p>执行下面的测试方法进行测试:</p>
<div class="jb51code"><pre class="brush:java;"> //测试添加方法
@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("添加失败~");
}
}
</pre></div>
<p><strong>解决该方法:</strong></p>
<p>就要使用 @TableField(exist = false)注解,表示数据表中没有该字段,添加时生成sql代码就会知道。</p>
<div class="jb51code"><pre class="brush:java;">//数据库中没有该字段时需要添加注解
@TableField(exist = false)
private String hobby;
</pre></div>
<p class="maodian"></p><h2>四、@TableId(type = IdType.AUTO)补充</h2>
<p>这个是通过id查询时,如果不在id主键属性上添加该注解的话,就会报以下错误</p>
<blockquote><p>org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): cn.imust.mp.mapper.UserMapper.selectById</p></blockquote>
<p>这就表名虽然有属性和表字段也对应,但是在通过id查询时MP不知道这个是主键,所以无法执行该方法,解决方法就是在属性上添加@TableId(type = IdType.AUTO),type等于的值有很多,一般主键都是用这个。</p>
<div class="jb51code"><pre class="brush:java;"> @TableId(type = IdType.AUTO)
private Integer userId;
</pre></div>
<p>查看运行效果 如图所示:</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202601/2026011208422694.png" /></p>
<p class="maodian"></p><h2>总结</h2>
<p>以上为个人经验,希望能给大家一个参考,也希望大家多多支持琼殿技术社区。</p>
<div class="art_xg">
<b>您可能感兴趣的文章:</b><ul><li>MyBatis-Plus之@TableField的用法解读</li><li>mybatis-plus常用注解@TableId和@TableField的用法</li><li>Mybatis-Plus @TableField自动填充时间为null的问题解决</li><li>MyBatis-Plus标签@TableField之fill自动填充方式</li><li>Mybatis-Plus使用@TableField实现自动填充日期的代码示例</li><li>Mybatis-plus常见的坑@TableField不生效问题</li><li>Mybatis-plus使用注解 @TableField(exist = false)</li></ul>
</div>
</div>
<!--endmain-->
頁:
[1]