对Mybatis Plus中@TableField的使用正解

目录
  • @TableField的使用
    • 1 研究背景和过程
    • 2 总结
      • 2.1 别名效果 value属性
      • 2.2 防止字段持久化 exist属性
  • @TableField的作用
    • @TableField(exist = false)

@TableField的使用

1 研究背景和过程

妹纸开发突然发现@TableField失效了,在群里发问。一了解,发现妹纸本意是想用@TabkeField达到类似@JsonProperty的功能。也就是当实体类属性名与数据库列名不一致时,通过此注解实现别名效果。

奇怪的是,这注解一部分成功,一部分失效。具体表现就是有时候可以取到值,有时候又取不到。我点进改注解源码,发现它给value设定的本意是:当驼峰转化未开启时,使用此注解实现驼峰转化。然而,我实际测试表明它其实没这功能。

我信誓旦旦跟妹纸讲,@TableField没有别名的功能。谁知妹纸给我发了一张自动打印sql的截图。里面清清楚楚的显示,MP确实自动生成了AS别名。灵光一闪,是否是Mybatis Plus自动生成的可以别名,而自己写的sql就不行?

不验不知道,一验吓一跳。果然如此,手写的sql都不能自动生成别名,而自动生成的sql查询语句都成功转化了。至此,@TableField注解告一段落。

2 总结

2.1 别名效果 value属性

使用MP自动生成的方法时,可以用@TableField起别名

在xml写sql时,需要用as或者resultMap来转化

2.2 防止字段持久化 exist属性

使用exist属性可以控制类中属性在表中是都一定对应,如果有不存在于数据表的字段,建议都设成fasle

@TableField的作用

@TableField(exist = false)

注解加载bean属性上,表示当前属性不是数据库的字段,但在项目中必须使用,这样在使用bean的时候,mybatis-plus就会忽略这个,不会报错

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

时间: 2022-01-13

Mybatis-plus使用注解 @TableField(exist = false)

当表中午字段,但是实体类中需要这个成员变量时怎么办,可以使用mybatis-plus中@TableField(exist=false) 如下: import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomi

在MyBatisPlus中使用@TableField完成字段自动填充的操作

场景 官方文档: 字段注解 @TableField com.baomidou.mybatisplus.annotations.TableField 值 描述 value 字段值(驼峰命名方式,该值可无) update 预处理 set 字段自定义注入 condition 预处理 WHERE 实体条件自定义运算规则 el 详看注释说明 exist 是否为数据库表字段( 默认 true 存在,false 不存在 ) strategy 字段验证 ( 默认 非 null 判断,查看 com.baomido

MybatisPlus中@TableField注解的使用详解

实现 官方文档说明: com.baomidou.mybatisplus.annotations.TableField TableField注解新增属性 update 预处理 set 字段自定义注入 (讲解:比如我们使用mybatisplus自带的insert()方法向数据库插入数据时,假设我们给age字段赋值为1,但是我们在age字段上的@TableField注解里面加了update="%s+1",那么真真插入到数据库的值就是age=2,而不是age+1了) 例如: @TableFie

MyBatisPlus使用@TableField注解处理默认填充时间的问题

目录 使用@TableField注解处理默认填充时间的情况 1.利用数据库填写默认时间 2.使用自动填充默认填充插入或更新数据库时 给实体类的属性添加@TableField注解 测试 测试成功的结果状态 类型设置 使用@TableField注解处理默认填充时间的情况 在数据库的表中创建时间,修改时间!这些个操作一般都是自动化完成的,我们不希望手动更新. 阿里巴巴开发手册:所有的数据库表:gmt_create,gmt_modified几乎所有的表都要配置上!而且需要自动化! 1.利用数据库填写默认

mybatis-plus的自动填充时间的问题(添加到数据库的时间比当前时间多4个小时)

当前时间  sql语句  添加到数据库的时间 先把打印的sql语句放到数据库里面去执行 发现添加的时间是对的 不断找 2个小时终于发现问题所在了 连接数据库时时区要写对 我之前写的  useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC 纠正后   autoReconnect=true&useUnicode=true&characterEncoding=utf8&serv

关于Mybatis-Plus字段策略与数据库自动更新时间的一些问题

字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断" 问题描述: 当字段策略为 0 "忽略判断" 的时候,如果实体和数据库有字段是需要自动更新的,例如update_time,更新某条记录的时候自动刷新update_time,理论上我们在业务控制的时候是不需要设置update_time的,利用数据库特性就好,但是在该字段策略下,业务逻辑要更新字段(没有主动设置 update_time),这时候因为忽略判断,

mybatis自动填充时间字段示例代码

前言 对于实体中的created_on和updated_on来说,它没有必要被开发人员去干预,因为它已经足够说明使用场景了,即在插入数据和更新数据时,记录当前时间,这对于mybatis来说,通过拦截器是可以实现的,记得之前说过在jpa中实现的方法,主要通过jpa的注解实现的,因为今天的mybatis需要用到java的拦截器. 下面话不多说了,来一起看看详细的介绍吧 定义两个注解 @Retention(RetentionPolicy.RUNTIME) @Target( {ElementType.F

java扩展Hibernate注解支持java8新时间类型

扩展Hibernate注解@CreationTimestamp,@UpdateTimestamp支持Java8新的时间类型Hibernate version: 4.3.5.Final 复制代码 代码如下: package com.hibernate.annotation; import org.hibernate.HibernateException;import org.hibernate.tuple.AnnotationValueGeneration;import org.hibernate

mysql 设置默认的时间值

所以以 复制代码 代码如下: create_time datetime default now() 的形式设置默认值是不可能的. 代替的方案是使用TIMESTAMP类型代替DATETIME类型. CURRENT_TIMESTAMP :当我更新这条记录的时候,这条记录的这个字段不会改变. CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP :当我更新这条记录的时候,这条记录的这个字段将会改变.即时间变为了更新时候的时间.(注意一个UPDATE设置一个列为它已

ASP中Session技巧 默认过期时间为20分钟

写过稍微大型一点 ASP 的人都知道,Session 这个对象真是好用,它可以用来记录使用者私有的资料变量,既安全又方便.但是你真的知道 Session 的运作原理吗?或许了解以后,你就再也不太敢使用这个令人又爱又恨的对象.虽然转而替代之的方法稍嫌麻烦,但在长期考量之下,也就不得不这么做了 首先来讲讲 Session 的好处,它可以用来记录客户端私有的资料变量,并且在时间范围内不会消失.这真的是很重要的功能,尤其是有会员的系统必须要用到的.像是会员的登入帐号.时间.状态以及许许多多该记录的实时数

使用Mybatis-plus策略自动更新数据库时间失败问题解决

引言 在mybatis项目中,我们一般会使用它的插件plus以扩充它的基本查询功能.另一方面,在阿里巴巴开发手册的规范中也提到,在数据库表创建的时候,一般会有一个create_time和update_time字段,它们的建表语句往往如下: 'create_time' timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 'update_time' timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE C

详解Spring data 定义默认时间与日期的实例

详解Spring data 定义默认时间与日期的实例 前言: 需求是这样的: 1. 创建时间与更新时间只能由数据库产生,不允许在实体类中产生,因为每个节点的时间/时区不一定一直.另外防止人为插入自定义时间时间. 2. 插入记录的时候创建默认时间,创建时间不能为空,时间一旦插入不允许日后在实体类中修改. 3. 记录创建后更新日志字段为默认为 null 表示该记录没有被修改过.一旦数据被修改,修改日期字段将记录下最后的修改时间. 4. 甚至你可以通过触发器实现一个history 表,用来记录数据的历

android 默认时间格式修改方法

在android使用中,遇到修改默认时间格式时,总是束手无策,本文将以此问题提供解决方案,需要了解的朋友可以参考下 语言为英语时,默认的时间格式为mm/DD/yyyy,请问怎么将默认时间格式修改为:DD/mm/yyyy,不知道是在framework层给初始化的还是编译的时候给的初始值,哪位大侠知道怎么该? 1.修改文件alps\frameworks\base\packages\SettingsProvider\res\values\defaults.xml 增加代码<string name=&quo