MybatisPlus中@TableField注解的使用详解
实现
官方文档说明:
com.baomidou.mybatisplus.annotations.TableField
(讲解:比如我们使用mybatisplus自带的insert()方法向数据库插入数据时,假设我们给age字段赋值为1,但是我们在age字段上的@TableField注解里面加了update="%s+1",那么真真插入到数据库的值就是age=2,而不是age+1了)
例如:@TableField(..,update="%s+1")其中%s会填充为字段
输出SQL为:update表set字段=字段+1where...
如果给某个字段上@TableField注解里面写update=“now()”,那么最后我们使用mybatisplus自带的insert()方法向数据库插入数据时,这个字段插入到数据库中的值就为当前时间,看下面代码的sql语句即可明白
例如:@TableField(..,update="now()")使用数据库时间
输出SQL为:update表set字段=now()where...
TableField注解新增属性condition预处理WHERE实体条件自定义运算规则,下面会有代码讲解
@TableField(condition=SqlCondition.LIKE) privateStringname; 输出SQL为:select表wherenameLIKECONCAT('%',值,'%')
讲解:举个例子来说明@TableField(condition=SqlCondition.LIKE)的作用
@Data @TableName("admin_role") publicclassRoleDOextendsModel{ /** *角色ID */ @TableId(type=IdType.AUTO) privateLongid; /** *角色名称 */ @TableField(condition=SqlCondition.LIKE) privateStringname; /** *角色描述 */ privateStringdescription; /** *是否启用:0-不可用,1-可用 */ privateBooleanenabled; /** *删除标示:0-未删除,1-已删除 */ @TableLogic privateBooleandeleted; /** *创建人ID */ protectedLongcreatorId; /** *创建人 */ protectedStringcreator; /** *创建时间 */ @SuppressFBWarnings("EI_EXPOSE_REP") protectedDatedateCreated; /** *修改人ID */ protectedLongmodifierId; /** *修改人 */ protectedStringmodifier; /** *更新时间 */ @SuppressFBWarnings("EI_EXPOSE_REP") protectedDatelastModified; /**指定主键*/ @Override protectedSerializablepkVal(){ returnthis.id; } }
我们通过直接给EntityWrapper对象传入RoleDO实体类来构造EntityWrapper,,EntityWrappereWrapper=newEntityWrapper(roleDO);(代码如下)
/** *查询角色列表(分页) * *@paramroleParam角色参数 *@return查询角色分页列表 */ publicPageselectListPage(ListRoleParamroleParam){ RoleDOroleDO=newRoleDO(); BeanUtils.copyProperties(roleParam,roleDO); Page page=newPage ((int)roleParam.getPi(),(int)roleParam.getPs());//得到分页的信息 EntityWrapper eWrapper=newEntityWrapper (roleDO);//构建条件查询对象 Page roleDOList=roleDO.selectPage(page,eWrapper);//这里使用的就是Model提供的AR returnroleDOList; }
而对于name这样的字段在日常查询中往往是通过like方式来进行匹配的而非精确匹配,所以此处通过@TableField(condition=SqlCondition.LIKE)来实现动态组合查询条件,会根据前台传入的参数自动组合查询语句并进行分页。
字段填充策略FieldFill
讲解如下:
实体类中有如下属性,通过上面的自动填充属性,我们可以实现在进行插入(insert)操作时对添加了注解@TableField(fill=FieldFill.INSERT)的字段进行自动填充(解释:后面会写配置自动填充的配置类,该配置类的作用用于配置自动填充的值)。
对添加了注解@TableField(fill=FieldFill.INSERT_UPDATE)的字段在进行插入(insert)和更新(update)时进行自动填充。(解释:后面会写配置自动填充的配置类,该配置类的作用用于配置自动填充的值)。
/** *创建人 */ @TableField(fill=FieldFill.INSERT) privateLongcreatorId; /** *创建时间 */ @TableField(fill=FieldFill.INSERT) privateDategmtCreat; /** *修改人 */ @TableField(fill=FieldFill.INSERT_UPDATE) privateLongmodifierId; /** *修改时间 */ @TableField(fill=FieldFill.INSERT_UPDATE) privateDategmtModified; /** *是否可用 */ @TableField(fill=FieldFill.INSERT) privateBooleanavailableFlag;
这样我们在具体业务中对实体类进行赋值就可以不用对这些公共字段进行赋值,在执行插入或者更新时就能自动赋值并插入数据库。
那么要自动赋的值在哪里配置?
在项目的config包下新建自动填充处理类使其实现接口MetaObjectHandler,接下来我们来写自动赋值的配置类,并重写其方法:
packagecom.ws.api.config; importcom.baomidou.mybatisplus.core.handlers.MetaObjectHandler; importorg.apache.ibatis.reflection.MetaObject; importorg.springframework.stereotype.Component; importjava.util.Date; /** *自动填充处理类 *@authorbadao *@version1.0 *@see **/ @Component publicclassMyMetaObjectHandlerimplementsMetaObjectHandler{ @Override//在执行mybatisPlus的insert()时,为我们自动给某些字段填充值,这样的话,我们就不需要手动给insert()里的实体类赋值了 publicvoidinsertFill(MetaObjectmetaObject){ //其中方法参数中第一个是前面自动填充所对应的字段,第二个是要自动填充的值。第三个是指定实体类的对象 this.setFieldValByName("modifierId",newLong(111),metaObject); this.setFieldValByName("gmtModified",newDate(),metaObject); this.setFieldValByName("creatorId",newLong(111),metaObject); this.setFieldValByName("gmtCreat",newDate(),metaObject); this.setFieldValByName("availableFlag",true,metaObject); } @Override//在执行mybatisPlus的update()时,为我们自动给某些字段填充值,这样的话,我们就不需要手动给update()里的实体类赋值了 publicvoidupdateFill(MetaObjectmetaObject){ this.setFieldValByName("modifierId",newLong(111),metaObject); this.setFieldValByName("gmtModified",newDate(),metaObject); } }
到此,@TableField完成字段自动填充的内容就讲完了
接下来我们来看@TableField(exist=false)的作用
比如在实体类中有一个属性为remark,但是在数据库中没有这个字段,但是在执行插入操作时给实体类的remark属性赋值了,那么可以通过在实体类的remark属性上添加
@TableField(exist=false) privateStringremark;
就不会报错了。
到此这篇关于MybatisPlus中@TableField注解的使用详解的文章就介绍到这了,更多相关MybatisPlus@TableField注解内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。