Commit df27bb11 authored by hewei's avatar hewei

测试用例完善:logicalDeletePlugin

parent d0afad6f
...@@ -50,16 +50,12 @@ public class DBHelperTest { ...@@ -50,16 +50,12 @@ public class DBHelperTest {
Class.forName(driver); Class.forName(driver);
Connection connection = DriverManager.getConnection(url, username, password); Connection connection = DriverManager.getConnection(url, username, password);
Statement statement = connection.createStatement();
// 执行查询 // 执行查询
statement.execute("SELECT COUNT(*) as total FROM tb"); ResultSet resultSet = DBHelper.execute(connection, "SELECT COUNT(*) as total FROM tb");
ResultSet resultSet = statement.getResultSet();
resultSet.first(); resultSet.first();
Assert.assertEquals(resultSet.getInt("total"), 4); Assert.assertEquals(resultSet.getInt("total"), 4);
statement.close();
connection.close(); connection.close();
} }
} }
...@@ -23,7 +23,6 @@ import org.junit.BeforeClass; ...@@ -23,7 +23,6 @@ import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.util.List; import java.util.List;
...@@ -118,9 +117,7 @@ public class IncrementsPluginTest { ...@@ -118,9 +117,7 @@ public class IncrementsPluginTest {
// inc_f1 增加100 // inc_f1 增加100
Object result = tbMapper.invoke("updateByExampleSelective", tbBuilder.invoke("build"), tbExample.getObject()); Object result = tbMapper.invoke("updateByExampleSelective", tbBuilder.invoke("build"), tbExample.getObject());
Assert.assertEquals(result, 1); Assert.assertEquals(result, 1);
PreparedStatement preparedStatement = sqlSession.getConnection().prepareStatement("select inc_f1 from tb where id = 3"); ResultSet rs = DBHelper.execute(sqlSession.getConnection(), "select inc_f1 from tb where id = 3");
preparedStatement.execute();
ResultSet rs = preparedStatement.getResultSet();
rs.first(); rs.first();
Assert.assertEquals(rs.getInt("inc_f1"), 103); Assert.assertEquals(rs.getInt("inc_f1"), 103);
...@@ -130,9 +127,7 @@ public class IncrementsPluginTest { ...@@ -130,9 +127,7 @@ public class IncrementsPluginTest {
result = tbMapper.invoke("updateByExampleSelective", tbBuilder.invoke("build"), tbExample.getObject()); result = tbMapper.invoke("updateByExampleSelective", tbBuilder.invoke("build"), tbExample.getObject());
Assert.assertEquals(result, 1); Assert.assertEquals(result, 1);
// 验证执行结果 // 验证执行结果
preparedStatement = sqlSession.getConnection().prepareStatement("select inc_f1 from tb where id = 3"); rs = DBHelper.execute(sqlSession.getConnection(), "select inc_f1 from tb where id = 3");
preparedStatement.execute();
rs = preparedStatement.getResultSet();
rs.first(); rs.first();
Assert.assertEquals(rs.getInt("inc_f1"), 53); Assert.assertEquals(rs.getInt("inc_f1"), 53);
...@@ -157,9 +152,7 @@ public class IncrementsPluginTest { ...@@ -157,9 +152,7 @@ public class IncrementsPluginTest {
result = tbKeysMapper.invoke("updateByPrimaryKeySelective", tbKeysBuilder.invoke("build")); result = tbKeysMapper.invoke("updateByPrimaryKeySelective", tbKeysBuilder.invoke("build"));
Assert.assertEquals(result, 1); Assert.assertEquals(result, 1);
// 验证执行结果 // 验证执行结果
preparedStatement = sqlSession.getConnection().prepareStatement("select inc_f1, inc_f3 from tb_keys where key1 = 1 and key2 = 'k1'"); rs = DBHelper.execute(sqlSession.getConnection(), "select inc_f1, inc_f3 from tb_keys where key1 = 1 and key2 = 'k1'");
preparedStatement.execute();
rs = preparedStatement.getResultSet();
rs.first(); rs.first();
Assert.assertEquals(rs.getInt("inc_f1"), 11); Assert.assertEquals(rs.getInt("inc_f1"), 11);
Assert.assertEquals(rs.getInt("inc_f3"), 33); Assert.assertEquals(rs.getInt("inc_f3"), 33);
......
...@@ -25,7 +25,9 @@ import org.mybatis.generator.exception.InvalidConfigurationException; ...@@ -25,7 +25,9 @@ import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException; import org.mybatis.generator.exception.XMLParserException;
import java.io.IOException; import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.List;
/** /**
* --------------------------------------------------------------------------- * ---------------------------------------------------------------------------
...@@ -83,8 +85,66 @@ public class LogicalDeletePluginTest { ...@@ -83,8 +85,66 @@ public class LogicalDeletePluginTest {
ObjectUtil criteria = new ObjectUtil(tbExample.invoke("createCriteria")); ObjectUtil criteria = new ObjectUtil(tbExample.invoke("createCriteria"));
criteria.invoke("andIdEqualTo", 1l); criteria.invoke("andIdEqualTo", 1l);
// 验证sql
String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "logicalDeleteByExample", tbExample.getObject()); String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "logicalDeleteByExample", tbExample.getObject());
tbMapper.invoke("logicalDeleteByExample", tbExample.getObject()); Assert.assertEquals(sql, "update tb set del_flag = 1 WHERE ( id = '1' )");
// 验证执行
Object result = tbMapper.invoke("logicalDeleteByExample", tbExample.getObject());
Assert.assertEquals(result, 1);
ResultSet rs = DBHelper.execute(sqlSession.getConnection(), "select del_flag from tb where id = 1");
rs.first();
Assert.assertEquals(rs.getInt("del_flag"), 1);
}
});
}
/**
* 测试 logicalDeleteByPrimaryKey
*/
@Test
public void testLogicalDeleteByPrimaryKey() throws IOException, XMLParserException, InvalidConfigurationException, InterruptedException, SQLException {
MyBatisGeneratorTool tool = MyBatisGeneratorTool.create("scripts/LogicalDeletePlugin/mybatis-generator.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")));
// 验证sql
String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "logicalDeleteByPrimaryKey", 2l);
Assert.assertEquals(sql, "update tb set del_flag = 1 where id = 2");
// 验证执行
Object result = tbMapper.invoke("logicalDeleteByPrimaryKey", 2l);
Assert.assertEquals(result, 1);
ResultSet rs = DBHelper.execute(sqlSession.getConnection(), "select del_flag from tb where id = 2");
rs.first();
Assert.assertEquals(rs.getInt("del_flag"), 1);
}
});
}
/**
* 测试关联生成的方法和常量
*/
@Test
public void testOtherMethods() throws IOException, XMLParserException, InvalidConfigurationException, InterruptedException, SQLException {
MyBatisGeneratorTool tool = MyBatisGeneratorTool.create("scripts/LogicalDeletePlugin/mybatis-generator.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 tbExample = new ObjectUtil(loader, packagz + ".TbExample");
ObjectUtil criteria = new ObjectUtil(tbExample.invoke("createCriteria"));
criteria.invoke("andDeleted", true);
criteria.invoke("andIdEqualTo", 3l);
// 验证sql
String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "selectByExample", tbExample.getObject());
Assert.assertEquals(sql, "select id, del_flag, ts_1, ts_3, ts_4 from tb WHERE ( del_flag = '1' and id = '3' )");
// 验证执行
Object result = tbMapper.invoke("selectByExample", tbExample.getObject());
Assert.assertEquals(((List)result).size(), 1);
} }
}); });
} }
......
...@@ -22,10 +22,7 @@ import java.io.BufferedReader; ...@@ -22,10 +22,7 @@ import java.io.BufferedReader;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.sql.Connection; import java.sql.*;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties; import java.util.Properties;
/** /**
...@@ -90,4 +87,19 @@ public class DBHelper { ...@@ -90,4 +87,19 @@ public class DBHelper {
connection.close(); connection.close();
} }
/**
* 执行sql
*
* @param connection
* @param sql
* @return
* @throws SQLException
*/
public static ResultSet execute(Connection connection, String sql) throws SQLException {
Statement statement = connection.createStatement();
statement.execute(sql);
ResultSet resultSet = statement.getResultSet();
return resultSet;
}
} }
...@@ -41,17 +41,17 @@ public class ObjectUtil { ...@@ -41,17 +41,17 @@ public class ObjectUtil {
* @param cls * @param cls
*/ */
public ObjectUtil(ClassLoader loader, String cls) throws ClassNotFoundException, IllegalAccessException, InstantiationException { public ObjectUtil(ClassLoader loader, String cls) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
if (cls.indexOf("#") == -1){ if (cls.indexOf("#") == -1) {
this.cls = loader.loadClass(cls); this.cls = loader.loadClass(cls);
this.object = this.cls.newInstance(); this.object = this.cls.newInstance();
} else { } else {
String[] strs = cls.split("#"); String[] strs = cls.split("#");
this.cls = loader.loadClass(strs[0]); this.cls = loader.loadClass(strs[0]);
if (this.cls.isEnum()){ if (this.cls.isEnum()) {
Object[] constants = this.cls.getEnumConstants(); Object[] constants = this.cls.getEnumConstants();
for (Object object : constants){ for (Object object : constants) {
ObjectUtil eObject = new ObjectUtil(object); ObjectUtil eObject = new ObjectUtil(object);
if (strs[1].equals(eObject.get("name"))){ if (strs[1].equals(eObject.get("name"))) {
this.object = object; this.object = object;
break; break;
} }
...@@ -89,7 +89,6 @@ public class ObjectUtil { ...@@ -89,7 +89,6 @@ public class ObjectUtil {
/** /**
* 获取值 * 获取值
*
* @param filedName * @param filedName
* @return * @return
* @throws IllegalAccessException * @throws IllegalAccessException
...@@ -128,10 +127,21 @@ public class ObjectUtil { ...@@ -128,10 +127,21 @@ public class ObjectUtil {
// 暂时只检查前几位相同就假设为可变参数 // 暂时只检查前几位相同就假设为可变参数
int check = args.length > 0 ? (args[args.length - 1] instanceof Array ? args.length - 1 : args.length) : 0; int check = args.length > 0 ? (args[args.length - 1] instanceof Array ? args.length - 1 : args.length) : 0;
for (int i = 0; i < check; i++) { for (int i = 0; i < check; i++) {
if (!(parameterTypes[i].isAssignableFrom(args[i].getClass()))) { Class parameterType = parameterTypes[i];
if (!(parameterType.isAssignableFrom(args[i].getClass()))) {
flag = false;
}
// 基础类型
if (parameterType.isPrimitive()) {
switch (parameterType.getTypeName()) {
case "boolean":
flag = args[i] instanceof Boolean;
break;
default:
flag = false; flag = false;
} }
} }
}
if (flag) { if (flag) {
return method.invoke(this.object, args); return method.invoke(this.object, args);
...@@ -143,16 +153,15 @@ public class ObjectUtil { ...@@ -143,16 +153,15 @@ public class ObjectUtil {
/** /**
* 获取指定名称的方法 * 获取指定名称的方法
*
* @param name * @param name
* @return * @return
*/ */
public List<Method> getMethods(String name){ public List<Method> getMethods(String name) {
List<Method> list = new ArrayList<>(); List<Method> list = new ArrayList<>();
Class clazz = this.cls; Class clazz = this.cls;
for (; clazz != Object.class; clazz = clazz.getSuperclass()){ for (; clazz != Object.class; clazz = clazz.getSuperclass()) {
for (Method method : clazz.getDeclaredMethods()){ for (Method method : clazz.getDeclaredMethods()) {
if (method.getName().equals(name)){ if (method.getName().equals(name)) {
list.add(method); list.add(method);
} }
} }
...@@ -171,16 +180,15 @@ public class ObjectUtil { ...@@ -171,16 +180,15 @@ public class ObjectUtil {
/** /**
* 递归获取所有属性 * 递归获取所有属性
*
* @param name * @param name
* @return * @return
*/ */
private Field getDeclaredField(String name) { private Field getDeclaredField(String name) {
Class<?> clazz = this.cls; Class<?> clazz = this.cls;
for(; clazz != Object.class ; clazz = clazz.getSuperclass()) { for (; clazz != Object.class; clazz = clazz.getSuperclass()) {
try { try {
return clazz.getDeclaredField(name); return clazz.getDeclaredField(name);
} catch (NoSuchFieldException e){ } catch (NoSuchFieldException e) {
// 不能操作,递归父类 // 不能操作,递归父类
} }
} }
......
...@@ -126,11 +126,10 @@ public class SqlHelper { ...@@ -126,11 +126,10 @@ public class SqlHelper {
params.put(paramName, i >= args.length ? null : args[i]); params.put(paramName, i >= args.length ? null : args[i]);
} }
} }
if (args != null && args.length == 1) { if (useParameter(method, args)) {
return getNamespaceSql(session, fullMapperMethodName, args[0]); return getNamespaceSql(session, fullMapperMethodName, args[0]);
} else {
return getNamespaceSql(session, fullMapperMethodName, params);
} }
return getNamespaceSql(session, fullMapperMethodName, params);
} }
...@@ -152,7 +151,6 @@ public class SqlHelper { ...@@ -152,7 +151,6 @@ public class SqlHelper {
* @return * @return
*/ */
public static String getNamespaceSql(SqlSession session, String namespace, Object params) { public static String getNamespaceSql(SqlSession session, String namespace, Object params) {
params = wrapCollection(params);
Configuration configuration = session.getConfiguration(); Configuration configuration = session.getConfiguration();
MappedStatement mappedStatement = configuration.getMappedStatement(namespace); MappedStatement mappedStatement = configuration.getMappedStatement(namespace);
TypeHandlerRegistry typeHandlerRegistry = mappedStatement.getConfiguration().getTypeHandlerRegistry(); TypeHandlerRegistry typeHandlerRegistry = mappedStatement.getConfiguration().getTypeHandlerRegistry();
...@@ -266,21 +264,21 @@ public class SqlHelper { ...@@ -266,21 +264,21 @@ public class SqlHelper {
} }
/** /**
* 简单包装参数 * 只有一个参数且没有使用注解
* @param object * @param method
* @param args
* @return * @return
*/ */
private static Object wrapCollection(final Object object) { private static boolean useParameter(Method method, Object... args){
if (object instanceof List) { if (args != null && args.length == 1){
Map<String, Object> map = new HashMap<String, Object>(); final Object[] paramAnnos = method.getParameterAnnotations()[0];
map.put("list", object); for (Object paramAnno : paramAnnos) {
return map; if (paramAnno instanceof Param) {
} else if (object != null && object.getClass().isArray()) { return false;
Map<String, Object> map = new HashMap<String, Object>();
map.put("array", object);
return map;
} }
return object;
} }
return true;
}
return false;
}
} }
...@@ -34,12 +34,7 @@ ...@@ -34,12 +34,7 @@
<!-- Model模型生成器,用来生成含有主键key的类,记录类 以及查询Example类 <!-- Model模型生成器,用来生成含有主键key的类,记录类 以及查询Example类
targetPackage 指定生成的model生成所在的包名 targetPackage 指定生成的model生成所在的包名
targetProject 指定在该项目下所在的路径 --> targetProject 指定在该项目下所在的路径 -->
<javaModelGenerator targetPackage="" targetProject=""> <javaModelGenerator targetPackage="" targetProject=""/>
<!-- 是否对model添加 构造函数 -->
<property name="constructorBased" value="true"/>
<!-- 给Model添加一个父类 -->
<!--<property name="rootClass" value="com.itfsw.base"/>-->
</javaModelGenerator>
<!--Mapper映射文件生成所在的目录 为每一个数据库的表生成对应的SqlMap文件 --> <!--Mapper映射文件生成所在的目录 为每一个数据库的表生成对应的SqlMap文件 -->
<sqlMapGenerator targetPackage="" targetProject="" /> <sqlMapGenerator targetPackage="" targetProject="" />
<!-- 客户端代码,生成易于使用的针对Model对象和XML配置文件 的代码 <!-- 客户端代码,生成易于使用的针对Model对象和XML配置文件 的代码
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment