写了一个简单的for mybatis的jsr303 代码生成插件,用于配置在mybatis 的代码生成配置参数文件中,代码如下:
package com.shinowit.mybatis.plugin;
import java.sql.Types;
import java.util.List;
import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.PluginAdapter;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.api.dom.java.TopLevelClass;
public class JSR303Plugin extends PluginAdapter {
@Override
public boolean validate(List<String> warnings) {
return true;
}
@Override
public boolean modelFieldGenerated(Field field,
TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn,
IntrospectedTable introspectedTable, ModelClassType modelClassType) {
if (false==introspectedColumn.isNullable()){
if (false==introspectedColumn.isIdentity()){
topLevelClass.addImportedType("javax.validation.constraints.NotNull");
field.addAnnotation("@NotNull");
}
}
if (true==introspectedColumn.isStringColumn()){
topLevelClass.addImportedType("javax.validation.constraints.Size");
field.addAnnotation("@Size(min = 0, max = "+introspectedColumn.getLength()+" , message = \"长度必须在{min}和{max}之间\")");
}
if (introspectedColumn.getJdbcType()==Types.INTEGER){
topLevelClass.addImportedType("javax.validation.constraints.Max");
field.addAnnotation("@Max(value=2147483647,message=\"最大值不能高于{value}\")");
topLevelClass.addImportedType("javax.validation.constraints.Min");
field.addAnnotation("@Min(value=-2147483648,message=\"最小值不能低于{value}\")");
}
return super.modelFieldGenerated(field, topLevelClass, introspectedColumn,
introspectedTable, modelClassType);
}
}
有兴趣的可以继续写对byte类型,short类型的取值大小验证