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
319b64ff
Commit
319b64ff
authored
Jul 31, 2017
by
hewei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
UpsertPlugin 插件重构
parent
8e56ee0d
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
142 additions
and
238 deletions
+142
-238
src/main/java/com/itfsw/mybatis/generator/plugins/SelectiveEnhancedPlugin.java
...sw/mybatis/generator/plugins/SelectiveEnhancedPlugin.java
+0
-19
src/main/java/com/itfsw/mybatis/generator/plugins/UpsertPlugin.java
...ava/com/itfsw/mybatis/generator/plugins/UpsertPlugin.java
+142
-219
No files found.
src/main/java/com/itfsw/mybatis/generator/plugins/SelectiveEnhancedPlugin.java
View file @
319b64ff
...
@@ -169,25 +169,6 @@ public class SelectiveEnhancedPlugin extends BasePlugin {
...
@@ -169,25 +169,6 @@ public class SelectiveEnhancedPlugin extends BasePlugin {
// upsertByExampleSelective的第二个trim比较特殊,需另行处理
// upsertByExampleSelective的第二个trim比较特殊,需另行处理
this
.
replaceEleForUpsertByExampleSelective
(
eles
.
get
(
1
),
"record."
,
introspectedTable
,
!
introspectedTable
.
getRules
().
generateRecordWithBLOBsClass
());
this
.
replaceEleForUpsertByExampleSelective
(
eles
.
get
(
1
),
"record."
,
introspectedTable
,
!
introspectedTable
.
getRules
().
generateRecordWithBLOBsClass
());
List
<
XmlElement
>
eles1
=
XmlElementGeneratorTools
.
findXmlElements
(
xmlElement
,
"set"
);
for
(
XmlElement
ele
:
eles1
)
{
this
.
replaceEle
(
ele
,
"record."
,
introspectedTable
);
}
}
// ====================================== 6. upsertSelectiveWithBLOBs ======================================
if
(
"upsertSelectiveWithBLOBs"
.
equals
(
id
))
{
List
<
XmlElement
>
eles
=
XmlElementGeneratorTools
.
findXmlElements
(
xmlElement
,
"trim"
);
for
(
XmlElement
ele
:
eles
)
{
this
.
replaceEle
(
ele
,
"_parameter."
,
introspectedTable
);
}
}
// ====================================== 7. upsertByExampleSelectiveWithBLOBs ======================================
if
(
"upsertByExampleSelectiveWithBLOBs"
.
equals
(
id
))
{
List
<
XmlElement
>
eles
=
XmlElementGeneratorTools
.
findXmlElements
(
xmlElement
,
"trim"
);
this
.
replaceEle
(
eles
.
get
(
0
),
"record."
,
introspectedTable
);
// upsertByExampleSelective的第二个trim比较特殊,需另行处理
this
.
replaceEleForUpsertByExampleSelective
(
eles
.
get
(
1
),
"record."
,
introspectedTable
,
true
);
List
<
XmlElement
>
eles1
=
XmlElementGeneratorTools
.
findXmlElements
(
xmlElement
,
"set"
);
List
<
XmlElement
>
eles1
=
XmlElementGeneratorTools
.
findXmlElements
(
xmlElement
,
"set"
);
for
(
XmlElement
ele
:
eles1
)
{
for
(
XmlElement
ele
:
eles1
)
{
this
.
replaceEle
(
ele
,
"record."
,
introspectedTable
);
this
.
replaceEle
(
ele
,
"record."
,
introspectedTable
);
...
...
src/main/java/com/itfsw/mybatis/generator/plugins/UpsertPlugin.java
View file @
319b64ff
...
@@ -41,14 +41,13 @@ import java.util.Properties;
...
@@ -41,14 +41,13 @@ import java.util.Properties;
*/
*/
public
class
UpsertPlugin
extends
BasePlugin
{
public
class
UpsertPlugin
extends
BasePlugin
{
public
static
final
String
METHOD_UPSERT
=
"upsert"
;
// 方法名
public
static
final
String
METHOD_UPSERT
=
"upsert"
;
// 方法名
public
static
final
String
METHOD_UPSERT_WITH_BLOBS
=
"upsertWithBLOBs"
;
// 方法名
public
static
final
String
METHOD_UPSERT_SELECTIVE
=
"upsertSelective"
;
// 方法名
public
static
final
String
METHOD_UPSERT_SELECTIVE
=
"upsertSelective"
;
// 方法名
public
static
final
String
METHOD_UPSERT_BY_EXAMPLE
=
"upsertByExample"
;
// 方法名
public
static
final
String
METHOD_UPSERT_BY_EXAMPLE
=
"upsertByExample"
;
// 方法名
public
static
final
String
METHOD_UPSERT_BY_EXAMPLE_WITH_BLOBS
=
"upsertByExampleWithBLOBs"
;
// 方法名
public
static
final
String
METHOD_UPSERT_BY_EXAMPLE_SELECTIVE
=
"upsertByExampleSelective"
;
// 方法名
public
static
final
String
METHOD_UPSERT_BY_EXAMPLE_SELECTIVE
=
"upsertByExampleSelective"
;
// 方法名
public
static
final
String
METHOD_UPSERT_WITH_BLOBS
=
"upsertWithBLOBs"
;
// 方法名
public
static
final
String
METHOD_UPSERT_SELECTIVE_WITH_BLOBS
=
"upsertSelectiveWithBLOBs"
;
// 方法名
public
static
final
String
METHOD_UPSERT_BY_EXAMPLE_WITH_BLOBS
=
"upsertByExampleWithBLOBs"
;
// 方法名
public
static
final
String
METHOD_UPSERT_BY_EXAMPLE_SELECTIVE_WITH_BLOBS
=
"upsertByExampleSelectiveWithBLOBs"
;
// 方法名
public
static
final
String
PRE_ALLOW_MULTI_QUERIES
=
"allowMultiQueries"
;
// property allowMultiQueries
public
static
final
String
PRE_ALLOW_MULTI_QUERIES
=
"allowMultiQueries"
;
// property allowMultiQueries
private
boolean
allowMultiQueries
=
false
;
// 是否允许多sql提交
private
boolean
allowMultiQueries
=
false
;
// 是否允许多sql提交
...
@@ -87,7 +86,7 @@ public class UpsertPlugin extends BasePlugin {
...
@@ -87,7 +86,7 @@ public class UpsertPlugin extends BasePlugin {
*/
*/
@Override
@Override
public
boolean
clientGenerated
(
Interface
interfaze
,
TopLevelClass
topLevelClass
,
IntrospectedTable
introspectedTable
)
{
public
boolean
clientGenerated
(
Interface
interfaze
,
TopLevelClass
topLevelClass
,
IntrospectedTable
introspectedTable
)
{
// ======================================
1.
upsert ======================================
// ====================================== upsert ======================================
Method
mUpsert
=
JavaElementGeneratorTools
.
generateMethod
(
Method
mUpsert
=
JavaElementGeneratorTools
.
generateMethod
(
METHOD_UPSERT
,
METHOD_UPSERT
,
JavaVisibility
.
DEFAULT
,
JavaVisibility
.
DEFAULT
,
...
@@ -99,12 +98,27 @@ public class UpsertPlugin extends BasePlugin {
...
@@ -99,12 +98,27 @@ public class UpsertPlugin extends BasePlugin {
interfaze
.
addMethod
(
mUpsert
);
interfaze
.
addMethod
(
mUpsert
);
logger
.
debug
(
"itfsw(存在即更新插件):"
+
interfaze
.
getType
().
getShortName
()
+
"增加upsert方法。"
);
logger
.
debug
(
"itfsw(存在即更新插件):"
+
interfaze
.
getType
().
getShortName
()
+
"增加upsert方法。"
);
// ====================================== 2. upsertSelective ======================================
// ====================================== upsertWithBLOBs ======================================
// !!! 注意这里的行为不以有没有生成Model 的 WithBLOBs类为基准
if
(
introspectedTable
.
hasBLOBColumns
())
{
Method
mUpsertWithBLOBs
=
JavaElementGeneratorTools
.
generateMethod
(
METHOD_UPSERT_WITH_BLOBS
,
JavaVisibility
.
DEFAULT
,
FullyQualifiedJavaType
.
getIntInstance
(),
new
Parameter
(
JavaElementGeneratorTools
.
getModelTypeWithBLOBs
(
introspectedTable
),
"record"
)
);
commentGenerator
.
addGeneralMethodComment
(
mUpsertWithBLOBs
,
introspectedTable
);
// interface 增加方法
interfaze
.
addMethod
(
mUpsertWithBLOBs
);
logger
.
debug
(
"itfsw(存在即更新插件):"
+
interfaze
.
getType
().
getShortName
()
+
"增加upsert方法。"
);
}
// ====================================== upsertSelective ======================================
Method
mUpsertSelective
=
JavaElementGeneratorTools
.
generateMethod
(
Method
mUpsertSelective
=
JavaElementGeneratorTools
.
generateMethod
(
METHOD_UPSERT_SELECTIVE
,
METHOD_UPSERT_SELECTIVE
,
JavaVisibility
.
DEFAULT
,
JavaVisibility
.
DEFAULT
,
FullyQualifiedJavaType
.
getIntInstance
(),
FullyQualifiedJavaType
.
getIntInstance
(),
new
Parameter
(
JavaElementGeneratorTools
.
getModelTypeWithoutBLOBs
(
introspectedTable
),
"record"
)
new
Parameter
(
introspectedTable
.
getRules
().
calculateAllFieldsClass
(
),
"record"
)
);
);
commentGenerator
.
addGeneralMethodComment
(
mUpsertSelective
,
introspectedTable
);
commentGenerator
.
addGeneralMethodComment
(
mUpsertSelective
,
introspectedTable
);
// interface 增加方法
// interface 增加方法
...
@@ -112,7 +126,7 @@ public class UpsertPlugin extends BasePlugin {
...
@@ -112,7 +126,7 @@ public class UpsertPlugin extends BasePlugin {
logger
.
debug
(
"itfsw(存在即更新插件):"
+
interfaze
.
getType
().
getShortName
()
+
"增加upsertSelective方法。"
);
logger
.
debug
(
"itfsw(存在即更新插件):"
+
interfaze
.
getType
().
getShortName
()
+
"增加upsertSelective方法。"
);
if
(
this
.
allowMultiQueries
)
{
if
(
this
.
allowMultiQueries
)
{
// ======================================
3.
upsertByExample ======================================
// ====================================== upsertByExample ======================================
Method
mUpsertByExample
=
JavaElementGeneratorTools
.
generateMethod
(
Method
mUpsertByExample
=
JavaElementGeneratorTools
.
generateMethod
(
METHOD_UPSERT_BY_EXAMPLE
,
METHOD_UPSERT_BY_EXAMPLE
,
JavaVisibility
.
DEFAULT
,
JavaVisibility
.
DEFAULT
,
...
@@ -125,48 +139,9 @@ public class UpsertPlugin extends BasePlugin {
...
@@ -125,48 +139,9 @@ public class UpsertPlugin extends BasePlugin {
interfaze
.
addMethod
(
mUpsertByExample
);
interfaze
.
addMethod
(
mUpsertByExample
);
logger
.
debug
(
"itfsw(存在即更新插件):"
+
interfaze
.
getType
().
getShortName
()
+
"增加upsertByExample方法。"
);
logger
.
debug
(
"itfsw(存在即更新插件):"
+
interfaze
.
getType
().
getShortName
()
+
"增加upsertByExample方法。"
);
// ====================================== 4. upsertByExampleSelective ======================================
// ====================================== upsertByExampleWithBLOBs ======================================
Method
mUpsertByExampleSelective
=
JavaElementGeneratorTools
.
generateMethod
(
// !!! 注意这里的行为不以有没有生成Model 的 WithBLOBs类为基准
METHOD_UPSERT_BY_EXAMPLE_SELECTIVE
,
if
(
introspectedTable
.
hasBLOBColumns
())
{
JavaVisibility
.
DEFAULT
,
FullyQualifiedJavaType
.
getIntInstance
(),
new
Parameter
(
JavaElementGeneratorTools
.
getModelTypeWithoutBLOBs
(
introspectedTable
),
"record"
,
"@Param(\"record\")"
),
new
Parameter
(
new
FullyQualifiedJavaType
(
introspectedTable
.
getExampleType
()),
"example"
,
"@Param(\"example\")"
)
);
commentGenerator
.
addGeneralMethodComment
(
mUpsertByExampleSelective
,
introspectedTable
);
// interface 增加方法
interfaze
.
addMethod
(
mUpsertByExampleSelective
);
logger
.
debug
(
"itfsw(存在即更新插件):"
+
interfaze
.
getType
().
getShortName
()
+
"增加upsertByExampleSelective方法。"
);
}
// !!! 注意这里的行为不以有没有生成Model 的 WithBLOBs类为基准
if
(
introspectedTable
.
hasBLOBColumns
())
{
// ====================================== 1. upsertWithBLOBs ======================================
Method
mUpsertWithBLOBs
=
JavaElementGeneratorTools
.
generateMethod
(
METHOD_UPSERT_WITH_BLOBS
,
JavaVisibility
.
DEFAULT
,
FullyQualifiedJavaType
.
getIntInstance
(),
new
Parameter
(
JavaElementGeneratorTools
.
getModelTypeWithBLOBs
(
introspectedTable
),
"record"
)
);
commentGenerator
.
addGeneralMethodComment
(
mUpsertWithBLOBs
,
introspectedTable
);
// interface 增加方法
interfaze
.
addMethod
(
mUpsertWithBLOBs
);
logger
.
debug
(
"itfsw(存在即更新插件):"
+
interfaze
.
getType
().
getShortName
()
+
"增加upsert方法。"
);
// ====================================== 2. upsertSelectiveWithBLOBs ======================================
Method
mUpsertSelectiveWithBLOBs
=
JavaElementGeneratorTools
.
generateMethod
(
METHOD_UPSERT_SELECTIVE_WITH_BLOBS
,
JavaVisibility
.
DEFAULT
,
FullyQualifiedJavaType
.
getIntInstance
(),
new
Parameter
(
JavaElementGeneratorTools
.
getModelTypeWithBLOBs
(
introspectedTable
),
"record"
)
);
commentGenerator
.
addGeneralMethodComment
(
mUpsertSelectiveWithBLOBs
,
introspectedTable
);
// interface 增加方法
interfaze
.
addMethod
(
mUpsertSelectiveWithBLOBs
);
logger
.
debug
(
"itfsw(存在即更新插件):"
+
interfaze
.
getType
().
getShortName
()
+
"增加upsertSelective方法。"
);
if
(
this
.
allowMultiQueries
)
{
// ====================================== 3. upsertByExampleWithBLOBs ======================================
Method
mUpsertByExampleWithBLOBs
=
JavaElementGeneratorTools
.
generateMethod
(
Method
mUpsertByExampleWithBLOBs
=
JavaElementGeneratorTools
.
generateMethod
(
METHOD_UPSERT_BY_EXAMPLE_WITH_BLOBS
,
METHOD_UPSERT_BY_EXAMPLE_WITH_BLOBS
,
JavaVisibility
.
DEFAULT
,
JavaVisibility
.
DEFAULT
,
...
@@ -178,23 +153,23 @@ public class UpsertPlugin extends BasePlugin {
...
@@ -178,23 +153,23 @@ public class UpsertPlugin extends BasePlugin {
// interface 增加方法
// interface 增加方法
interfaze
.
addMethod
(
mUpsertByExampleWithBLOBs
);
interfaze
.
addMethod
(
mUpsertByExampleWithBLOBs
);
logger
.
debug
(
"itfsw(存在即更新插件):"
+
interfaze
.
getType
().
getShortName
()
+
"增加upsertByExample方法。"
);
logger
.
debug
(
"itfsw(存在即更新插件):"
+
interfaze
.
getType
().
getShortName
()
+
"增加upsertByExample方法。"
);
// ====================================== 4. upsertByExampleSelectiveWithBLOBs ======================================
Method
mUpsertByExampleSelectiveWithBLOBs
=
JavaElementGeneratorTools
.
generateMethod
(
METHOD_UPSERT_BY_EXAMPLE_SELECTIVE_WITH_BLOBS
,
JavaVisibility
.
DEFAULT
,
FullyQualifiedJavaType
.
getIntInstance
(),
new
Parameter
(
JavaElementGeneratorTools
.
getModelTypeWithBLOBs
(
introspectedTable
),
"record"
,
"@Param(\"record\")"
),
new
Parameter
(
new
FullyQualifiedJavaType
(
introspectedTable
.
getExampleType
()),
"example"
,
"@Param(\"example\")"
)
);
commentGenerator
.
addGeneralMethodComment
(
mUpsertByExampleSelectiveWithBLOBs
,
introspectedTable
);
// interface 增加方法
interfaze
.
addMethod
(
mUpsertByExampleSelectiveWithBLOBs
);
logger
.
debug
(
"itfsw(存在即更新插件):"
+
interfaze
.
getType
().
getShortName
()
+
"增加upsertByExampleSelective方法。"
);
}
}
// ====================================== upsertByExampleSelective ======================================
Method
mUpsertByExampleSelective
=
JavaElementGeneratorTools
.
generateMethod
(
METHOD_UPSERT_BY_EXAMPLE_SELECTIVE
,
JavaVisibility
.
DEFAULT
,
FullyQualifiedJavaType
.
getIntInstance
(),
new
Parameter
(
introspectedTable
.
getRules
().
calculateAllFieldsClass
(),
"record"
,
"@Param(\"record\")"
),
new
Parameter
(
new
FullyQualifiedJavaType
(
introspectedTable
.
getExampleType
()),
"example"
,
"@Param(\"example\")"
)
);
commentGenerator
.
addGeneralMethodComment
(
mUpsertByExampleSelective
,
introspectedTable
);
// interface 增加方法
interfaze
.
addMethod
(
mUpsertByExampleSelective
);
logger
.
debug
(
"itfsw(存在即更新插件):"
+
interfaze
.
getType
().
getShortName
()
+
"增加upsertByExampleSelective方法。"
);
}
}
return
true
;
return
super
.
clientGenerated
(
interfaze
,
topLevelClass
,
introspectedTable
)
;
}
}
/**
/**
...
@@ -206,140 +181,146 @@ public class UpsertPlugin extends BasePlugin {
...
@@ -206,140 +181,146 @@ public class UpsertPlugin extends BasePlugin {
*/
*/
@Override
@Override
public
boolean
sqlMapDocumentGenerated
(
Document
document
,
IntrospectedTable
introspectedTable
)
{
public
boolean
sqlMapDocumentGenerated
(
Document
document
,
IntrospectedTable
introspectedTable
)
{
this
.
generateXmlElementWithoutBLOBs
(
document
,
introspectedTable
);
this
.
generateXmlElementWithoutBLOBs
(
document
,
introspectedTable
);
this
.
generateXmlElementWithSelective
(
document
,
introspectedTable
);
// !!! 注意这里的行为不以有没有生成Model 的 WithBLOBs类为基准
this
.
generateXmlElementWithBLOBs
(
document
,
introspectedTable
);
if
(
introspectedTable
.
hasBLOBColumns
())
{
return
super
.
sqlMapDocumentGenerated
(
document
,
introspectedTable
);
this
.
generateXmlElementWithBLOBs
(
document
,
introspectedTable
);
}
return
true
;
}
}
/**
/**
* 当
Model有生成WithBLOBs类时的
情况
* 当
Selective
情况
* @param document
* @param document
* @param introspectedTable
* @param introspectedTable
*/
*/
private
void
generateXmlElementWithBLOBs
(
Document
document
,
IntrospectedTable
introspectedTable
)
{
private
void
generateXmlElementWithSelective
(
Document
document
,
IntrospectedTable
introspectedTable
)
{
// ====================================== 1. upsert ======================================
List
<
IntrospectedColumn
>
columns
=
ListUtilities
.
removeGeneratedAlwaysColumns
(
introspectedTable
.
getAllColumns
());
XmlElement
eleUpsertWithBLOBs
=
new
XmlElement
(
"insert"
);
// ====================================== upsertSelective ======================================
eleUpsertWithBLOBs
.
addAttribute
(
new
Attribute
(
"id"
,
METHOD_UPSERT_WITH_BLOBS
));
XmlElement
eleUpsertSelective
=
new
XmlElement
(
"insert"
);
// 添加注释(!!!必须添加注释,overwrite覆盖生成时,@see XmlFileMergerJaxp.isGeneratedNode会去判断注释中是否存在OLD_ELEMENT_TAGS中的一点,例子:@mbg.generated)
eleUpsertSelective
.
addAttribute
(
new
Attribute
(
"id"
,
METHOD_UPSERT_SELECTIVE
));
commentGenerator
.
addComment
(
eleUpsertWithBLOBs
);
// 参数类型
eleUpsertWithBLOBs
.
addAttribute
(
new
Attribute
(
"parameterType"
,
JavaElementGeneratorTools
.
getModelTypeWithBLOBs
(
introspectedTable
).
getFullyQualifiedName
()));
// 使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。所以只支持MYSQL和SQLServer
XmlElementGeneratorTools
.
useGeneratedKeys
(
eleUpsertWithBLOBs
,
introspectedTable
);
// insert
eleUpsertWithBLOBs
.
addElement
(
new
TextElement
(
"insert into "
+
introspectedTable
.
getFullyQualifiedTableNameAtRuntime
()));
for
(
Element
element
:
XmlElementGeneratorTools
.
generateKeys
(
introspectedTable
.
getAllColumns
()))
{
eleUpsertWithBLOBs
.
addElement
(
element
);
}
eleUpsertWithBLOBs
.
addElement
(
new
TextElement
(
"values"
));
for
(
Element
element
:
XmlElementGeneratorTools
.
generateValues
(
introspectedTable
.
getAllColumns
()))
{
eleUpsertWithBLOBs
.
addElement
(
element
);
}
eleUpsertWithBLOBs
.
addElement
(
new
TextElement
(
"on duplicate key update "
));
// set 操作增加增量插件支持
this
.
incrementsSupport
(
eleUpsertWithBLOBs
,
XmlElementGeneratorTools
.
generateSets
(
introspectedTable
.
getAllColumns
()),
introspectedTable
,
false
);
document
.
getRootElement
().
addElement
(
eleUpsertWithBLOBs
);
logger
.
debug
(
"itfsw(存在即更新插件):"
+
introspectedTable
.
getMyBatis3XmlMapperFileName
()
+
"增加upsert实现方法。"
);
// ====================================== 2. upsertSelective ======================================
XmlElement
eleUpsertSelectiveWithBLOBs
=
new
XmlElement
(
"insert"
);
eleUpsertSelectiveWithBLOBs
.
addAttribute
(
new
Attribute
(
"id"
,
METHOD_UPSERT_SELECTIVE_WITH_BLOBS
));
// 添加注释(!!!必须添加注释,overwrite覆盖生成时,@see XmlFileMergerJaxp.isGeneratedNode会去判断注释中是否存在OLD_ELEMENT_TAGS中的一点,例子:@mbg.generated)
// 添加注释(!!!必须添加注释,overwrite覆盖生成时,@see XmlFileMergerJaxp.isGeneratedNode会去判断注释中是否存在OLD_ELEMENT_TAGS中的一点,例子:@mbg.generated)
commentGenerator
.
addComment
(
eleUpsertSelective
WithBLOBs
);
commentGenerator
.
addComment
(
eleUpsertSelective
);
// 参数类型
// 参数类型
eleUpsertSelective
WithBLOBs
.
addAttribute
(
new
Attribute
(
"parameterType"
,
JavaElementGeneratorTools
.
getModelTypeWithBLOBs
(
introspectedTable
).
getFullyQualifiedName
()));
eleUpsertSelective
.
addAttribute
(
new
Attribute
(
"parameterType"
,
introspectedTable
.
getRules
().
calculateAllFieldsClass
(
).
getFullyQualifiedName
()));
// 使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。所以只支持MYSQL和SQLServer
// 使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。所以只支持MYSQL和SQLServer
XmlElementGeneratorTools
.
useGeneratedKeys
(
eleUpsertSelective
WithBLOBs
,
introspectedTable
);
XmlElementGeneratorTools
.
useGeneratedKeys
(
eleUpsertSelective
,
introspectedTable
);
// insert
// insert
eleUpsertSelective
WithBLOBs
.
addElement
(
new
TextElement
(
"insert into "
+
introspectedTable
.
getFullyQualifiedTableNameAtRuntime
()));
eleUpsertSelective
.
addElement
(
new
TextElement
(
"insert into "
+
introspectedTable
.
getFullyQualifiedTableNameAtRuntime
()));
eleUpsertSelective
WithBLOBs
.
addElement
(
XmlElementGeneratorTools
.
generateKeysSelective
(
introspectedTable
.
getAllColumns
()
));
eleUpsertSelective
.
addElement
(
XmlElementGeneratorTools
.
generateKeysSelective
(
columns
));
eleUpsertSelective
WithBLOBs
.
addElement
(
new
TextElement
(
"values"
));
eleUpsertSelective
.
addElement
(
new
TextElement
(
"values"
));
eleUpsertSelective
WithBLOBs
.
addElement
(
XmlElementGeneratorTools
.
generateValuesSelective
(
introspectedTable
.
getAllColumns
()
));
eleUpsertSelective
.
addElement
(
XmlElementGeneratorTools
.
generateValuesSelective
(
columns
));
eleUpsertSelective
WithBLOBs
.
addElement
(
new
TextElement
(
"on duplicate key update "
));
eleUpsertSelective
.
addElement
(
new
TextElement
(
"on duplicate key update "
));
// set 操作增加增量插件支持
// set 操作增加增量插件支持
this
.
incrementsSelectiveSupport
(
eleUpsertSelective
WithBLOBs
,
XmlElementGeneratorTools
.
generateSetsSelective
(
introspectedTable
.
getAllColumns
()
,
null
,
false
),
introspectedTable
,
false
);
this
.
incrementsSelectiveSupport
(
eleUpsertSelective
,
XmlElementGeneratorTools
.
generateSetsSelective
(
columns
,
null
,
false
),
introspectedTable
,
false
);
document
.
getRootElement
().
addElement
(
eleUpsertSelective
WithBLOBs
);
document
.
getRootElement
().
addElement
(
eleUpsertSelective
);
logger
.
debug
(
"itfsw(存在即更新插件):"
+
introspectedTable
.
getMyBatis3XmlMapperFileName
()
+
"增加upsertSelective实现方法。"
);
logger
.
debug
(
"itfsw(存在即更新插件):"
+
introspectedTable
.
getMyBatis3XmlMapperFileName
()
+
"增加upsertSelective实现方法。"
);
if
(
this
.
allowMultiQueries
)
{
if
(
this
.
allowMultiQueries
)
{
// ======================================
2. upsertByExampl
e ======================================
// ======================================
upsertByExampleSelectiv
e ======================================
XmlElement
eleUpsertByExample
WithBLOBs
=
new
XmlElement
(
"insert"
);
XmlElement
eleUpsertByExample
Selective
=
new
XmlElement
(
"insert"
);
eleUpsertByExample
WithBLOBs
.
addAttribute
(
new
Attribute
(
"id"
,
METHOD_UPSERT_BY_EXAMPLE_WITH_BLOBS
));
eleUpsertByExample
Selective
.
addAttribute
(
new
Attribute
(
"id"
,
METHOD_UPSERT_BY_EXAMPLE_SELECTIVE
));
// 参数类型
// 参数类型
eleUpsertByExample
WithBLOBs
.
addAttribute
(
new
Attribute
(
"parameterType"
,
"map"
));
eleUpsertByExample
Selective
.
addAttribute
(
new
Attribute
(
"parameterType"
,
"map"
));
// 添加注释(!!!必须添加注释,overwrite覆盖生成时,@see XmlFileMergerJaxp.isGeneratedNode会去判断注释中是否存在OLD_ELEMENT_TAGS中的一点,例子:@mbg.generated)
// 添加注释(!!!必须添加注释,overwrite覆盖生成时,@see XmlFileMergerJaxp.isGeneratedNode会去判断注释中是否存在OLD_ELEMENT_TAGS中的一点,例子:@mbg.generated)
commentGenerator
.
addComment
(
eleUpsertByExample
WithBLOBs
);
commentGenerator
.
addComment
(
eleUpsertByExample
Selective
);
// 使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。所以只支持MYSQL和SQLServer
// 使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。所以只支持MYSQL和SQLServer
XmlElementGeneratorTools
.
useGeneratedKeys
(
eleUpsertByExample
WithBLOBs
,
introspectedTable
,
"record."
);
XmlElementGeneratorTools
.
useGeneratedKeys
(
eleUpsertByExample
Selective
,
introspectedTable
,
"record."
);
// insert
// insert
eleUpsertByExampleWithBLOBs
.
addElement
(
new
TextElement
(
"insert into "
+
introspectedTable
.
getFullyQualifiedTableNameAtRuntime
()));
eleUpsertByExampleSelective
.
addElement
(
new
TextElement
(
"insert into "
+
introspectedTable
.
getFullyQualifiedTableNameAtRuntime
()));
for
(
Element
element
:
XmlElementGeneratorTools
.
generateKeys
(
introspectedTable
.
getAllColumns
()))
{
eleUpsertByExampleSelective
.
addElement
(
XmlElementGeneratorTools
.
generateKeysSelective
(
columns
,
"record."
));
eleUpsertByExampleWithBLOBs
.
addElement
(
element
);
this
.
generateExistsClause
(
introspectedTable
,
eleUpsertByExampleSelective
,
true
,
columns
);
}
this
.
generateExistsClause
(
introspectedTable
,
eleUpsertByExampleWithBLOBs
,
false
,
true
);
// multiQueries
// multiQueries
eleUpsertByExample
WithBLOBs
.
addElement
(
new
TextElement
(
";"
));
eleUpsertByExample
Selective
.
addElement
(
new
TextElement
(
";"
));
// update
// update
eleUpsertByExample
WithBLOBs
.
addElement
(
new
TextElement
(
"update "
+
introspectedTable
.
getAliasedFullyQualifiedTableNameAtRuntime
()));
eleUpsertByExample
Selective
.
addElement
(
new
TextElement
(
"update "
+
introspectedTable
.
getAliasedFullyQualifiedTableNameAtRuntime
()));
eleUpsertByExample
WithBLOBs
.
addElement
(
new
TextElement
(
"set"
));
eleUpsertByExample
Selective
.
addElement
(
new
TextElement
(
"set"
));
// set 操作增加增量插件支持
// set 操作增加增量插件支持
this
.
incrementsS
upport
(
eleUpsertByExampleWithBLOBs
,
XmlElementGeneratorTools
.
generateSets
(
ListUtilities
.
removeIdentityAndGeneratedAlwaysColumns
(
introspectedTable
.
getAllColumns
()
),
"record."
),
introspectedTable
,
true
);
this
.
incrementsS
electiveSupport
(
eleUpsertByExampleSelective
,
XmlElementGeneratorTools
.
generateSetsSelective
(
ListUtilities
.
removeIdentityAndGeneratedAlwaysColumns
(
columns
),
"record."
),
introspectedTable
,
true
);
// update where
// update where
eleUpsertByExample
WithBLOBs
.
addElement
(
XmlElementGeneratorTools
.
getUpdateByExampleIncludeElement
(
introspectedTable
));
eleUpsertByExample
Selective
.
addElement
(
XmlElementGeneratorTools
.
getUpdateByExampleIncludeElement
(
introspectedTable
));
document
.
getRootElement
().
addElement
(
eleUpsertByExample
WithBLOBs
);
document
.
getRootElement
().
addElement
(
eleUpsertByExample
Selective
);
logger
.
debug
(
"itfsw(存在即更新插件):"
+
introspectedTable
.
getMyBatis3XmlMapperFileName
()
+
"增加upsertSelective实现方法。"
);
logger
.
debug
(
"itfsw(存在即更新插件):"
+
introspectedTable
.
getMyBatis3XmlMapperFileName
()
+
"增加upsertSelective实现方法。"
);
}
}
// ====================================== 4. upsertByExampleSelective ======================================
/**
XmlElement
eleUpsertByExampleSelectiveWithBLOBs
=
new
XmlElement
(
"insert"
);
* 当Model有生成WithBLOBs类时的情况
eleUpsertByExampleSelectiveWithBLOBs
.
addAttribute
(
new
Attribute
(
"id"
,
METHOD_UPSERT_BY_EXAMPLE_SELECTIVE_WITH_BLOBS
));
* @param document
// 参数类型
* @param introspectedTable
eleUpsertByExampleSelectiveWithBLOBs
.
addAttribute
(
new
Attribute
(
"parameterType"
,
"map"
));
*/
private
void
generateXmlElementWithBLOBs
(
Document
document
,
IntrospectedTable
introspectedTable
)
{
if
(
introspectedTable
.
hasBLOBColumns
()){
List
<
IntrospectedColumn
>
columns
=
ListUtilities
.
removeGeneratedAlwaysColumns
(
introspectedTable
.
getAllColumns
());
// ====================================== upsertWithBLOBs ======================================
XmlElement
eleUpsertWithBLOBs
=
new
XmlElement
(
"insert"
);
eleUpsertWithBLOBs
.
addAttribute
(
new
Attribute
(
"id"
,
METHOD_UPSERT_WITH_BLOBS
));
// 添加注释(!!!必须添加注释,overwrite覆盖生成时,@see XmlFileMergerJaxp.isGeneratedNode会去判断注释中是否存在OLD_ELEMENT_TAGS中的一点,例子:@mbg.generated)
// 添加注释(!!!必须添加注释,overwrite覆盖生成时,@see XmlFileMergerJaxp.isGeneratedNode会去判断注释中是否存在OLD_ELEMENT_TAGS中的一点,例子:@mbg.generated)
commentGenerator
.
addComment
(
eleUpsertByExampleSelectiveWithBLOBs
);
commentGenerator
.
addComment
(
eleUpsertWithBLOBs
);
// 参数类型
eleUpsertWithBLOBs
.
addAttribute
(
new
Attribute
(
"parameterType"
,
JavaElementGeneratorTools
.
getModelTypeWithBLOBs
(
introspectedTable
).
getFullyQualifiedName
()));
// 使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。所以只支持MYSQL和SQLServer
// 使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。所以只支持MYSQL和SQLServer
XmlElementGeneratorTools
.
useGeneratedKeys
(
eleUpsert
ByExampleSelectiveWithBLOBs
,
introspectedTable
,
"record."
);
XmlElementGeneratorTools
.
useGeneratedKeys
(
eleUpsert
WithBLOBs
,
introspectedTable
);
// insert
// insert
eleUpsertByExampleSelectiveWithBLOBs
.
addElement
(
new
TextElement
(
"insert into "
+
introspectedTable
.
getFullyQualifiedTableNameAtRuntime
()));
eleUpsertWithBLOBs
.
addElement
(
new
TextElement
(
"insert into "
+
introspectedTable
.
getFullyQualifiedTableNameAtRuntime
()));
eleUpsertByExampleSelectiveWithBLOBs
.
addElement
(
XmlElementGeneratorTools
.
generateKeysSelective
(
introspectedTable
.
getAllColumns
(),
"record."
));
for
(
Element
element
:
XmlElementGeneratorTools
.
generateKeys
(
columns
))
{
this
.
generateExistsClause
(
introspectedTable
,
eleUpsertByExampleSelectiveWithBLOBs
,
true
,
true
);
eleUpsertWithBLOBs
.
addElement
(
element
);
}
eleUpsertWithBLOBs
.
addElement
(
new
TextElement
(
"values"
));
for
(
Element
element
:
XmlElementGeneratorTools
.
generateValues
(
columns
))
{
eleUpsertWithBLOBs
.
addElement
(
element
);
}
eleUpsertWithBLOBs
.
addElement
(
new
TextElement
(
"on duplicate key update "
));
// set 操作增加增量插件支持
this
.
incrementsSupport
(
eleUpsertWithBLOBs
,
XmlElementGeneratorTools
.
generateSets
(
columns
),
introspectedTable
,
false
);
// multiQueries
document
.
getRootElement
().
addElement
(
eleUpsertWithBLOBs
);
eleUpsertByExampleSelectiveWithBLOBs
.
addElement
(
new
TextElement
(
";"
)
);
logger
.
debug
(
"itfsw(存在即更新插件):"
+
introspectedTable
.
getMyBatis3XmlMapperFileName
()
+
"增加upsert实现方法。"
);
// update
if
(
this
.
allowMultiQueries
)
{
eleUpsertByExampleSelectiveWithBLOBs
.
addElement
(
new
TextElement
(
"update "
+
introspectedTable
.
getAliasedFullyQualifiedTableNameAtRuntime
()));
// ====================================== upsertByExampleWithBLOBs ======================================
eleUpsertByExampleSelectiveWithBLOBs
.
addElement
(
new
TextElement
(
"set"
));
XmlElement
eleUpsertByExampleWithBLOBs
=
new
XmlElement
(
"insert"
);
// set 操作增加增量插件支持
eleUpsertByExampleWithBLOBs
.
addAttribute
(
new
Attribute
(
"id"
,
METHOD_UPSERT_BY_EXAMPLE_WITH_BLOBS
));
this
.
incrementsSelectiveSupport
(
eleUpsertByExampleSelectiveWithBLOBs
,
XmlElementGeneratorTools
.
generateSetsSelective
(
ListUtilities
.
removeIdentityAndGeneratedAlwaysColumns
(
introspectedTable
.
getAllColumns
()),
"record."
),
introspectedTable
,
true
);
// 参数类型
eleUpsertByExampleWithBLOBs
.
addAttribute
(
new
Attribute
(
"parameterType"
,
"map"
));
// 添加注释(!!!必须添加注释,overwrite覆盖生成时,@see XmlFileMergerJaxp.isGeneratedNode会去判断注释中是否存在OLD_ELEMENT_TAGS中的一点,例子:@mbg.generated)
commentGenerator
.
addComment
(
eleUpsertByExampleWithBLOBs
);
// 使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。所以只支持MYSQL和SQLServer
XmlElementGeneratorTools
.
useGeneratedKeys
(
eleUpsertByExampleWithBLOBs
,
introspectedTable
,
"record."
);
// insert
eleUpsertByExampleWithBLOBs
.
addElement
(
new
TextElement
(
"insert into "
+
introspectedTable
.
getFullyQualifiedTableNameAtRuntime
()));
for
(
Element
element
:
XmlElementGeneratorTools
.
generateKeys
(
columns
))
{
eleUpsertByExampleWithBLOBs
.
addElement
(
element
);
}
this
.
generateExistsClause
(
introspectedTable
,
eleUpsertByExampleWithBLOBs
,
false
,
columns
);
// multiQueries
eleUpsertByExampleWithBLOBs
.
addElement
(
new
TextElement
(
";"
));
// update where
// update
eleUpsertByExampleSelectiveWithBLOBs
.
addElement
(
XmlElementGeneratorTools
.
getUpdateByExampleIncludeElement
(
introspectedTable
));
eleUpsertByExampleWithBLOBs
.
addElement
(
new
TextElement
(
"update "
+
introspectedTable
.
getAliasedFullyQualifiedTableNameAtRuntime
()));
eleUpsertByExampleWithBLOBs
.
addElement
(
new
TextElement
(
"set"
));
// set 操作增加增量插件支持
this
.
incrementsSupport
(
eleUpsertByExampleWithBLOBs
,
XmlElementGeneratorTools
.
generateSets
(
columns
,
"record."
),
introspectedTable
,
true
);
document
.
getRootElement
().
addElement
(
eleUpsertByExampleSelectiveWithBLOBs
);
// update where
logger
.
debug
(
"itfsw(存在即更新插件):"
+
introspectedTable
.
getMyBatis3XmlMapperFileName
()
+
"增加upsertSelective实现方法。"
);
eleUpsertByExampleWithBLOBs
.
addElement
(
XmlElementGeneratorTools
.
getUpdateByExampleIncludeElement
(
introspectedTable
));
document
.
getRootElement
().
addElement
(
eleUpsertByExampleWithBLOBs
);
logger
.
debug
(
"itfsw(存在即更新插件):"
+
introspectedTable
.
getMyBatis3XmlMapperFileName
()
+
"增加upsertSelective实现方法。"
);
}
}
}
}
}
...
@@ -349,11 +330,9 @@ public class UpsertPlugin extends BasePlugin {
...
@@ -349,11 +330,9 @@ public class UpsertPlugin extends BasePlugin {
* @param introspectedTable
* @param introspectedTable
*/
*/
private
void
generateXmlElementWithoutBLOBs
(
Document
document
,
IntrospectedTable
introspectedTable
)
{
private
void
generateXmlElementWithoutBLOBs
(
Document
document
,
IntrospectedTable
introspectedTable
)
{
// WithoutBLOBs也会存在只有一个时,不生成WithBLOBs对象的情况
List
<
IntrospectedColumn
>
columns
=
ListUtilities
.
removeGeneratedAlwaysColumns
(
introspectedTable
.
getNonBLOBColumns
());
boolean
flag
=
!
introspectedTable
.
getRules
().
generateRecordWithBLOBsClass
();
List
<
IntrospectedColumn
>
columns
=
flag
?
introspectedTable
.
getAllColumns
()
:
introspectedTable
.
getNonBLOBColumns
();
// ======================================
1.
upsert ======================================
// ====================================== upsert ======================================
XmlElement
eleUpsert
=
new
XmlElement
(
"insert"
);
XmlElement
eleUpsert
=
new
XmlElement
(
"insert"
);
eleUpsert
.
addAttribute
(
new
Attribute
(
"id"
,
METHOD_UPSERT
));
eleUpsert
.
addAttribute
(
new
Attribute
(
"id"
,
METHOD_UPSERT
));
// 添加注释(!!!必须添加注释,overwrite覆盖生成时,@see XmlFileMergerJaxp.isGeneratedNode会去判断注释中是否存在OLD_ELEMENT_TAGS中的一点,例子:@mbg.generated)
// 添加注释(!!!必须添加注释,overwrite覆盖生成时,@see XmlFileMergerJaxp.isGeneratedNode会去判断注释中是否存在OLD_ELEMENT_TAGS中的一点,例子:@mbg.generated)
...
@@ -382,32 +361,8 @@ public class UpsertPlugin extends BasePlugin {
...
@@ -382,32 +361,8 @@ public class UpsertPlugin extends BasePlugin {
document
.
getRootElement
().
addElement
(
eleUpsert
);
document
.
getRootElement
().
addElement
(
eleUpsert
);
logger
.
debug
(
"itfsw(存在即更新插件):"
+
introspectedTable
.
getMyBatis3XmlMapperFileName
()
+
"增加upsert实现方法。"
);
logger
.
debug
(
"itfsw(存在即更新插件):"
+
introspectedTable
.
getMyBatis3XmlMapperFileName
()
+
"增加upsert实现方法。"
);
// ====================================== 2. upsertSelective ======================================
XmlElement
eleUpsertSelective
=
new
XmlElement
(
"insert"
);
eleUpsertSelective
.
addAttribute
(
new
Attribute
(
"id"
,
METHOD_UPSERT_SELECTIVE
));
// 添加注释(!!!必须添加注释,overwrite覆盖生成时,@see XmlFileMergerJaxp.isGeneratedNode会去判断注释中是否存在OLD_ELEMENT_TAGS中的一点,例子:@mbg.generated)
commentGenerator
.
addComment
(
eleUpsertSelective
);
// 参数类型
eleUpsertSelective
.
addAttribute
(
new
Attribute
(
"parameterType"
,
JavaElementGeneratorTools
.
getModelTypeWithoutBLOBs
(
introspectedTable
).
getFullyQualifiedName
()));
// 使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。所以只支持MYSQL和SQLServer
XmlElementGeneratorTools
.
useGeneratedKeys
(
eleUpsertSelective
,
introspectedTable
);
// insert
eleUpsertSelective
.
addElement
(
new
TextElement
(
"insert into "
+
introspectedTable
.
getFullyQualifiedTableNameAtRuntime
()));
eleUpsertSelective
.
addElement
(
XmlElementGeneratorTools
.
generateKeysSelective
(
columns
));
eleUpsertSelective
.
addElement
(
new
TextElement
(
"values"
));
eleUpsertSelective
.
addElement
(
XmlElementGeneratorTools
.
generateValuesSelective
(
columns
));
eleUpsertSelective
.
addElement
(
new
TextElement
(
"on duplicate key update "
));
// set 操作增加增量插件支持
this
.
incrementsSelectiveSupport
(
eleUpsertSelective
,
XmlElementGeneratorTools
.
generateSetsSelective
(
columns
,
null
,
false
),
introspectedTable
,
false
);
document
.
getRootElement
().
addElement
(
eleUpsertSelective
);
logger
.
debug
(
"itfsw(存在即更新插件):"
+
introspectedTable
.
getMyBatis3XmlMapperFileName
()
+
"增加upsertSelective实现方法。"
);
if
(
this
.
allowMultiQueries
)
{
if
(
this
.
allowMultiQueries
)
{
// ======================================
2.
upsertByExample ======================================
// ====================================== upsertByExample ======================================
XmlElement
eleUpsertByExample
=
new
XmlElement
(
"insert"
);
XmlElement
eleUpsertByExample
=
new
XmlElement
(
"insert"
);
eleUpsertByExample
.
addAttribute
(
new
Attribute
(
"id"
,
METHOD_UPSERT_BY_EXAMPLE
));
eleUpsertByExample
.
addAttribute
(
new
Attribute
(
"id"
,
METHOD_UPSERT_BY_EXAMPLE
));
// 参数类型
// 参数类型
...
@@ -423,7 +378,7 @@ public class UpsertPlugin extends BasePlugin {
...
@@ -423,7 +378,7 @@ public class UpsertPlugin extends BasePlugin {
for
(
Element
element
:
XmlElementGeneratorTools
.
generateKeys
(
columns
))
{
for
(
Element
element
:
XmlElementGeneratorTools
.
generateKeys
(
columns
))
{
eleUpsertByExample
.
addElement
(
element
);
eleUpsertByExample
.
addElement
(
element
);
}
}
this
.
generateExistsClause
(
introspectedTable
,
eleUpsertByExample
,
false
,
flag
);
this
.
generateExistsClause
(
introspectedTable
,
eleUpsertByExample
,
false
,
columns
);
// multiQueries
// multiQueries
eleUpsertByExample
.
addElement
(
new
TextElement
(
";"
));
eleUpsertByExample
.
addElement
(
new
TextElement
(
";"
));
...
@@ -439,50 +394,18 @@ public class UpsertPlugin extends BasePlugin {
...
@@ -439,50 +394,18 @@ public class UpsertPlugin extends BasePlugin {
document
.
getRootElement
().
addElement
(
eleUpsertByExample
);
document
.
getRootElement
().
addElement
(
eleUpsertByExample
);
logger
.
debug
(
"itfsw(存在即更新插件):"
+
introspectedTable
.
getMyBatis3XmlMapperFileName
()
+
"增加upsertSelective实现方法。"
);
logger
.
debug
(
"itfsw(存在即更新插件):"
+
introspectedTable
.
getMyBatis3XmlMapperFileName
()
+
"增加upsertSelective实现方法。"
);
// ====================================== 4. upsertByExampleSelective ======================================
XmlElement
eleUpsertByExampleSelective
=
new
XmlElement
(
"insert"
);
eleUpsertByExampleSelective
.
addAttribute
(
new
Attribute
(
"id"
,
METHOD_UPSERT_BY_EXAMPLE_SELECTIVE
));
// 参数类型
eleUpsertByExampleSelective
.
addAttribute
(
new
Attribute
(
"parameterType"
,
"map"
));
// 添加注释(!!!必须添加注释,overwrite覆盖生成时,@see XmlFileMergerJaxp.isGeneratedNode会去判断注释中是否存在OLD_ELEMENT_TAGS中的一点,例子:@mbg.generated)
commentGenerator
.
addComment
(
eleUpsertByExampleSelective
);
// 使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。所以只支持MYSQL和SQLServer
XmlElementGeneratorTools
.
useGeneratedKeys
(
eleUpsertByExampleSelective
,
introspectedTable
,
"record."
);
// insert
eleUpsertByExampleSelective
.
addElement
(
new
TextElement
(
"insert into "
+
introspectedTable
.
getFullyQualifiedTableNameAtRuntime
()));
eleUpsertByExampleSelective
.
addElement
(
XmlElementGeneratorTools
.
generateKeysSelective
(
columns
,
"record."
));
this
.
generateExistsClause
(
introspectedTable
,
eleUpsertByExampleSelective
,
true
,
flag
);
// multiQueries
eleUpsertByExampleSelective
.
addElement
(
new
TextElement
(
";"
));
// update
eleUpsertByExampleSelective
.
addElement
(
new
TextElement
(
"update "
+
introspectedTable
.
getAliasedFullyQualifiedTableNameAtRuntime
()));
eleUpsertByExampleSelective
.
addElement
(
new
TextElement
(
"set"
));
// set 操作增加增量插件支持
this
.
incrementsSelectiveSupport
(
eleUpsertByExampleSelective
,
XmlElementGeneratorTools
.
generateSetsSelective
(
ListUtilities
.
removeIdentityAndGeneratedAlwaysColumns
(
columns
),
"record."
),
introspectedTable
,
true
);
// update where
eleUpsertByExampleSelective
.
addElement
(
XmlElementGeneratorTools
.
getUpdateByExampleIncludeElement
(
introspectedTable
));
document
.
getRootElement
().
addElement
(
eleUpsertByExampleSelective
);
logger
.
debug
(
"itfsw(存在即更新插件):"
+
introspectedTable
.
getMyBatis3XmlMapperFileName
()
+
"增加upsertSelective实现方法。"
);
}
}
}
}
/**
/**
* exists 语句
* exists 语句
* +635
* @param introspectedTable
* @param introspectedTable
* @param element
* @param element
* @param selective
* @param selective
* @param
allC
olumns
* @param
c
olumns
*/
*/
private
void
generateExistsClause
(
IntrospectedTable
introspectedTable
,
XmlElement
element
,
boolean
selective
,
boolean
allColumns
)
{
private
void
generateExistsClause
(
IntrospectedTable
introspectedTable
,
XmlElement
element
,
boolean
selective
,
List
<
IntrospectedColumn
>
columns
)
{
List
<
IntrospectedColumn
>
columns
=
allColumns
?
introspectedTable
.
getAllColumns
()
:
introspectedTable
.
getNonBLOBColumns
();
element
.
addElement
(
new
TextElement
(
"select"
));
element
.
addElement
(
new
TextElement
(
"select"
));
if
(
selective
)
{
if
(
selective
)
{
element
.
addElement
(
XmlElementGeneratorTools
.
generateValuesSelective
(
columns
,
"record."
,
false
));
element
.
addElement
(
XmlElementGeneratorTools
.
generateValuesSelective
(
columns
,
"record."
,
false
));
...
...
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