Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mybatis-generator-plugin
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
mybatis-generator-plugin
Commits
8922abde
Commit
8922abde
authored
Oct 31, 2018
by
hewei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
乐观锁配合逻辑删除插件使用,测试用例补充
parent
9724ff57
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
90 additions
and
61 deletions
+90
-61
src/main/java/com/itfsw/mybatis/generator/plugins/LogicalDeletePlugin.java
.../itfsw/mybatis/generator/plugins/LogicalDeletePlugin.java
+4
-40
src/main/java/com/itfsw/mybatis/generator/plugins/OptimisticLockerPlugin.java
...fsw/mybatis/generator/plugins/OptimisticLockerPlugin.java
+1
-18
src/main/java/com/itfsw/mybatis/generator/plugins/utils/XmlElementGeneratorTools.java
...tis/generator/plugins/utils/XmlElementGeneratorTools.java
+25
-0
src/test/java/com/itfsw/mybatis/generator/plugins/OptimisticLockerPluginTest.java
...mybatis/generator/plugins/OptimisticLockerPluginTest.java
+59
-2
src/test/resources/scripts/OptimisticLockerPlugin/mybatis-generator-with-LogicalDeletePlugin-customizedNextVersion.xml
...erator-with-LogicalDeletePlugin-customizedNextVersion.xml
+1
-1
No files found.
src/main/java/com/itfsw/mybatis/generator/plugins/LogicalDeletePlugin.java
View file @
8922abde
...
...
@@ -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
);
...
...
src/main/java/com/itfsw/mybatis/generator/plugins/OptimisticLockerPlugin.java
View file @
8922abde
...
...
@@ -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
()));
// 更新条件
...
...
src/main/java/com/itfsw/mybatis/generator/plugins/utils/XmlElementGeneratorTools.java
View file @
8922abde
...
...
@@ -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
();
}
}
src/test/java/com/itfsw/mybatis/generator/plugins/OptimisticLockerPluginTest.java
View file @
8922abde
...
...
@@ -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
);
}
});
}
...
...
src/test/resources/scripts/OptimisticLockerPlugin/mybatis-generator-with-LogicalDeletePlugin-customizedNextVersion.xml
View file @
8922abde
...
...
@@ -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>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment