瀏覽代碼

现在字段验证策略

= 8 年之前
父節點
當前提交
57cecb10b3

+ 2 - 4
mybatis-plus/src/main/java/com/baomidou/mybatisplus/annotations/FieldStrategy.java

@@ -21,12 +21,10 @@ package com.baomidou.mybatisplus.annotations;
  * </p>
  * </p>
  * 
  * 
  * @author hubin
  * @author hubin
- * @Date 2015-11-10
+ * @Date 2016-09-09
  */
  */
 public enum FieldStrategy {
 public enum FieldStrategy {
-	IGNORED(0, "忽略"),
-	NOT_NULL(1, "非 null"),
-	NOT_EMPTY(1, "非空");
+	IGNORED(0, "ignored"), NOT_NULL(1, "not null"), NOT_EMPTY(2, "not empty");
 
 
 	/** 主键 */
 	/** 主键 */
 	private final int key;
 	private final int key;

+ 1 - 1
mybatis-plus/src/main/java/com/baomidou/mybatisplus/annotations/TableField.java

@@ -64,6 +64,6 @@ public @interface TableField {
 	 * 默认 非 null 判断
 	 * 默认 非 null 判断
 	 * </p>
 	 * </p>
 	 */
 	 */
-	FieldStrategy validate() default FieldStrategy.NOT_EMPTY;
+	FieldStrategy validate() default FieldStrategy.NOT_NULL;
 
 
 }
 }

+ 54 - 12
mybatis-plus/src/main/java/com/baomidou/mybatisplus/mapper/AutoSqlInjector.java

@@ -34,6 +34,7 @@ import org.apache.ibatis.scripting.defaults.RawSqlSource;
 import org.apache.ibatis.session.Configuration;
 import org.apache.ibatis.session.Configuration;
 
 
 import com.baomidou.mybatisplus.MybatisConfiguration;
 import com.baomidou.mybatisplus.MybatisConfiguration;
+import com.baomidou.mybatisplus.annotations.FieldStrategy;
 import com.baomidou.mybatisplus.annotations.IdType;
 import com.baomidou.mybatisplus.annotations.IdType;
 import com.baomidou.mybatisplus.toolkit.TableFieldInfo;
 import com.baomidou.mybatisplus.toolkit.TableFieldInfo;
 import com.baomidou.mybatisplus.toolkit.TableInfo;
 import com.baomidou.mybatisplus.toolkit.TableInfo;
@@ -174,14 +175,14 @@ public class AutoSqlInjector implements ISqlInjector {
 		List<TableFieldInfo> fieldList = table.getFieldList();
 		List<TableFieldInfo> fieldList = table.getFieldList();
 		for (TableFieldInfo fieldInfo : fieldList) {
 		for (TableFieldInfo fieldInfo : fieldList) {
 			if (selective) {
 			if (selective) {
-				fieldBuilder.append("\n\t<if test=\"").append(fieldInfo.getProperty()).append("!=null\">");
-				placeholderBuilder.append("\n\t<if test=\"").append(fieldInfo.getProperty()).append("!=null\">");
+				fieldBuilder.append(convertIfTag(fieldInfo, false));
+				placeholderBuilder.append(convertIfTag(fieldInfo, false));
 			}
 			}
 			fieldBuilder.append(fieldInfo.getColumn()).append(",");
 			fieldBuilder.append(fieldInfo.getColumn()).append(",");
 			placeholderBuilder.append("#{").append(fieldInfo.getEl()).append("},");
 			placeholderBuilder.append("#{").append(fieldInfo.getEl()).append("},");
 			if (selective) {
 			if (selective) {
-				fieldBuilder.append("</if>");
-				placeholderBuilder.append("</if>");
+				fieldBuilder.append(convertIfTag(fieldInfo, true));
+				placeholderBuilder.append(convertIfTag(fieldInfo, true));
 			}
 			}
 		}
 		}
 		fieldBuilder.append("\n</trim>");
 		fieldBuilder.append("\n</trim>");
@@ -346,10 +347,10 @@ public class AutoSqlInjector implements ISqlInjector {
 				set.append("\n<trim prefix=\"").append(fieldInfo.getColumn()).append("=CASE ");
 				set.append("\n<trim prefix=\"").append(fieldInfo.getColumn()).append("=CASE ");
 				set.append(table.getKeyColumn()).append("\" suffix=\"END,\">");
 				set.append(table.getKeyColumn()).append("\" suffix=\"END,\">");
 				set.append("\n<foreach collection=\"list\" item=\"i\" index=\"index\">");
 				set.append("\n<foreach collection=\"list\" item=\"i\" index=\"index\">");
-				set.append("\n<if test=\"i.").append(fieldInfo.getProperty()).append("!=null\">");
+				set.append(convertIfTag(fieldInfo, "i.", false));
 				set.append("\nWHEN ").append("#{i.").append(table.getKeyProperty());
 				set.append("\nWHEN ").append("#{i.").append(table.getKeyProperty());
 				set.append("} THEN #{i.").append(fieldInfo.getEl()).append("}");
 				set.append("} THEN #{i.").append(fieldInfo.getEl()).append("}");
-				set.append("\n</if>");
+				set.append(convertIfTag(fieldInfo, true));
 				set.append("\n</foreach>");
 				set.append("\n</foreach>");
 				set.append("\n</trim>");			
 				set.append("\n</trim>");			
 			}
 			}
@@ -478,9 +479,9 @@ public class AutoSqlInjector implements ISqlInjector {
 		where.append("\n</if>");
 		where.append("\n</if>");
 		List<TableFieldInfo> fieldList = table.getFieldList();
 		List<TableFieldInfo> fieldList = table.getFieldList();
 		for (TableFieldInfo fieldInfo : fieldList) {
 		for (TableFieldInfo fieldInfo : fieldList) {
-			where.append("\n<if test=\"ew.entity.").append(fieldInfo.getProperty()).append("!=null\">\n");
+			where.append(convertIfTag(fieldInfo, "ew.entity.", false));
 			where.append(" AND ").append(fieldInfo.getColumn()).append("=#{ew.entity.").append(fieldInfo.getEl()).append("}");
 			where.append(" AND ").append(fieldInfo.getColumn()).append("=#{ew.entity.").append(fieldInfo.getEl()).append("}");
-			where.append("\n</if>");
+			where.append(convertIfTag(fieldInfo, true));
 		}
 		}
 		where.append("\n</where>\n</if>");
 		where.append("\n</where>\n</if>");
 		where.append("\n<if test=\"ew.sqlSegment!=null\">\n${ew.sqlSegment}\n</if>");
 		where.append("\n<if test=\"ew.sqlSegment!=null\">\n${ew.sqlSegment}\n</if>");
@@ -506,11 +507,11 @@ public class AutoSqlInjector implements ISqlInjector {
 		List<TableFieldInfo> fieldList = table.getFieldList();
 		List<TableFieldInfo> fieldList = table.getFieldList();
 		for ( TableFieldInfo fieldInfo : fieldList ) {
 		for ( TableFieldInfo fieldInfo : fieldList ) {
 			if ( selective ) {
 			if ( selective ) {
-				set.append("\n<if test=\"et.").append(fieldInfo.getProperty()).append("!=null\">\n");
+				set.append(convertIfTag(fieldInfo, "et.", false));
 			}
 			}
 			set.append(fieldInfo.getColumn()).append("=#{et.").append(fieldInfo.getEl()).append("},");
 			set.append(fieldInfo.getColumn()).append("=#{et.").append(fieldInfo.getEl()).append("},");
 			if ( selective ) {
 			if ( selective ) {
-				set.append("\n</if>");
+				set.append(convertIfTag(fieldInfo, true));
 			}
 			}
 		}
 		}
 		set.append("\n</trim>");
 		set.append("\n</trim>");
@@ -591,9 +592,9 @@ public class AutoSqlInjector implements ISqlInjector {
 		where.append("\n</if>");
 		where.append("\n</if>");
 		List<TableFieldInfo> fieldList = table.getFieldList();
 		List<TableFieldInfo> fieldList = table.getFieldList();
 		for (TableFieldInfo fieldInfo : fieldList) {
 		for (TableFieldInfo fieldInfo : fieldList) {
-			where.append("\n<if test=\"ew.").append(fieldInfo.getProperty()).append("!=null\">\n");
+			where.append(convertIfTag(fieldInfo, "ew.", false));
 			where.append(" AND ").append(fieldInfo.getColumn()).append("=#{ew.").append(fieldInfo.getEl()).append("}");
 			where.append(" AND ").append(fieldInfo.getColumn()).append("=#{ew.").append(fieldInfo.getEl()).append("}");
-			where.append("\n</if>");
+			where.append(convertIfTag(fieldInfo, true));
 		}
 		}
 		where.append("\n</where>");
 		where.append("\n</where>");
 		if ( space ) {
 		if ( space ) {
@@ -615,6 +616,47 @@ public class AutoSqlInjector implements ISqlInjector {
 		return where.toString();
 		return where.toString();
 	}
 	}
 
 
+	/**
+	 * <p>
+	 * IF 条件转换方法
+	 * </p>
+	 * 
+	 * @param fieldInfo
+	 * 				字段信息
+	 * @param prefix
+	 * 				条件前缀
+	 * @param colse
+	 * 				是否闭合标签
+	 * @return
+	 */
+	protected String convertIfTag(TableFieldInfo fieldInfo, String prefix, boolean colse) {
+		/* 前缀处理 */
+		String property = fieldInfo.getProperty();
+		if (null != prefix) {
+			property = prefix + property;
+		}
+
+		/* 判断策略 */
+		if (fieldInfo.getFieldStrategy() == FieldStrategy.NOT_NULL) {
+			if (colse) {
+				return "</if>";
+			} else {
+				return String.format("\n\t<if test=\"%s!=null\">", property);
+			}
+		} else if (fieldInfo.getFieldStrategy() == FieldStrategy.NOT_EMPTY) {
+			if (colse) {
+				return "</if>";
+			} else {
+				return String.format("\n\t<if test=\"%s!=null and %s!=''\">", property, property);
+			}
+		}
+		return "";
+	}
+	
+	protected String convertIfTag(TableFieldInfo fieldInfo, boolean colse) {
+		return convertIfTag(fieldInfo, null, colse);
+	}
+
 	/*
 	/*
 	 * 查询
 	 * 查询
 	 */
 	 */

+ 4 - 3
mybatis-plus/src/main/java/com/baomidou/mybatisplus/toolkit/TableFieldInfo.java

@@ -51,15 +51,16 @@ public class TableFieldInfo {
 	private String el;
 	private String el;
 
 
 	/**
 	/**
-	 * 字段策略
+	 * 字段策略【 默认,自判断 null 】
 	 */
 	 */
-	private FieldStrategy fieldStrategy;
+	private FieldStrategy fieldStrategy = FieldStrategy.NOT_NULL;
 
 
-	public TableFieldInfo(boolean related, String column, String property, String el) {
+	public TableFieldInfo(boolean related, String column, String property, String el, FieldStrategy fieldStrategy) {
 		this.related = related;
 		this.related = related;
 		this.setColumn(column);
 		this.setColumn(column);
 		this.property = property;
 		this.property = property;
 		this.el = el;
 		this.el = el;
+		this.fieldStrategy = fieldStrategy;
 	}
 	}
 
 
 	public TableFieldInfo(boolean related, String column, String property) {
 	public TableFieldInfo(boolean related, String column, String property) {

+ 1 - 1
mybatis-plus/src/main/java/com/baomidou/mybatisplus/toolkit/TableInfoHelper.java

@@ -133,7 +133,7 @@ public class TableInfoHelper {
 				String[] els = el.split(";");
 				String[] els = el.split(";");
 				if (null != columns && null != els && columns.length == els.length) {
 				if (null != columns && null != els && columns.length == els.length) {
 					for (int i = 0; i < columns.length; i++) {
 					for (int i = 0; i < columns.length; i++) {
-						fieldList.add(new TableFieldInfo(true, columns[i], field.getName(), els[i]));
+						fieldList.add(new TableFieldInfo(true, columns[i], field.getName(), els[i], tableField.validate()));
 					}
 					}
 				} else {
 				} else {
 					String errorMsg = "Class: %s, Field: %s, 'value' 'el' Length must be consistent.";
 					String errorMsg = "Class: %s, Field: %s, 'value' 'el' Length must be consistent.";

+ 2 - 2
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/mysql/UserMapperTest.java

@@ -138,8 +138,8 @@ public class UserMapperTest {
         System.err.println("\n--------------insert-------" + rlt);
         System.err.println("\n--------------insert-------" + rlt);
         sleep();
         sleep();
 
 
-        rlt = userMapper.insertSelective(new User("abc", 18));
-        System.err.println("\n--------------insertSelective-------" + rlt);
+        rlt = userMapper.insertSelective(new User(18));
+        System.err.println("\n----------测试 name 字段忽略验证----insertSelective-------" + rlt);
         sleep();
         sleep();
 
 
         List<User> ul = new ArrayList<User>();
         List<User> ul = new ArrayList<User>();

+ 3 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/mysql/entity/User.java

@@ -18,6 +18,7 @@ package com.baomidou.mybatisplus.test.mysql.entity;
 import java.io.Serializable;
 import java.io.Serializable;
 import java.lang.reflect.Field;
 import java.lang.reflect.Field;
 
 
+import com.baomidou.mybatisplus.annotations.FieldStrategy;
 import com.baomidou.mybatisplus.annotations.TableField;
 import com.baomidou.mybatisplus.annotations.TableField;
 import com.baomidou.mybatisplus.annotations.TableId;
 import com.baomidou.mybatisplus.annotations.TableId;
 import com.baomidou.mybatisplus.annotations.TableName;
 import com.baomidou.mybatisplus.annotations.TableName;
@@ -42,6 +43,8 @@ public class User implements Serializable {
 	@TableId(value = "test_id")
 	@TableId(value = "test_id")
 	private Long id;
 	private Long id;
 
 
+	/* 测试忽略验证 */
+	@TableField(validate = FieldStrategy.IGNORED)
 	private String name;
 	private String name;
 
 
 	private Integer age;
 	private Integer age;