diff --git a/pom.xml b/pom.xml
index 67752d0..7567d8c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -85,6 +85,11 @@
2.4.0
test
+
+ commons-beanutils
+ commons-beanutils
+ 1.9.3
+
diff --git a/src/main/java/com/itfsw/mybatis/generator/plugins/ModelColumnPlugin.java b/src/main/java/com/itfsw/mybatis/generator/plugins/ModelColumnPlugin.java
index 23dd271..eb8c67d 100644
--- a/src/main/java/com/itfsw/mybatis/generator/plugins/ModelColumnPlugin.java
+++ b/src/main/java/com/itfsw/mybatis/generator/plugins/ModelColumnPlugin.java
@@ -34,6 +34,7 @@ import org.mybatis.generator.internal.util.JavaBeansUtil;
*/
public class ModelColumnPlugin extends BasePlugin {
public static final String ENUM_NAME = "Column"; // 内部Enum名
+ public static final String METHOD_EXCLUDES = "excludes"; // 方法名
/**
* Model Methods 生成
@@ -174,6 +175,28 @@ public class ModelColumnPlugin extends BasePlugin {
FormatTools.addMethodWithBestPosition(innerEnum, asc);
logger.debug("itfsw(数据Model属性对应Column获取插件):" + topLevelClass.getType().getShortName() + ".Column增加asc()和desc()方法。");
+ // excludes
+ topLevelClass.addImportedType("java.util.Arrays");
+ topLevelClass.addImportedType(FullyQualifiedJavaType.getNewArrayListInstance());
+ Method mExcludes = JavaElementGeneratorTools.generateMethod(
+ METHOD_EXCLUDES,
+ JavaVisibility.PUBLIC,
+ new FullyQualifiedJavaType(ENUM_NAME + "[]"),
+ new Parameter(innerEnum.getType(), "excludes", true)
+ );
+ commentGenerator.addGeneralMethodComment(mExcludes, introspectedTable);
+ mExcludes.setStatic(true);
+ JavaElementGeneratorTools.generateMethodBody(
+ mExcludes,
+ "ArrayList columns = new ArrayList<>(Arrays.asList(Column.values()));",
+ "if (excludes != null && excludes.length > 0) {",
+ "columns.removeAll(new ArrayList<>(Arrays.asList(excludes)));",
+ "}",
+ "return columns.toArray(new Column[]{});"
+ );
+ FormatTools.addMethodWithBestPosition(innerEnum, mExcludes);
+ logger.debug("itfsw(数据Model属性对应Column获取插件):" + topLevelClass.getType().getShortName() + ".Column增加excludes方法。");
+
return innerEnum;
}
}
diff --git a/src/test/java/com/itfsw/mybatis/generator/plugins/ModelColumnPluginTest.java b/src/test/java/com/itfsw/mybatis/generator/plugins/ModelColumnPluginTest.java
index b3e3ef7..80215ce 100644
--- a/src/test/java/com/itfsw/mybatis/generator/plugins/ModelColumnPluginTest.java
+++ b/src/test/java/com/itfsw/mybatis/generator/plugins/ModelColumnPluginTest.java
@@ -16,16 +16,15 @@
package com.itfsw.mybatis.generator.plugins;
-import com.itfsw.mybatis.generator.plugins.tools.AbstractShellCallback;
-import com.itfsw.mybatis.generator.plugins.tools.DBHelper;
-import com.itfsw.mybatis.generator.plugins.tools.MyBatisGeneratorTool;
-import com.itfsw.mybatis.generator.plugins.tools.ObjectUtil;
+import com.itfsw.mybatis.generator.plugins.tools.*;
+import org.apache.commons.beanutils.MethodUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import java.io.IOException;
+import java.lang.reflect.Array;
import java.sql.SQLException;
/**
@@ -41,7 +40,7 @@ public class ModelColumnPluginTest {
* 初始化数据库
*/
@BeforeClass
- public static void init() throws SQLException, IOException, ClassNotFoundException {
+ public static void init() throws SQLException, IOException {
DBHelper.createDB("scripts/ModelColumnPlugin/init.sql");
}
@@ -49,7 +48,7 @@ public class ModelColumnPluginTest {
* 测试生成的model
*/
@Test
- public void test() throws Exception {
+ public void testModel() throws Exception {
MyBatisGeneratorTool tool = MyBatisGeneratorTool.create("scripts/ModelColumnPlugin/mybatis-generator.xml");
tool.generate(new AbstractShellCallback() {
@Override
@@ -78,6 +77,63 @@ public class ModelColumnPluginTest {
Assert.assertEquals(TbKeysColumnKey1.invoke("value"), "key_1");
ObjectUtil TbKeysColumnField1 = new ObjectUtil(loader, packagz + ".TbKeys$Column#field1");
Assert.assertEquals(TbKeysColumnField1.invoke("value"), "field_1");
+
+ // 5. excludes 方法
+ // 不排除
+ Object columns = Array.newInstance(TbColumnField1.getCls(), 0);
+ Object[] result = (Object[])(MethodUtils.invokeStaticMethod(Class.forName(packagz + ".Tb$Column"), "excludes", columns));
+ Assert.assertEquals(result.length, 5);
+ // 排除两个
+ columns = Array.newInstance(TbColumnField1.getCls(), 2);
+ Array.set(columns, 0, TbColumnField1.getObject());
+ Array.set(columns, 1, TbColumnTsIncF2.getObject());
+ result = (Object[])(MethodUtils.invokeStaticMethod(Class.forName(packagz + ".Tb$Column"), "excludes", columns));
+ Assert.assertEquals(result.length, 3);
+ for (Object obj : result){
+ ObjectUtil column = new ObjectUtil(obj);
+ if (column.invoke("value").equals("field_1") || column.invoke("value").equals("inc_f2")){
+ Assert.assertTrue(false);
+ }
+ }
+ }
+ });
+ }
+
+ /**
+ * 测试excludes
+ */
+ @Test
+ public void testExcludes() throws Exception {
+ MyBatisGeneratorTool tool = MyBatisGeneratorTool.create("scripts/ModelColumnPlugin/mybatis-generator-with-SeleciveEnhancedPlugin.xml");
+ tool.generate(new AbstractShellCallback() {
+ @Override
+ public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception {
+ ObjectUtil tbMapper = new ObjectUtil(sqlSession.getMapper(loader.loadClass(packagz + ".TbMapper")));
+
+ ObjectUtil tb = new ObjectUtil(loader, packagz + ".Tb");
+ tb.set("id", 121L);
+ tb.set("incF3", 10L);
+ tb.set("tsIncF2", 5L);
+ // selective
+ ObjectUtil TbColumnId = new ObjectUtil(loader, packagz + ".Tb$Column#id");
+ ObjectUtil TbColumnField1 = new ObjectUtil(loader, packagz + ".Tb$Column#field1");
+ ObjectUtil TbColumnTsIncF2 = new ObjectUtil(loader, packagz + ".Tb$Column#tsIncF2");
+ Object columns = Array.newInstance(TbColumnField1.getCls(), 3);
+ Array.set(columns, 0, TbColumnId.getObject());
+ Array.set(columns, 1, TbColumnField1.getObject());
+ Array.set(columns, 2, TbColumnTsIncF2.getObject());
+
+ // sql(指定列)
+ String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "insertSelective", tb.getObject(), columns);
+ Assert.assertEquals(sql, "insert into tb ( id , field_1 , inc_f2 ) values ( 121 , 'null' , 5 )");
+
+ // sql(排除列)
+ columns = MethodUtils.invokeStaticMethod(Class.forName(packagz + ".Tb$Column"), "excludes", columns);
+ sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "insertSelective", tb.getObject(), columns);
+ Assert.assertEquals(sql, "insert into tb ( inc_f1 , inc_f3 ) values ( null , 10 )");
+
+ Object result = tbMapper.invoke("insertSelective", tb.getObject(), columns);
+ Assert.assertEquals(result, 1);
}
});
}
diff --git a/src/test/resources/scripts/ModelColumnPlugin/init.sql b/src/test/resources/scripts/ModelColumnPlugin/init.sql
index 9941f78..e698dc3 100644
--- a/src/test/resources/scripts/ModelColumnPlugin/init.sql
+++ b/src/test/resources/scripts/ModelColumnPlugin/init.sql
@@ -20,11 +20,11 @@ SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
DROP TABLE IF EXISTS `tb`;
CREATE TABLE `tb` (
- `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '注释1',
- `field_1` varchar(255) DEFAULT NULL COMMENT '注释2',
- `inc_f1` bigint(20) NOT NULL DEFAULT '0',
- `inc_f2` bigint(20) NOT NULL DEFAULT '0',
- `inc_f3` bigint(20) NOT NULL DEFAULT '0',
+ `id` bigint(20) AUTO_INCREMENT COMMENT '注释1',
+ `field_1` varchar(255) COMMENT '注释2',
+ `inc_f1` bigint(20) DEFAULT '0',
+ `inc_f2` bigint(20) DEFAULT '0',
+ `inc_f3` bigint(20) DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
diff --git a/src/test/resources/scripts/ModelColumnPlugin/mybatis-generator-with-SeleciveEnhancedPlugin.xml b/src/test/resources/scripts/ModelColumnPlugin/mybatis-generator-with-SeleciveEnhancedPlugin.xml
new file mode 100644
index 0000000..0b5d5df
--- /dev/null
+++ b/src/test/resources/scripts/ModelColumnPlugin/mybatis-generator-with-SeleciveEnhancedPlugin.xml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file