今天遇到了一个问题,至今未找到原因(只好换了一种方式解决问题先)
本人使用的mybatis-plus 版本是2.0.7
很多人都碰到过这个问题,使用mybatis-plus时,更新操作时,默认情况下如果字段为null是不会进行修改的
查询了网上的一些解决办法,
【第一种方法】:全局配置方式
在MyBatis-Plus配置文件中修改field-strategy字段验证的值为0,即忽略判断。
但是这样做会对所有的字段都忽略判断,如果一些字段不想要修改,但是传值的时候没有传递过来,就会被更新为null,这个不是我想要的(因此不考虑这个)
【第二种方法】:对需要的字段的验证策略进行修改
选用的这种方式
由于使用的mybatis-plus版本是2.0.7 , TableField注解中并没有strategy,对字段进行验证使用的是validate
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import com.baomidou.mybatisplus.enums.FieldStrategy;
/**
* <p>
* 表字段标识
* </p>
*
* @author hubin sjy
* @since 2016-09-09
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface TableField {
/**
* <p>
* 字段值(驼峰命名方式,该值可无)
* </p>
*/
String value() default "";
/**
* <p>
* 当该Field为类对象时, 可使用#{对象.属性}来映射到数据表.
* </p>
* <p>
* 支持:@TableField(el = "role, jdbcType=BIGINT)<br>
* 支持:@TableField(el = "role, typeHandler=com.baomidou.xx.typehandler.PhoneTypeHandler")
* </p>
*/
String el() default "";
/**
* <p>
* 是否为数据库表字段
* </p>
* <p>
* 默认 true 存在,false 不存在
* </p>
*/
boolean exist() default true;
/**
* <p>
* 字段验证
* </p>
* <p>
* 默认 非 null 判断
* </p>
*/
FieldStrategy validate() default FieldStrategy.NOT_NULL;
}
因此对字段进行验证的写法为
@TableField(value = "product_code", validate =FieldStrategy.IGNORED)
private String productCode;
/**
* <p>
* 字段策略枚举类
* </p>
*
* @author hubin
* @Date 2016-09-09
*/
public enum FieldStrategy {
IGNORED(0, "ignored"), NOT_NULL(1, "not null"), NOT_EMPTY(2, "not empty");
遗留问题
其实之前就已经使用过这种方式来进行操作了,并且是有效果的。但是今天这样写,却发现有问题。
当新增数据的时候,字段对应的值并没有被写入到数据库中。查询数据该字段返回值为null, 修改的时候是可以成功的。
尝试了半天仍然没有找到问题所在。
有遇到过此问题的同学可以交流下。