乐观锁配合逻辑删除插件使用,测试用例补充
This commit is contained in:
@@ -100,14 +100,12 @@ public class LogicalDeletePlugin extends BasePlugin {
|
||||
|| JDBCType.BIT == type
|
||||
|| JDBCType.BOOLEAN == type
|
||||
|| JDBCType.CHAR == type
|
||||
|| JDBCType.DECIMAL == type
|
||||
|| JDBCType.DOUBLE == type
|
||||
|| JDBCType.FLOAT == type
|
||||
|| JDBCType.INTEGER == type
|
||||
|| JDBCType.LONGNVARCHAR == type
|
||||
|| JDBCType.LONGVARCHAR == type
|
||||
|| JDBCType.NCHAR == type
|
||||
|| JDBCType.NUMERIC == type
|
||||
|| JDBCType.NVARCHAR == type
|
||||
|| JDBCType.SMALLINT == type
|
||||
|| JDBCType.TINYINT == type
|
||||
@@ -271,24 +269,7 @@ public class LogicalDeletePlugin extends BasePlugin {
|
||||
// 更新逻辑删除字段
|
||||
sb.append(this.logicalDeleteColumn.getActualColumnName());
|
||||
sb.append(" = ");
|
||||
|
||||
// 判断字段类型
|
||||
JDBCType type = JDBCType.valueOf(this.logicalDeleteColumn.getJdbcType());
|
||||
if (this.logicalDeleteValue == null || "NULL".equalsIgnoreCase(this.logicalDeleteValue)) {
|
||||
sb.append("NULL");
|
||||
} else if (JDBCType.CHAR == type
|
||||
|| JDBCType.LONGNVARCHAR == type
|
||||
|| JDBCType.LONGVARCHAR == type
|
||||
|| JDBCType.NCHAR == type
|
||||
|| JDBCType.NVARCHAR == type
|
||||
|| JDBCType.VARCHAR == type
|
||||
|| JDBCType.BIGINT == type) {
|
||||
sb.append("'");
|
||||
sb.append(this.logicalDeleteValue);
|
||||
sb.append("'");
|
||||
} else {
|
||||
sb.append(this.logicalDeleteValue);
|
||||
}
|
||||
sb.append(XmlElementGeneratorTools.generateLogicalDeleteColumnValue(this.logicalDeleteColumn, this.logicalDeleteValue));
|
||||
|
||||
logicalDeleteByExample.addElement(new TextElement(sb.toString()));
|
||||
|
||||
@@ -325,24 +306,7 @@ public class LogicalDeletePlugin extends BasePlugin {
|
||||
// 更新逻辑删除字段
|
||||
sb1.append(this.logicalDeleteColumn.getActualColumnName());
|
||||
sb1.append(" = ");
|
||||
|
||||
// 判断字段类型
|
||||
JDBCType type1 = JDBCType.valueOf(this.logicalDeleteColumn.getJdbcType());
|
||||
if (this.logicalDeleteValue == null || "NULL".equalsIgnoreCase(this.logicalDeleteValue)) {
|
||||
sb1.append("NULL");
|
||||
} else if (JDBCType.CHAR == type1
|
||||
|| JDBCType.LONGNVARCHAR == type1
|
||||
|| JDBCType.LONGVARCHAR == type1
|
||||
|| JDBCType.NCHAR == type1
|
||||
|| JDBCType.NVARCHAR == type1
|
||||
|| JDBCType.VARCHAR == type1
|
||||
|| JDBCType.BIGINT == type1) {
|
||||
sb1.append("'");
|
||||
sb1.append(this.logicalDeleteValue);
|
||||
sb1.append("'");
|
||||
} else {
|
||||
sb1.append(this.logicalDeleteValue);
|
||||
}
|
||||
sb1.append(XmlElementGeneratorTools.generateLogicalDeleteColumnValue(this.logicalDeleteColumn, this.logicalDeleteValue));
|
||||
|
||||
logicalDeleteByPrimaryKey.addElement(new TextElement(sb1.toString()));
|
||||
|
||||
@@ -401,10 +365,10 @@ public class LogicalDeletePlugin extends BasePlugin {
|
||||
XmlElement chooseEle = new XmlElement("choose");
|
||||
XmlElement whenEle = new XmlElement("when");
|
||||
whenEle.addAttribute(new Attribute("test", PARAMETER_LOGICAL_DELETED));
|
||||
whenEle.addElement(new TextElement("'" + this.logicalDeleteValue + "'"));
|
||||
whenEle.addElement(new TextElement(XmlElementGeneratorTools.generateLogicalDeleteColumnValue(this.logicalDeleteColumn, this.logicalDeleteValue)));
|
||||
chooseEle.addElement(whenEle);
|
||||
XmlElement otherwiseEle = new XmlElement("otherwise");
|
||||
otherwiseEle.addElement(new TextElement("'" + this.logicalUnDeleteValue + "'"));
|
||||
otherwiseEle.addElement(new TextElement(XmlElementGeneratorTools.generateLogicalDeleteColumnValue(this.logicalDeleteColumn, this.logicalUnDeleteValue)));
|
||||
chooseEle.addElement(otherwiseEle);
|
||||
selectByPrimaryKey.addElement(chooseEle);
|
||||
|
||||
|
||||
@@ -29,7 +29,6 @@ import org.mybatis.generator.codegen.mybatis3.MyBatis3FormattingUtilities;
|
||||
import org.mybatis.generator.internal.util.JavaBeansUtil;
|
||||
import org.mybatis.generator.internal.util.StringUtility;
|
||||
|
||||
import java.sql.JDBCType;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
@@ -822,23 +821,7 @@ public class OptimisticLockerPlugin extends BasePlugin implements IModelBuilderP
|
||||
// 逻辑删除 set
|
||||
sb.append(logicalDeleteColumn.getActualColumnName());
|
||||
sb.append(" = ");
|
||||
// 判断字段类型
|
||||
JDBCType type = JDBCType.valueOf(logicalDeleteColumn.getJdbcType());
|
||||
if (logicalDeleteValue == null || "NULL".equalsIgnoreCase(logicalDeleteValue)) {
|
||||
sb.append("NULL");
|
||||
} else if (JDBCType.CHAR == type
|
||||
|| JDBCType.LONGNVARCHAR == type
|
||||
|| JDBCType.LONGVARCHAR == type
|
||||
|| JDBCType.NCHAR == type
|
||||
|| JDBCType.NVARCHAR == type
|
||||
|| JDBCType.VARCHAR == type
|
||||
|| JDBCType.BIGINT == type) {
|
||||
sb.append("'");
|
||||
sb.append(logicalDeleteValue);
|
||||
sb.append("'");
|
||||
} else {
|
||||
sb.append(logicalDeleteValue);
|
||||
}
|
||||
sb.append(XmlElementGeneratorTools.generateLogicalDeleteColumnValue(logicalDeleteColumn, logicalDeleteValue));
|
||||
updateEle.addElement(new TextElement(sb.toString()));
|
||||
|
||||
// 更新条件
|
||||
|
||||
@@ -557,4 +557,29 @@ public class XmlElementGeneratorTools {
|
||||
}
|
||||
return resultElement;
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成逻辑删除列的删除值
|
||||
* @param logicalDeleteColumn
|
||||
* @param value
|
||||
* @return
|
||||
*/
|
||||
public static String generateLogicalDeleteColumnValue(IntrospectedColumn logicalDeleteColumn, String value) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
// 判断字段类型
|
||||
if (value == null || "NULL".equalsIgnoreCase(value)) {
|
||||
sb.append("NULL");
|
||||
} else if (logicalDeleteColumn.isStringColumn()) {
|
||||
sb.append("'");
|
||||
sb.append(value);
|
||||
sb.append("'");
|
||||
} else if (logicalDeleteColumn.getFullyQualifiedJavaType().getFullyQualifiedName().equals(Long.class.getName())){
|
||||
sb.append(value.replaceAll("L|l", ""));
|
||||
} else if (logicalDeleteColumn.getFullyQualifiedJavaType().getFullyQualifiedName().equals(Float.class.getName())){
|
||||
sb.append(value.replaceAll("F|f", ""));
|
||||
} else {
|
||||
sb.append(value);
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -344,6 +344,7 @@ public class OptimisticLockerPluginTest {
|
||||
tool.generate(() -> DBHelper.resetDB("scripts/OptimisticLockerPlugin/init.sql"), new AbstractShellCallback() {
|
||||
@Override
|
||||
public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception {
|
||||
// ---------------------------------------- logicalDeleteWithVersionByExample ---------------------------------------
|
||||
ObjectUtil tbMapper = new ObjectUtil(sqlSession.getMapper(loader.loadClass(packagz + ".TbMapper")));
|
||||
|
||||
ObjectUtil tbExample = new ObjectUtil(loader, packagz + ".TbExample");
|
||||
@@ -352,7 +353,7 @@ public class OptimisticLockerPluginTest {
|
||||
|
||||
// 验证sql
|
||||
String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), OptimisticLockerPlugin.METHOD_LOGICAL_DELETE_WITH_VERSION_BY_EXAMPLE, 0L, tbExample.getObject());
|
||||
Assert.assertEquals(sql, "update tb set inc_f1 = inc_f1 + 1,inc_f2 = '9L' WHERE inc_f1 = 0 and ( ( id = '1' ) )");
|
||||
Assert.assertEquals(sql, "update tb set inc_f1 = inc_f1 + 1,inc_f2 = 9 WHERE inc_f1 = 0 and ( ( id = '1' ) )");
|
||||
// 验证执行
|
||||
Object result = tbMapper.invoke(OptimisticLockerPlugin.METHOD_LOGICAL_DELETE_WITH_VERSION_BY_EXAMPLE, 0L, tbExample.getObject());
|
||||
Assert.assertEquals(result, 1);
|
||||
@@ -360,15 +361,71 @@ public class OptimisticLockerPluginTest {
|
||||
rs.first();
|
||||
Assert.assertEquals(rs.getInt("inc_f1"), 1);
|
||||
Assert.assertEquals(rs.getInt("inc_f2"), 9);
|
||||
|
||||
// ---------------------------------------- logicalDeleteWithVersionByPrimaryKey ---------------------------------------
|
||||
// 验证sql
|
||||
sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), OptimisticLockerPlugin.METHOD_LOGICAL_DELETE_WITH_VERSION_BY_PRIMARY_KEY, 1L, 2L);
|
||||
Assert.assertEquals(sql, "update tb set inc_f1 = inc_f1 + 1,inc_f2 = 9 where inc_f1 = 1 and id = 2");
|
||||
// 验证执行
|
||||
result = tbMapper.invoke(OptimisticLockerPlugin.METHOD_LOGICAL_DELETE_WITH_VERSION_BY_PRIMARY_KEY, 1L, 2L);
|
||||
Assert.assertEquals(result, 1);
|
||||
rs = DBHelper.execute(sqlSession.getConnection(), "select * from tb where id = 2");
|
||||
rs.first();
|
||||
Assert.assertEquals(rs.getInt("inc_f1"), 2);
|
||||
Assert.assertEquals(rs.getInt("inc_f2"), 9);
|
||||
}
|
||||
});
|
||||
|
||||
// 自定义nextVersion
|
||||
tool = MyBatisGeneratorTool.create("scripts/OptimisticLockerPlugin/mybatis-generator-with-LogicalDeletePlugin-customizedNextVersion.xml");
|
||||
|
||||
tool.generate(() -> DBHelper.resetDB("scripts/OptimisticLockerPlugin/init.sql"), new AbstractShellCallback() {
|
||||
@Override
|
||||
public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception {
|
||||
// ---------------------------------------- logicalDeleteWithVersionByExample ---------------------------------------
|
||||
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("andIdEqualTo", 1L);
|
||||
|
||||
// 验证sql
|
||||
String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), OptimisticLockerPlugin.METHOD_LOGICAL_DELETE_WITH_VERSION_BY_EXAMPLE, 0L, 100L, tbExample.getObject());
|
||||
Assert.assertEquals(sql, "update tb set inc_f1 = 100,inc_f2 = 9 WHERE inc_f1 = 0 and ( ( id = '1' ) )");
|
||||
// 验证执行
|
||||
Object result = tbMapper.invoke(OptimisticLockerPlugin.METHOD_LOGICAL_DELETE_WITH_VERSION_BY_EXAMPLE, 0L, 100L, tbExample.getObject());
|
||||
Assert.assertEquals(result, 1);
|
||||
ResultSet rs = DBHelper.execute(sqlSession.getConnection(), "select * from tb where id = 1");
|
||||
rs.first();
|
||||
Assert.assertEquals(rs.getInt("inc_f1"), 100);
|
||||
Assert.assertEquals(rs.getInt("inc_f2"), 9);
|
||||
|
||||
// ---------------------------------------- logicalDeleteWithVersionByPrimaryKey ---------------------------------------
|
||||
// 验证sql
|
||||
sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), OptimisticLockerPlugin.METHOD_LOGICAL_DELETE_WITH_VERSION_BY_PRIMARY_KEY, 1L, 200L, 2L);
|
||||
Assert.assertEquals(sql, "update tb set inc_f1 = 200,inc_f2 = 9 where inc_f1 = 1 and id = 2");
|
||||
// 验证执行
|
||||
result = tbMapper.invoke(OptimisticLockerPlugin.METHOD_LOGICAL_DELETE_WITH_VERSION_BY_PRIMARY_KEY, 1L, 200L, 2L);
|
||||
Assert.assertEquals(result, 1);
|
||||
rs = DBHelper.execute(sqlSession.getConnection(), "select * from tb where id = 2");
|
||||
rs.first();
|
||||
Assert.assertEquals(rs.getInt("inc_f1"), 200);
|
||||
Assert.assertEquals(rs.getInt("inc_f2"), 9);
|
||||
|
||||
// ------------------------------------ Key -----------------------------------
|
||||
ObjectUtil tbKeysMapper = new ObjectUtil(sqlSession.getMapper(loader.loadClass(packagz + ".TbKeysMapper")));
|
||||
ObjectUtil tbKeysKey = new ObjectUtil(loader, packagz + ".TbKeysKey");
|
||||
tbKeysKey.set("key1", 2L);
|
||||
tbKeysKey.set("key2", "k2");
|
||||
|
||||
sql = SqlHelper.getFormatMapperSql(tbKeysMapper.getObject(), OptimisticLockerPlugin.METHOD_LOGICAL_DELETE_WITH_VERSION_BY_PRIMARY_KEY, 3L, 200L, tbKeysKey.getObject());
|
||||
Assert.assertEquals(sql, "update tb_keys set inc_f1 = 200,inc_f2 = 9 where inc_f1 = 3 and key1 = 2 and key2 = 'k2'");
|
||||
// 验证执行
|
||||
result = tbKeysMapper.invoke(OptimisticLockerPlugin.METHOD_LOGICAL_DELETE_WITH_VERSION_BY_PRIMARY_KEY, 3L, 200L, tbKeysKey.getObject());
|
||||
Assert.assertEquals(result, 1);
|
||||
rs = DBHelper.execute(sqlSession.getConnection(), "select * from tb_keys where key1 = 2 and key2 = 'k2'");
|
||||
rs.first();
|
||||
Assert.assertEquals(rs.getInt("inc_f1"), 200);
|
||||
Assert.assertEquals(rs.getInt("inc_f2"), 9);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
+1
-1
@@ -64,7 +64,7 @@
|
||||
<table tableName="tb_keys">
|
||||
<property name="versionColumn" value="inc_f1"/>
|
||||
<property name="logicalDeleteColumn" value="inc_f2"/>
|
||||
|
||||
|
||||
<property name="customizedNextVersion" value="true"/>
|
||||
</table>
|
||||
</context>
|
||||
|
||||
Reference in New Issue
Block a user