精华内容
下载资源
问答
  • 2021-10-27 14:02:00

    @TableField(exist = false) 注解加载bean属性上,表示当前属性不是数据库的字段,但在项目中必须使用,这样在新增等使用bean的时候,mybatis-plus就会忽略这个,不会报错。 否则会报找不到该字段的异常。

    如下↓

    Error querying database. Cause: java.sql.SQLSyntaxErrorException: Unknown column ‘xxxxxxxx’ in ‘field list’

    使用:在实体类上加上@TableField(exist = false)就OK了

    @TableField(exist = false)
    private Integer projectNum;
    
    更多相关内容
  • 主要介绍了MybatisPlus中@TableField注解的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • @TableField注解使用

    千次阅读 2022-03-10 11:28:33
    @TableField注解使用

    • 使用
    • 描述:字段注解(非主键)

     

    属性类型必须指定默认值描述
    valueString""数据库字段名
    existbooleantrue是否为数据库表字段
    conditionString""字段 where 实体查询比较条件,有值设置则按设置的值为准,没有则为默认全局的 %s=#{%s}参考(opens new window)
    updateString""字段 update set 部分注入,例如:当在version字段上注解update="%s+1" 表示更新时会 set version=version+1 (该属性优先级高于 el 属性)
    insertStrategyEnumFieldStrategy.DEFAULT举例:NOT_NULL
    insert into table_a(<if test="columnProperty != null">column</if>) values (<if test="columnProperty != null">#{columnProperty}</if>)
    updateStrategyEnumFieldStrategy.DEFAULT举例:IGNORED
    update table_a set column=#{columnProperty}
    whereStrategyEnumFieldStrategy.DEFAULT举例:NOT_EMPTY
    where <if test="columnProperty != null and columnProperty!=''">column=#{columnProperty}</if>
    fillEnumFieldFill.DEFAULT字段自动填充策略
    selectbooleantrue是否进行 select 查询
    keepGlobalFormatbooleanfalse是否保持使用全局的 format 进行处理
    jdbcTypeJdbcTypeJdbcType.UNDEFINEDJDBC 类型 (该默认值不代表会按照该值生效)
    typeHandlerClass<? extends TypeHandler>UnknownTypeHandler.class类型处理器 (该默认值不代表会按照该值生效)
    numericScaleString""指定小数点后保留的位数

    展开全文
  • MybatisPlus中@TableField注解的使用

    万次阅读 多人点赞 2019-09-30 14:51:29
    实现 官方文档说明: ... TableField 注解新增属性 ...(讲解:比如我们使用mybatisplus自带的insert()方法向数据库插入数据时,假设我们给age字段赋值为1,但是我们在age字段上的@TableField注解里面加了update="%s...

    实现

    官方文档说明:

    • com.baomidou.mybatisplus.annotations.TableField
      在这里插入图片描述
    • TableField 注解新增属性 update 预处理 set 字段自定义注入
      (讲解:比如我们使用mybatisplus自带的insert()方法向数据库插入数据时,假设我们给age字段赋值为1,但是我们在age字段上的@TableField注解里面加了update="%s+1",那么真真插入到数据库的值就是age=2,而不是age+1了)
    例如:@TableField(.. , update="%s+1") 其中 %s 会填充为字段
    输出 SQL 为:update 表 set 字段=字段+1 where ...
    

    如果给某个字段上@TableField注解里面写update=“now()”,那么最后我们使用mybatisplus自带的insert()方法向数据库插入数据时,这个字段插入到数据库中的值就为当前时间,看下面代码的sql语句即可明白

    例如:@TableField(.. , update="now()") 使用数据库时间
    输出 SQL 为:update 表 set 字段=now() where ...
    
    • TableField 注解新增属性 condition 预处理 WHERE 实体条件自定义运算规则,下面会有代码讲解
    @TableField(condition = SqlCondition.LIKE)
    private String name;
    输出 SQL 为:select 表 where name LIKE CONCAT('%',,'%')
    

    讲解:举个例子来说明@TableField(condition = SqlCondition.LIKE)的作用

    @Data
    @TableName("admin_role")
    public class RoleDO  extends Model<RoleDO> {
     
        /**
         * 角色ID
         */
        @TableId(type = IdType.AUTO)
        private Long id;
     
        /**
         * 角色名称
         */
        @TableField(condition = SqlCondition.LIKE)
        private String name;
     
        /**
         * 角色描述
         */
        private String description;
     
        /**
         * 是否启用:0-不可用,1-可用
         */
        private Boolean enabled;
     
        /**
         * 删除标示:0-未删除,1-已删除
         */
        @TableLogic
        private Boolean deleted;
     
        /**
         * 创建人ID
         */
        protected Long creatorId;
     
        /**
         * 创建人
         */
        protected String creator;
     
        /**
         * 创建时间
         */
        @SuppressFBWarnings("EI_EXPOSE_REP")
        protected Date dateCreated;
     
        /**
         * 修改人ID
         */
        protected Long modifierId;
     
        /**
         * 修改人
         */
        protected String modifier;
     
        /**
         * 更新时间
         */
        @SuppressFBWarnings("EI_EXPOSE_REP")
        protected Date lastModified;
     
        /** 指定主键 */
        @Override
        protected Serializable pkVal() {
            return this.id;
        }
    }
    

    我们通过直接给EntityWrapper对象传入RoleDO实体类来构造EntityWrapper,, EntityWrapper eWrapper = new EntityWrapper(roleDO); (代码如下)

    /**
         * 查询角色列表(分页)
         *
         * @param roleParam 角色参数
         * @return 查询角色分页列表
         */
        public Page<RoleDO> selectListPage(ListRoleParam roleParam) {
            RoleDO roleDO = new RoleDO();
            BeanUtils.copyProperties(roleParam, roleDO);
            Page<RoleDO> page = new Page<RoleDO>((int)roleParam.getPi(), (int)roleParam.getPs()); //得到分页的信息
            EntityWrapper<RoleDO> eWrapper = new EntityWrapper<RoleDO>(roleDO);//构建条件查询对象
            Page<RoleDO> roleDOList = roleDO.selectPage(page, eWrapper);//这里使用的就是Model提供的AR
            return roleDOList;
        }
    

    而对于name这样的字段在日常查询中往往是通过like方式来进行匹配的而非精确匹配,所以此处通过@TableField(condition = SqlCondition.LIKE)来实现动态组合查询条件,会根据前台传入的参数自动组合查询语句并进行分页。

    • 字段填充策略 FieldFill
      在这里插入图片描述
      讲解如下:

    实体类中有如下属性,通过上面的自动填充属性,我们可以实现在进行插入(insert)操作时对添加了注解@TableField(fill = FieldFill.INSERT)的字段进行自动填充(解释:后面会写配置自动填充的配置类,该配置类的作用用于配置自动填充的值)。

    对添加了注解@TableField(fill = FieldFill.INSERT_UPDATE)的字段在进行插入(insert)和更新(update)时进行自动填充。(解释:后面会写配置自动填充的配置类,该配置类的作用用于配置自动填充的值)。

     /**
         * 创建人
         */
        @TableField(fill = FieldFill.INSERT)
        private Long creatorId;
     
        /**
         * 创建时间
         */
        @TableField(fill = FieldFill.INSERT)
        private Date gmtCreat;
     
        /**
         * 修改人
         */
        @TableField(fill = FieldFill.INSERT_UPDATE)
        private Long modifierId;
     
        /**
         * 修改时间
         */
        @TableField(fill = FieldFill.INSERT_UPDATE)
        private Date gmtModified;
     
        /**
         * 是否可用
         */
        @TableField(fill = FieldFill.INSERT)
        private Boolean availableFlag;
    

    这样我们在具体业务中对实体类进行赋值就可以不用对这些公共字段进行赋值,在执行插入或者更新时就能自动赋值并插入数据库。

    那么要自动赋的值在哪里配置?
    在项目的config包下新建自动填充处理类使其实现接口MetaObjectHandler,接下来我们来写自动赋值的配置类,并重写其方法:

    package com.ws.api.config;
     
    import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
    import org.apache.ibatis.reflection.MetaObject;
    import org.springframework.stereotype.Component;
     
    import java.util.Date;
     
    /**
     * 自动填充处理类
     * @author badao
     * @version 1.0
     * @see
     **/
    @Component
    public class MyMetaObjectHandler implements MetaObjectHandler {
     
     
        @Override    //在执行mybatisPlus的insert()时,为我们自动给某些字段填充值,这样的话,我们就不需要手动给insert()里的实体类赋值了
        public void insertFill(MetaObject metaObject) {
        //其中方法参数中第一个是前面自动填充所对应的字段,第二个是要自动填充的值。第三个是指定实体类的对象
            this.setFieldValByName("modifierId", new Long(111), metaObject);
            this.setFieldValByName("gmtModified", new Date(), metaObject);
            this.setFieldValByName("creatorId", new Long(111), metaObject);
            this.setFieldValByName("gmtCreat",new Date(), metaObject);
            this.setFieldValByName("availableFlag",true, metaObject);
          
     
        }
     
        @Override//在执行mybatisPlus的update()时,为我们自动给某些字段填充值,这样的话,我们就不需要手动给update()里的实体类赋值了
        public void updateFill(MetaObject metaObject) {
            this.setFieldValByName("modifierId", new Long(111), metaObject);
            this.setFieldValByName("gmtModified", new Date(), metaObject);
        }
    }
    

    到此,@TableField完成字段自动填充的内容就讲完了

    接下来我们来看@TableField(exist=false)的作用

    比如在实体类中有一个属性为remark,但是在数据库中没有这个字段,但是在执行插入操作时给实体类的remark属性赋值了,那么可以通过在实体类的remark属性上添加

    @TableField(exist=false)
     private String remark;
    

    就不会报错了。

    在这里插入图片描述

    接下来的一段时间,我会专注Java技术栈,计算机网络,数据结构和算法,操作系统,设计模式,计算机组成原理,数据库原理,设计模式来做分享,欢迎你们和我一起学习,一起提高,Fighting!

    本文转载自:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/89425635

    展开全文
  • @TableId 作用:用于设置id的生成策略,即设置id是如何生成的 package com.baomidou.mybatisplus.annotation; import lombok.Getter; /** * 生成ID类型枚举类 * * @author hubin * @since 2015-11-10 */ @Getter...

    @TableId

    作用:用于设置id的生成策略,即设置id是如何生成的

    package com.baomidou.mybatisplus.annotation;
    import lombok.Getter;
    /**
    * 生成ID类型枚举类 
    *
    * @author hubin 
    * @since 2015-11-10 
    */ 
    @Getter 
    public enum IdType {
    	/**
    	* 数据库ID自增 
    	*/ 
    	AUTO(0), 
    	/**
    	* 该类型为未设置主键类型 
    	*/ 
    	NONE(1), 
    	/**
    	* 用户输入ID 
    	* <p>该类型可以通过自己注册自动填充插件进行填充</p> 
    	*/ 
    	INPUT(2),
    	 /* 以下3种类型、只有当插入对象ID 为空,才自动填充。 */ 
    	 /**
    	 * 全局唯一ID (idWorker) 
    	 */ 
    	 ID_WORKER(3), 
    	 /**
    	 * 全局唯一ID (UUID) 
    	 */ 
    	 UUID(4),
    	 /**
    	 * 字符串全局唯一ID (idWorker 的字符串表示) 
    	 */ 
    	 ID_WORKER_STR(5); 
    	 
    	 private final int key; 
    	 
    	 IdType(int key) { 
    	 	this.key = key;
    	 } 
    } 
    

    用法举例:

    @Data 
    @NoArgsConstructor
    @AllArgsConstructor 
    @TableName("tb_user") 
    public class User { 
    	@TableId(type = IdType.AUTO) //指定id类型为自增长 
    	private Long id; 
    	private String userName; 
    	private String password; 
    	private String name; 
    	private Integer age; 
    	private String email; 
    } 
    

    @TableField

    在MP中通过@TableField注解可以指定字段的一些属性,常常解决的问题有两个:
    1.对象中的属性名和表中的字段名不一致(非驼峰)
    2.对象中的属性字段在表中不存在

    用法举例:

    @Data
    @NoArgsConstructor
    @AllArgsConstructor 
    @TableName("tb_user")
    public class User{
    	private Integer id;
    	private String userName;
    
    	@TableField(select = false)//不希望password出现在查询结果中
    	private String passWord;
    	
    	private String name;
    	private Integer age;
    
    	@TableField(value = "email")//解决字段名不一致
    	private String mail;
    
    	@TableField(exist = false)//指明该属性在数据库表的字段中不存在
    	private String address;
    }
    
    展开全文
  • @TableId:它对应的是将数据的主键进行映射,在调用mybatis-plus中的...@TableField:映射数据库中的其他普通字段,其注解中有一个属性exist,如果将其设置为false,则默认这个属性不经过数据库字段的映射。 ...
  • 问题 在实体类中给某个属性加上了@TableField注解,也实现了MetaObjectHandler,但是仍然不能自动填充 解决方案 可能是没有把MetaObjectHandler的实现类添加到spring容器中,把如图的注解加上就好了
  • 背景: 在做一个SpringBoot2+MybatisPlus3项目时,要求数据库中有个更新时间(UPDATE_DATE)字段,在插入和更新数据时,字段自动插入/更新为当前时间;在网上搜了很多方法,发现...@TableField(value = "UPDATE_DAT...
  • @JsonInclude注解与@TableField注解的使用

    千次阅读 2020-12-19 21:01:54
    在前后分离项目中 返回JSON 数据中 因为有分级情况的存在 对应的级层中 使数据如果它为空的时候 我不需要这个字段的返回 但是它不为空的时候 我要用得到 这个注解就完美的解决了这个问题·· ···· @JsonInclude...
  • 什么是反射?反射如何使用? 参考链接:深入学习java源码之Class.forName()与 ...解决办法为:通过参数名获取对应字段上@TableField注解里的value值则对应为数据库字段 首先在接收实体定义好统一接收参数: @ApiM
  • 在执行update操作or insert操作时,想把某个字段属性设置为NULL,在@TableField的源码中默认是NOT NULL,所以为空的时候是set不进去值的,想要把为""或NULL的属性set进去,需要做如下修改: ```bash @TableField...
  • 最近遇到一个mybatis plus的问题,@TableField注解不生效,导致查出来的字段反序列化后为空 数据库表结构: CREATE TABLE `client_role` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键', `name` ...
  • @TableField 注解 填充策略主要是告诉他我啥时候开始填充, 1。在实体类加上@TableField 注解, //字段插入自动填充 @TableField(fill = FieldFill.INSERT) private Date createTime; //字段更新自动填充 @TableField...
  • 如果给某个字段上@TableField注解里面写update=“now()”,那么最后我们使用mybatisplus自带的insert()方法向数据库插入数据时,这个字段插入到数据库中的值就为当前时间,看下面代码的sql语句即可明白 例如:@...
  • 解决Mybatis版本过低@TableField注解无法使用typeHandler属性
  • 文章目录MyBatisPlus中使用@TableField注解处理默认填充时间的情况1.利用数据库填写默认时间2.使用自动填充默认填充插入或更新数据库时表中牵涉到的时间编写处理器类给实体类的属性添加@TableField注解测试测试成功...
  • 主要讲解@TableName / @TableField / @TableId 注解在实际工作中的使用。
  • } } @TableField注解完成自动填充赋值使用 案例: package com.jt.pojo; import java.io.Serializable; import java.util.Date; import com.baomidou.mybatisplus.annotation.FieldFill; import ...
  • 必须在实体里面加上 @TableName(autoResultMap = true),不然无效只要在对应字段加上注解就可以:@TableName(autoResultMap = true)public class BlogUser implements Serializable {private static final long ...
  • @TableField(exist = false)注释用法

    千次阅读 2021-06-04 11:00:32
    @TableField(exist = false) 注解加载bean属性上,表示当前属性不是数据库的字段,但在项目中必须使用,这样在新增等使用bean的时候,mybatis-plus就会忽略这个,不会报错
  • @TableField condition属性

    2022-06-04 16:10:59
    @TableField(condition = SqlCondition.LIKE) private String name; } 关于类SqlCondition,里面还定义了其他比较模式,可自行查看 使用queryMapper,调用setEntity方法封装查询条件 @Test public void test(){ ...
  • mybatisplus默认开启驼峰命名,所以一般不需要使用@TableField注解,但是我在项目中就算加上了该注解,在日志中的select语句中也显示是departmentId。 原因分析 根据参考文档默认情况下Mybatis-Plus会根据@...
  • 1、此类中的isFill方法没有判断是否有注解再进行entity默认值赋值 2、咱们重写该方法,实现只有在有 fill = FieldFill.INSERT跟fill = FieldFill.INSERT_UPDATE注解的时候再进行赋值;
  • @TableField fill

    千次阅读 2021-08-06 17:32:03
    https://mp.baomidou.com/guide/annotation.html#tablefield FieldFill 默认值是:FieldFill.DEFAULT 值 描述 DEFAULT 默认不处理 INSERT 插入时填充字段 UPDATE 更新时填充字段 INSERT_...
  • @TableField(value = "create_date",fill = FieldFill.INSERT) private LocalDateTime createDate; @TableField(value = "update_date",fill = FieldFill.UPDATE) private LocalDateTime updateDate; } 四、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 56,739
精华内容 22,695
关键字:

tablefield注解

友情链接: huayangliushuideng.zip