-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCustomDeletePlugin.java
136 lines (111 loc) · 6.55 KB
/
CustomDeletePlugin.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
package com.revengemission.plugins.mybatis;
import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
import org.mybatis.generator.api.dom.java.Interface;
import org.mybatis.generator.api.dom.java.Method;
import org.mybatis.generator.api.dom.java.Parameter;
import org.mybatis.generator.api.dom.xml.Attribute;
import org.mybatis.generator.api.dom.xml.Document;
import org.mybatis.generator.api.dom.xml.TextElement;
import org.mybatis.generator.api.dom.xml.XmlElement;
import java.util.List;
import java.util.Map;
/**
* 逻辑删除,配置property,deletedFlagFiled和deletedFlagValue
*/
public class CustomDeletePlugin extends AbstractXmbgPlugin {
private static final String CLIENT_METHOD_NAME_LOGICAL_DELETE = "logicalDeleteById";
private static final String CLIENT_METHOD_NAME_LOGICAL_DELETE_IDS = "logicalDeleteByIds";
private static final String CLIENT_METHOD_NAME_DELETE_IDS = "deleteByIds";
private String deletedFlagTableFiled = "deleted";
private Object deletedFlagValue = 1;
@Override
public void initialized(IntrospectedTable introspectedTable) {
for (Map.Entry<Object, Object> entry : properties.entrySet()) {
if ("deletedFlagTableFiled".equalsIgnoreCase(entry.getKey().toString().trim())) {
deletedFlagTableFiled = entry.getValue().toString().trim();
} else if ("deletedFlagValue".equalsIgnoreCase(entry.getKey().toString().trim())) {
deletedFlagValue = entry.getValue();
}
}
}
@Override
public boolean validate(List<String> warnings) {
return true;
}
@Override
public boolean clientGenerated(Interface interfaze, IntrospectedTable introspectedTable) {
if (hasColumn(introspectedTable, deletedFlagTableFiled)) {
Method logicalDeleteByIdMethod = new Method(CLIENT_METHOD_NAME_LOGICAL_DELETE);
logicalDeleteByIdMethod.setAbstract(true);
logicalDeleteByIdMethod.addParameter(new Parameter(new FullyQualifiedJavaType("long"), "id", "@Param(\"id\")"));
logicalDeleteByIdMethod.setReturnType(FullyQualifiedJavaType.getIntInstance());
interfaze.addMethod(logicalDeleteByIdMethod);
Method logicalDeleteByIdsMethod = new Method(CLIENT_METHOD_NAME_LOGICAL_DELETE_IDS);
logicalDeleteByIdsMethod.setAbstract(true);
logicalDeleteByIdsMethod.addParameter(new Parameter(new FullyQualifiedJavaType("long[]"), "ids", "@Param(\"ids\")"));
logicalDeleteByIdsMethod.setReturnType(FullyQualifiedJavaType.getIntInstance());
interfaze.addMethod(logicalDeleteByIdsMethod);
}
Method deleteByIdsMethod = new Method(CLIENT_METHOD_NAME_DELETE_IDS);
deleteByIdsMethod.setAbstract(true);
deleteByIdsMethod.addParameter(new Parameter(new FullyQualifiedJavaType("long[]"), "ids", "@Param(\"ids\")"));
deleteByIdsMethod.setReturnType(FullyQualifiedJavaType.getIntInstance());
interfaze.addMethod(deleteByIdsMethod);
return true;
}
@Override
public boolean sqlMapDocumentGenerated(Document document, IntrospectedTable introspectedTable) {
String tableName = introspectedTable.getAliasedFullyQualifiedTableNameAtRuntime();
XmlElement parentElement = document.getRootElement();
if (hasColumn(introspectedTable, deletedFlagTableFiled)) {
XmlElement logicalDeleteByIdElement = new XmlElement("update");
logicalDeleteByIdElement.addAttribute(new Attribute("id", CLIENT_METHOD_NAME_LOGICAL_DELETE));
logicalDeleteByIdElement.addElement(new TextElement("update " + tableName));
logicalDeleteByIdElement.addElement(new TextElement("set " + deletedFlagTableFiled + " = " + deletedFlagValue));
logicalDeleteByIdElement.addElement(new TextElement("where id = #{id}"));
parentElement.addElement(logicalDeleteByIdElement);
XmlElement logicalDeleteByIdsElement = new XmlElement("update");
logicalDeleteByIdsElement.addAttribute(new Attribute("id", CLIENT_METHOD_NAME_LOGICAL_DELETE_IDS));
logicalDeleteByIdsElement.addElement(new TextElement("update " + tableName));
logicalDeleteByIdsElement.addElement(new TextElement("set " + deletedFlagTableFiled + " = " + deletedFlagValue));
logicalDeleteByIdsElement.addElement(new TextElement("where id in"));
XmlElement foreachElement = new XmlElement("foreach");
foreachElement.addAttribute(new Attribute("item", "item"));
foreachElement.addAttribute(new Attribute("index", "index"));
foreachElement.addAttribute(new Attribute("collection", "ids"));
foreachElement.addAttribute(new Attribute("open", "("));
foreachElement.addAttribute(new Attribute("separator", ","));
foreachElement.addAttribute(new Attribute("close", ")"));
foreachElement.addElement(new TextElement("#{item}"));
logicalDeleteByIdsElement.addElement(foreachElement);
parentElement.addElement(logicalDeleteByIdsElement);
}
XmlElement deleteByIdsElement = new XmlElement("delete");
deleteByIdsElement.addAttribute(new Attribute("id", CLIENT_METHOD_NAME_DELETE_IDS));
deleteByIdsElement.addElement(new TextElement("delete from " + tableName));
deleteByIdsElement.addElement(new TextElement("where id in"));
XmlElement foreachElement = new XmlElement("foreach");
foreachElement.addAttribute(new Attribute("item", "item"));
foreachElement.addAttribute(new Attribute("index", "index"));
foreachElement.addAttribute(new Attribute("collection", "ids"));
foreachElement.addAttribute(new Attribute("open", "("));
foreachElement.addAttribute(new Attribute("separator", ","));
foreachElement.addAttribute(new Attribute("close", ")"));
foreachElement.addElement(new TextElement("#{item}"));
deleteByIdsElement.addElement(foreachElement);
parentElement.addElement(deleteByIdsElement);
return super.sqlMapDocumentGenerated(document, introspectedTable);
}
private boolean hasColumn(IntrospectedTable introspectedTable, String column) {
boolean flag = false;
List<IntrospectedColumn> allColumns = introspectedTable.getAllColumns();
for (int i = 0; i < allColumns.size(); i++) {
if (column.equals(allColumns.get(i).getActualColumnName())) {
flag = true;
}
}
return flag;
}
}