init
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
package generator.defined;
|
||||
|
||||
import org.mybatis.generator.api.CommentGenerator;
|
||||
import org.mybatis.generator.api.IntrospectedColumn;
|
||||
import org.mybatis.generator.api.IntrospectedTable;
|
||||
import org.mybatis.generator.api.dom.java.Field;
|
||||
import org.mybatis.generator.api.dom.java.Method;
|
||||
import org.mybatis.generator.api.dom.java.TopLevelClass;
|
||||
import org.mybatis.generator.api.dom.xml.XmlElement;
|
||||
import org.mybatis.generator.internal.DefaultCommentGenerator;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.Properties;
|
||||
|
||||
/**
|
||||
* @author zhangchenbiao
|
||||
* @FileName: MyCommentGenerator
|
||||
* @Description:
|
||||
* @date 2021-11-18 11:09
|
||||
*/
|
||||
public class MyCommentGenerator extends DefaultCommentGenerator implements CommentGenerator {
|
||||
private String author;
|
||||
/**
|
||||
* 当前时间
|
||||
*/
|
||||
private String currentDateStr;
|
||||
public static final ThreadLocal<String> authorName = new ThreadLocal<String>();
|
||||
|
||||
public MyCommentGenerator() {
|
||||
currentDateStr = (new SimpleDateFormat("yyyy-MM-dd hh:mm")).format(new Date());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void addConfigurationProperties(Properties properties) {
|
||||
author = properties.getProperty("author");
|
||||
authorName.set(author);
|
||||
}
|
||||
|
||||
/**
|
||||
* 字段注释
|
||||
* @param field
|
||||
* @param introspectedTable
|
||||
* @param introspectedColumn
|
||||
*/
|
||||
@Override
|
||||
public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
|
||||
String remarks = introspectedColumn.getRemarks();
|
||||
field.addAnnotation("@ApiModelProperty(\""+ remarks +"\")");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addFieldComment(Field field, IntrospectedTable introspectedTable) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
|
||||
String remarks = introspectedTable.getRemarks();
|
||||
topLevelClass.addJavaDocLine("/**");
|
||||
topLevelClass.addJavaDocLine(" * " + remarks);
|
||||
topLevelClass.addJavaDocLine(" * @author " + author);
|
||||
topLevelClass.addJavaDocLine(" * @date " + currentDateStr);
|
||||
topLevelClass.addJavaDocLine(" */");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addSetterComment(Method method,
|
||||
IntrospectedTable introspectedTable,
|
||||
IntrospectedColumn introspectedColumn) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addGeneralMethodComment(Method method,
|
||||
IntrospectedTable introspectedTable) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
method.addJavaDocLine("/**");
|
||||
method.addJavaDocLine(" *");
|
||||
sb.append(" * " + MethodName.getMethodComment(method.getName()));
|
||||
method.addJavaDocLine(sb.toString());
|
||||
method.addJavaDocLine(" * dateTime:" +currentDateStr);
|
||||
method.addJavaDocLine(" */");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addComment(XmlElement xmlElement) {
|
||||
|
||||
}
|
||||
|
||||
public enum MethodName{
|
||||
INSERT_SELECTIVE("insertSelective","默认插入方法,只会给有值的字段赋值\n\t * 会对传进来的字段做判空处理,如果字段为空,则使用数据库默认字段或者null"),
|
||||
SELECT_BY_PRIMARY_KEY("selectByPrimaryKey","默认查询方法,通过主键获取所有字段的值"),
|
||||
UPDATE_BY_PRIMARY_KEY_SELECTIVE("updateByPrimaryKeySelective","默认更新方法,根据主键更新,不会把null值更新到数据库,避免覆盖之前有值的"),
|
||||
DELETE_BY_PRIMARY_KEY("deleteByPrimaryKey","默认更新方法,根据主键物理删除"),;
|
||||
private String methodName;
|
||||
private String comment;
|
||||
|
||||
MethodName(String methodName, String comment) {
|
||||
this.methodName = methodName;
|
||||
this.comment = comment;
|
||||
}
|
||||
|
||||
public static String getMethodComment(String methodName){
|
||||
for (MethodName value : MethodName.values()) {
|
||||
if(value.methodName.equals(methodName)){
|
||||
return value.comment;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,517 @@
|
||||
package generator.defined;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.mybatis.generator.api.CommentGenerator;
|
||||
import org.mybatis.generator.api.FullyQualifiedTable;
|
||||
import org.mybatis.generator.api.IntrospectedColumn;
|
||||
import org.mybatis.generator.api.ProgressCallback;
|
||||
import org.mybatis.generator.api.dom.java.*;
|
||||
import org.mybatis.generator.api.dom.xml.Attribute;
|
||||
import org.mybatis.generator.api.dom.xml.TextElement;
|
||||
import org.mybatis.generator.api.dom.xml.XmlElement;
|
||||
import org.mybatis.generator.codegen.AbstractJavaClientGenerator;
|
||||
import org.mybatis.generator.codegen.mybatis3.IntrospectedTableMyBatis3Impl;
|
||||
import org.mybatis.generator.codegen.mybatis3.ListUtilities;
|
||||
import org.mybatis.generator.codegen.mybatis3.MyBatis3FormattingUtilities;
|
||||
import org.mybatis.generator.codegen.mybatis3.javamapper.JavaMapperGenerator;
|
||||
import org.mybatis.generator.codegen.mybatis3.xmlmapper.XMLMapperGenerator;
|
||||
import org.mybatis.generator.codegen.mybatis3.xmlmapper.elements.AbstractXmlElementGenerator;
|
||||
import org.mybatis.generator.codegen.mybatis3.xmlmapper.elements.InsertSelectiveElementGenerator;
|
||||
import org.mybatis.generator.codegen.mybatis3.xmlmapper.elements.UpdateByPrimaryKeySelectiveElementGenerator;
|
||||
import org.mybatis.generator.config.GeneratedKey;
|
||||
import org.mybatis.generator.config.PropertyRegistry;
|
||||
import org.mybatis.generator.internal.util.JavaBeansUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static org.mybatis.generator.internal.util.StringUtility.stringHasValue;
|
||||
import static org.mybatis.generator.internal.util.messages.Messages.getString;
|
||||
|
||||
/**
|
||||
* @author zhangchenbiao
|
||||
* @FileName: MyIntrospectedTableMyBatis3Impl
|
||||
* @Description:
|
||||
* @date 2021-11-18 15:38
|
||||
*/
|
||||
public class MyIntrospectedTableMyBatis3Impl extends IntrospectedTableMyBatis3Impl {
|
||||
|
||||
private String enterpriseIdTableSuffix = "_${enterpriseId}";
|
||||
|
||||
@Override
|
||||
public String getFullyQualifiedTableNameAtRuntime() {
|
||||
return getTableName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAliasedFullyQualifiedTableNameAtRuntime() {
|
||||
return getTableName();
|
||||
}
|
||||
|
||||
private String getTableName() {
|
||||
String tableName = this.getTableConfiguration().getTableName();
|
||||
String tableSuffix = tableName.substring(tableName.lastIndexOf("_") + 1);
|
||||
if(StringUtils.isNotBlank(tableSuffix) && tableSuffix.length() == 32){
|
||||
//企业库
|
||||
return tableName.substring(0, tableName.lastIndexOf("_")) + enterpriseIdTableSuffix;
|
||||
}
|
||||
//平台库
|
||||
return tableName;
|
||||
}
|
||||
|
||||
private String getTableNameFromConfigFile() {
|
||||
String tableName = getTableName();
|
||||
if(tableName.contains(enterpriseIdTableSuffix)){
|
||||
tableName = tableName.replace(enterpriseIdTableSuffix,"");
|
||||
}
|
||||
return JavaBeansUtil.getCamelCaseString(tableName,true);
|
||||
}
|
||||
|
||||
private boolean isConfigTable() {
|
||||
String tableName = this.getTableConfiguration().getTableName();
|
||||
String tableSuffix = tableName.substring(tableName.lastIndexOf("_") + 1);
|
||||
if(StringUtils.isNotBlank(tableSuffix) && tableSuffix.length() == 32){
|
||||
//企业库
|
||||
return false;
|
||||
}
|
||||
//平台库
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String calculateMyBatis3XmlMapperFileName() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(getTableNameFromConfigFile());
|
||||
sb.append("Mapper.xml"); //$NON-NLS-1$
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void calculateJavaClientAttributes() {
|
||||
if (context.getJavaClientGeneratorConfiguration() == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(calculateJavaClientImplementationPackage());
|
||||
sb.append('.');
|
||||
sb.append(getTableNameFromConfigFile());
|
||||
sb.append("DAOImpl"); //$NON-NLS-1$
|
||||
setDAOImplementationType(sb.toString());
|
||||
|
||||
sb.setLength(0);
|
||||
sb.append(calculateJavaClientInterfacePackage());
|
||||
sb.append('.');
|
||||
sb.append(getTableNameFromConfigFile());
|
||||
sb.append("DAO"); //$NON-NLS-1$
|
||||
setDAOInterfaceType(sb.toString());
|
||||
|
||||
sb.setLength(0);
|
||||
sb.append(calculateJavaClientInterfacePackage());
|
||||
sb.append('.');
|
||||
if (stringHasValue(tableConfiguration.getMapperName())) {
|
||||
sb.append(tableConfiguration.getMapperName());
|
||||
} else {
|
||||
if (stringHasValue(fullyQualifiedTable.getDomainObjectSubPackage())) {
|
||||
sb.append(fullyQualifiedTable.getDomainObjectSubPackage());
|
||||
sb.append('.');
|
||||
}
|
||||
sb.append(getTableNameFromConfigFile());
|
||||
sb.append("Mapper"); //$NON-NLS-1$
|
||||
}
|
||||
setMyBatis3JavaMapperType(sb.toString());
|
||||
|
||||
sb.setLength(0);
|
||||
sb.append(calculateJavaClientInterfacePackage());
|
||||
sb.append('.');
|
||||
if (stringHasValue(tableConfiguration.getSqlProviderName())) {
|
||||
sb.append(tableConfiguration.getSqlProviderName());
|
||||
} else {
|
||||
if (stringHasValue(fullyQualifiedTable.getDomainObjectSubPackage())) {
|
||||
sb.append(fullyQualifiedTable.getDomainObjectSubPackage());
|
||||
sb.append('.');
|
||||
}
|
||||
sb.append(getTableNameFromConfigFile());
|
||||
sb.append("SqlProvider"); //$NON-NLS-1$
|
||||
}
|
||||
setMyBatis3SqlProviderType(sb.toString());
|
||||
|
||||
sb.setLength(0);
|
||||
sb.append(calculateJavaClientInterfacePackage());
|
||||
sb.append('.');
|
||||
sb.append(getTableNameFromConfigFile());
|
||||
sb.append("DynamicSqlSupport"); //$NON-NLS-1$
|
||||
setMyBatisDynamicSqlSupportType(sb.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void calculateModelAttributes() {
|
||||
String pakkage = calculateJavaModelPackage();
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(pakkage);
|
||||
sb.append('.');
|
||||
sb.append(getTableNameFromConfigFile());
|
||||
sb.append("Key"); //$NON-NLS-1$
|
||||
setPrimaryKeyType(sb.toString());
|
||||
|
||||
sb.setLength(0);
|
||||
sb.append(pakkage);
|
||||
sb.append('.');
|
||||
sb.append(getTableNameFromConfigFile() + "DO");
|
||||
setBaseRecordType(sb.toString());
|
||||
|
||||
sb.setLength(0);
|
||||
sb.append(pakkage);
|
||||
sb.append('.');
|
||||
sb.append(getTableNameFromConfigFile());
|
||||
sb.append("WithBLOBs"); //$NON-NLS-1$
|
||||
setRecordWithBLOBsType(sb.toString());
|
||||
|
||||
sb.setLength(0);
|
||||
sb.append(pakkage);
|
||||
sb.append('.');
|
||||
sb.append(getTableNameFromConfigFile());
|
||||
sb.append("Example"); //$NON-NLS-1$
|
||||
setExampleType(sb.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void calculateXmlMapperGenerator(AbstractJavaClientGenerator javaClientGenerator,
|
||||
List<String> warnings,
|
||||
ProgressCallback progressCallback) {
|
||||
xmlMapperGenerator = new MyXMLMapperGenerator();
|
||||
|
||||
initializeAbstractGenerator(xmlMapperGenerator, warnings, progressCallback);
|
||||
}
|
||||
|
||||
public class MyXMLMapperGenerator extends XMLMapperGenerator {
|
||||
|
||||
public MyXMLMapperGenerator() {
|
||||
super();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected XmlElement getSqlMapElement() {
|
||||
FullyQualifiedTable table = introspectedTable.getFullyQualifiedTable();
|
||||
progressCallback.startTask(getString(
|
||||
"Progress.12", table.toString())); //$NON-NLS-1$
|
||||
XmlElement answer = new XmlElement("mapper"); //$NON-NLS-1$
|
||||
String namespace = introspectedTable.getMyBatis3SqlMapNamespace();
|
||||
answer.addAttribute(new Attribute("namespace", //$NON-NLS-1$
|
||||
namespace));
|
||||
|
||||
context.getCommentGenerator().addRootComment(answer);
|
||||
addResultMapWithoutBLOBsElement(answer);
|
||||
addResultMapWithBLOBsElement(answer);
|
||||
addExampleWhereClauseElement(answer);
|
||||
addMyBatis3UpdateByExampleWhereClauseElement(answer);
|
||||
addBaseColumnListElement(answer);
|
||||
addBlobColumnListElement(answer);
|
||||
addInsertSelectiveElement(answer);
|
||||
addUpdateByPrimaryKeySelectiveElement(answer);
|
||||
return answer;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addInsertSelectiveElement(XmlElement parentElement) {
|
||||
if (introspectedTable.getRules().generateInsertSelective()) {
|
||||
AbstractXmlElementGenerator elementGenerator = new MyInsertSelectiveElementGenerator();
|
||||
initializeAndExecuteGenerator(elementGenerator, parentElement);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addUpdateByPrimaryKeySelectiveElement(XmlElement parentElement) {
|
||||
if (introspectedTable.getRules().generateUpdateByPrimaryKeySelective()) {
|
||||
AbstractXmlElementGenerator elementGenerator = new MyUpdateByPrimaryKeySelectiveElementGenerator();
|
||||
initializeAndExecuteGenerator(elementGenerator, parentElement);
|
||||
}
|
||||
}
|
||||
}
|
||||
@Override
|
||||
protected AbstractJavaClientGenerator createJavaClientGenerator() {
|
||||
if (context.getJavaClientGeneratorConfiguration() == null) {
|
||||
return null;
|
||||
}
|
||||
AbstractJavaClientGenerator javaGenerator;
|
||||
javaGenerator = new MyJavaMapperGenerator();
|
||||
|
||||
return javaGenerator;
|
||||
}
|
||||
|
||||
public class MyJavaMapperGenerator extends JavaMapperGenerator {
|
||||
|
||||
@Override
|
||||
public List<CompilationUnit> getCompilationUnits() {
|
||||
boolean isConfig = isConfigTable();
|
||||
progressCallback.startTask(getString("Progress.17", //$NON-NLS-1$
|
||||
introspectedTable.getFullyQualifiedTable().toString()));
|
||||
CommentGenerator commentGenerator = context.getCommentGenerator();
|
||||
|
||||
FullyQualifiedJavaType type = new FullyQualifiedJavaType(
|
||||
introspectedTable.getMyBatis3JavaMapperType());
|
||||
Interface interfaze = new Interface(type);
|
||||
interfaze.setVisibility(JavaVisibility.PUBLIC);
|
||||
commentGenerator.addJavaFileComment(interfaze);
|
||||
|
||||
String rootInterface = introspectedTable
|
||||
.getTableConfigurationProperty(PropertyRegistry.ANY_ROOT_INTERFACE);
|
||||
if (!stringHasValue(rootInterface)) {
|
||||
rootInterface = context.getJavaClientGeneratorConfiguration()
|
||||
.getProperty(PropertyRegistry.ANY_ROOT_INTERFACE);
|
||||
}
|
||||
|
||||
if (stringHasValue(rootInterface)) {
|
||||
FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType(
|
||||
rootInterface);
|
||||
interfaze.addSuperInterface(fqjt);
|
||||
interfaze.addImportedType(fqjt);
|
||||
}
|
||||
if(!isConfig){
|
||||
interfaze.addImportedType(new FullyQualifiedJavaType("org.apache.ibatis.annotations.Param"));
|
||||
}
|
||||
addInsertSelectiveMethod(interfaze);
|
||||
addUpdateByPrimaryKeySelectiveMethod(interfaze);
|
||||
List<Method> methods = interfaze.getMethods();
|
||||
for (Method method : methods) {
|
||||
List<Parameter> parameters = method.getParameters();
|
||||
for (Parameter parameter : parameters) {
|
||||
if(!isConfig){
|
||||
String name = parameter.getName();
|
||||
parameter.addAnnotation("@Param(\""+ name+"\")");
|
||||
}
|
||||
}
|
||||
if(!isConfig){
|
||||
Parameter enterpriseId = new Parameter(FullyQualifiedJavaType.getStringInstance(), "enterpriseId");
|
||||
enterpriseId.addAnnotation("@Param(\"enterpriseId\")");
|
||||
method.addParameter(enterpriseId);
|
||||
}
|
||||
}
|
||||
|
||||
List<CompilationUnit> answer = new ArrayList<CompilationUnit>();
|
||||
if (context.getPlugins().clientGenerated(interfaze, null,
|
||||
introspectedTable)) {
|
||||
answer.add(interfaze);
|
||||
}
|
||||
|
||||
List<CompilationUnit> extraCompilationUnits = getExtraCompilationUnits();
|
||||
if (extraCompilationUnits != null) {
|
||||
answer.addAll(extraCompilationUnits);
|
||||
}
|
||||
|
||||
return answer;
|
||||
}
|
||||
}
|
||||
|
||||
public class MyInsertSelectiveElementGenerator extends InsertSelectiveElementGenerator{
|
||||
|
||||
public MyInsertSelectiveElementGenerator() {
|
||||
super();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addElements(XmlElement parentElement) {
|
||||
boolean isConfig = isConfigTable();
|
||||
XmlElement answer = new XmlElement("insert"); //$NON-NLS-1$
|
||||
|
||||
answer.addAttribute(new Attribute(
|
||||
"id", introspectedTable.getInsertSelectiveStatementId())); //$NON-NLS-1$
|
||||
|
||||
/*
|
||||
FullyQualifiedJavaType parameterType = introspectedTable.getRules()
|
||||
.calculateAllFieldsClass();
|
||||
answer.addAttribute(new Attribute("parameterType", //$NON-NLS-1$
|
||||
parameterType.getFullyQualifiedName()));*/
|
||||
|
||||
context.getCommentGenerator().addComment(answer);
|
||||
|
||||
GeneratedKey gk = introspectedTable.getGeneratedKey();
|
||||
if (gk != null) {
|
||||
IntrospectedColumn introspectedColumn = introspectedTable
|
||||
.getColumn(gk.getColumn());
|
||||
/*if (introspectedColumn != null) {
|
||||
if (gk.isJdbcStandard()) {
|
||||
answer.addAttribute(new Attribute("useGeneratedKeys", "true")); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
answer.addAttribute(new Attribute("keyProperty", introspectedColumn.getJavaProperty())); //$NON-NLS-1$
|
||||
answer.addAttribute(new Attribute("keyColumn", introspectedColumn.getActualColumnName())); //$NON-NLS-1$
|
||||
} else {
|
||||
answer.addElement(getSelectKey(introspectedColumn, gk));
|
||||
}
|
||||
}*/
|
||||
if(introspectedColumn != null){
|
||||
answer.addAttribute(new Attribute("useGeneratedKeys", "true")); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
answer.addAttribute(new Attribute("keyProperty", "record."+introspectedColumn.getJavaProperty())); //$NON-NLS-1$
|
||||
answer.addAttribute(new Attribute("keyColumn", introspectedColumn.getActualColumnName())); //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
sb.append("insert into "); //$NON-NLS-1$
|
||||
sb.append(introspectedTable.getFullyQualifiedTableNameAtRuntime());
|
||||
answer.addElement(new TextElement(sb.toString()));
|
||||
|
||||
XmlElement insertTrimElement = new XmlElement("trim"); //$NON-NLS-1$
|
||||
insertTrimElement.addAttribute(new Attribute("prefix", "(")); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
insertTrimElement.addAttribute(new Attribute("suffix", ")")); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
insertTrimElement.addAttribute(new Attribute("suffixOverrides", ",")); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
answer.addElement(insertTrimElement);
|
||||
|
||||
XmlElement valuesTrimElement = new XmlElement("trim"); //$NON-NLS-1$
|
||||
valuesTrimElement.addAttribute(new Attribute("prefix", "values (")); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
valuesTrimElement.addAttribute(new Attribute("suffix", ")")); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
valuesTrimElement.addAttribute(new Attribute("suffixOverrides", ",")); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
answer.addElement(valuesTrimElement);
|
||||
|
||||
for (IntrospectedColumn introspectedColumn : ListUtilities.removeIdentityAndGeneratedAlwaysColumns(introspectedTable.getAllColumns())) {
|
||||
|
||||
if (introspectedColumn.isSequenceColumn() || introspectedColumn.getFullyQualifiedJavaType().isPrimitive()) {
|
||||
sb.setLength(0);
|
||||
sb.append(MyBatis3FormattingUtilities
|
||||
.getEscapedColumnName(introspectedColumn));
|
||||
sb.append(',');
|
||||
insertTrimElement.addElement(new TextElement(sb.toString()));
|
||||
|
||||
sb.setLength(0);
|
||||
sb.append(MyBatis3FormattingUtilities
|
||||
.getParameterClause(introspectedColumn));
|
||||
sb.append(',');
|
||||
valuesTrimElement.addElement(new TextElement(sb.toString()));
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
sb.setLength(0);
|
||||
if(!isConfig){
|
||||
sb.append("record.");
|
||||
}
|
||||
sb.append(introspectedColumn.getJavaProperty());
|
||||
sb.append(" != null"); //$NON-NLS-1$
|
||||
XmlElement insertNotNullElement = new XmlElement("if"); //$NON-NLS-1$
|
||||
insertNotNullElement.addAttribute(new Attribute(
|
||||
"test", sb.toString())); //$NON-NLS-1$
|
||||
|
||||
sb.setLength(0);
|
||||
sb.append(MyBatis3FormattingUtilities
|
||||
.getEscapedColumnName(introspectedColumn));
|
||||
sb.append(',');
|
||||
insertNotNullElement.addElement(new TextElement(sb.toString()));
|
||||
insertTrimElement.addElement(insertNotNullElement);
|
||||
|
||||
sb.setLength(0);
|
||||
if(!isConfig){
|
||||
sb.append("record.");
|
||||
}
|
||||
sb.append(introspectedColumn.getJavaProperty());
|
||||
sb.append(" != null"); //$NON-NLS-1$
|
||||
XmlElement valuesNotNullElement = new XmlElement("if"); //$NON-NLS-1$
|
||||
valuesNotNullElement.addAttribute(new Attribute(
|
||||
"test", sb.toString())); //$NON-NLS-1$
|
||||
|
||||
sb.setLength(0);
|
||||
if(isConfig){
|
||||
sb.append("#{"+introspectedColumn.getJavaProperty() + "}");
|
||||
}else{
|
||||
sb.append("#{record."+introspectedColumn.getJavaProperty() + "}");
|
||||
}
|
||||
sb.append(',');
|
||||
valuesNotNullElement.addElement(new TextElement(sb.toString()));
|
||||
valuesTrimElement.addElement(valuesNotNullElement);
|
||||
}
|
||||
|
||||
if (context.getPlugins().sqlMapInsertSelectiveElementGenerated(answer, introspectedTable)) {
|
||||
parentElement.addElement(answer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class MyUpdateByPrimaryKeySelectiveElementGenerator extends UpdateByPrimaryKeySelectiveElementGenerator{
|
||||
public MyUpdateByPrimaryKeySelectiveElementGenerator() {
|
||||
super();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addElements(XmlElement parentElement) {
|
||||
boolean isConfig = isConfigTable();
|
||||
XmlElement answer = new XmlElement("update"); //$NON-NLS-1$
|
||||
|
||||
answer.addAttribute(new Attribute(
|
||||
"id", introspectedTable.getUpdateByPrimaryKeySelectiveStatementId())); //$NON-NLS-1$
|
||||
|
||||
String parameterType;
|
||||
|
||||
if (introspectedTable.getRules().generateRecordWithBLOBsClass()) {
|
||||
parameterType = introspectedTable.getRecordWithBLOBsType();
|
||||
} else {
|
||||
parameterType = introspectedTable.getBaseRecordType();
|
||||
}
|
||||
|
||||
/*answer.addAttribute(new Attribute("parameterType", //$NON-NLS-1$
|
||||
parameterType));*/
|
||||
|
||||
context.getCommentGenerator().addComment(answer);
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
sb.append("update "); //$NON-NLS-1$
|
||||
sb.append(introspectedTable.getFullyQualifiedTableNameAtRuntime());
|
||||
answer.addElement(new TextElement(sb.toString()));
|
||||
|
||||
XmlElement dynamicElement = new XmlElement("set"); //$NON-NLS-1$
|
||||
answer.addElement(dynamicElement);
|
||||
|
||||
for (IntrospectedColumn introspectedColumn : ListUtilities.removeGeneratedAlwaysColumns(introspectedTable.getNonPrimaryKeyColumns())) {
|
||||
sb.setLength(0);
|
||||
if(!isConfig){
|
||||
sb.append("record.");
|
||||
}
|
||||
sb.append(introspectedColumn.getJavaProperty());
|
||||
sb.append(" != null"); //$NON-NLS-1$
|
||||
XmlElement isNotNullElement = new XmlElement("if"); //$NON-NLS-1$
|
||||
isNotNullElement.addAttribute(new Attribute("test", sb.toString())); //$NON-NLS-1$
|
||||
dynamicElement.addElement(isNotNullElement);
|
||||
|
||||
sb.setLength(0);
|
||||
sb.append(MyBatis3FormattingUtilities
|
||||
.getEscapedColumnName(introspectedColumn));
|
||||
sb.append(" = ");
|
||||
if(!isConfig){
|
||||
sb.append("#{record."+introspectedColumn.getJavaProperty() + "}");
|
||||
}else{
|
||||
sb.append("#{"+introspectedColumn.getJavaProperty() + "}");
|
||||
}
|
||||
sb.append(',');
|
||||
|
||||
isNotNullElement.addElement(new TextElement(sb.toString()));
|
||||
}
|
||||
|
||||
boolean and = false;
|
||||
for (IntrospectedColumn introspectedColumn : introspectedTable.getPrimaryKeyColumns()) {
|
||||
sb.setLength(0);
|
||||
if (and) {
|
||||
sb.append(" and "); //$NON-NLS-1$
|
||||
} else {
|
||||
sb.append("where "); //$NON-NLS-1$
|
||||
and = true;
|
||||
}
|
||||
|
||||
sb.append(MyBatis3FormattingUtilities
|
||||
.getEscapedColumnName(introspectedColumn));
|
||||
sb.append(" = ");
|
||||
if(isConfig){
|
||||
sb.append("#{"+introspectedColumn.getJavaProperty() + "}");
|
||||
}else{
|
||||
sb.append("#{record."+introspectedColumn.getJavaProperty() + "}");
|
||||
}
|
||||
answer.addElement(new TextElement(sb.toString()));
|
||||
}
|
||||
|
||||
if (context.getPlugins()
|
||||
.sqlMapUpdateByPrimaryKeySelectiveElementGenerated(answer,
|
||||
introspectedTable)) {
|
||||
parentElement.addElement(answer);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,190 @@
|
||||
package generator.defined;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.mybatis.generator.api.IntrospectedColumn;
|
||||
import org.mybatis.generator.api.IntrospectedTable;
|
||||
import org.mybatis.generator.api.PluginAdapter;
|
||||
import org.mybatis.generator.api.dom.java.*;
|
||||
import org.mybatis.generator.api.dom.xml.Document;
|
||||
import org.mybatis.generator.api.dom.xml.XmlElement;
|
||||
import org.mybatis.generator.codegen.mybatis3.xmlmapper.elements.AbstractXmlElementGenerator;
|
||||
|
||||
import java.sql.Types;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* @author zhangchenbiao
|
||||
* @FileName: MyPluginAdapter
|
||||
* @Description: 自定义生成器
|
||||
* @date 2021-11-18 14:11
|
||||
*/
|
||||
public class MyPluginAdapter extends PluginAdapter {
|
||||
|
||||
@Override
|
||||
public boolean validate(List<String> list) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* model新增import
|
||||
* @param topLevelClass
|
||||
* @param introspectedTable
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
|
||||
topLevelClass.addImportedType("java.io.Serializable");
|
||||
topLevelClass.addImportedType("lombok.Data");
|
||||
topLevelClass.addImportedType("lombok.Builder");
|
||||
topLevelClass.addImportedType("lombok.NoArgsConstructor");
|
||||
topLevelClass.addImportedType("lombok.AllArgsConstructor");
|
||||
topLevelClass.addImportedType("io.swagger.annotations.ApiModelProperty");
|
||||
topLevelClass.addAnnotation("@Data");
|
||||
topLevelClass.addAnnotation("@Builder");
|
||||
topLevelClass.addAnnotation("@NoArgsConstructor");
|
||||
topLevelClass.addAnnotation("@AllArgsConstructor");
|
||||
topLevelClass.addSuperInterface(new FullyQualifiedJavaType("java.io.Serializable"));
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* model不生成set方法
|
||||
* @param method
|
||||
* @param topLevelClass
|
||||
* @param introspectedColumn
|
||||
* @param introspectedTable
|
||||
* @param modelClassType
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public boolean modelSetterMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* model不生成get方法
|
||||
* @param method
|
||||
* @param topLevelClass
|
||||
* @param introspectedColumn
|
||||
* @param introspectedTable
|
||||
* @param modelClassType
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public boolean modelGetterMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* sql文件 新增动态sql
|
||||
* @param document
|
||||
* @param introspectedTable
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public boolean sqlMapDocumentGenerated(Document document, IntrospectedTable introspectedTable) {
|
||||
AbstractXmlElementGenerator elementGenerator = new CustomAbstractXmlElementGenerator();
|
||||
elementGenerator.setContext(context);
|
||||
elementGenerator.setIntrospectedTable(introspectedTable);
|
||||
elementGenerator.addElements(document.getRootElement());
|
||||
return super.sqlMapDocumentGenerated(document, introspectedTable);
|
||||
}
|
||||
|
||||
/**
|
||||
* mapper文件备注
|
||||
* @param interfaze
|
||||
* @param topLevelClass
|
||||
* @param introspectedTable
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public boolean clientGenerated(Interface interfaze, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
|
||||
interfaze.addJavaDocLine("/**");
|
||||
interfaze.addJavaDocLine(" * @author zhangchenbiao" );
|
||||
interfaze.addJavaDocLine(" * @date " + (new SimpleDateFormat("yyyy-MM-dd hh:mm")).format(new Date()));
|
||||
interfaze.addJavaDocLine(" */");
|
||||
return super.clientGenerated(interfaze, topLevelClass, introspectedTable);
|
||||
}
|
||||
|
||||
/**
|
||||
* sql新增动态sql
|
||||
*/
|
||||
public class CustomAbstractXmlElementGenerator extends AbstractXmlElementGenerator {
|
||||
|
||||
@Override
|
||||
public void addElements(XmlElement parentElement) {
|
||||
/*String tableName =getTableName();
|
||||
// 增加base_query
|
||||
XmlElement sql = new XmlElement("sql");
|
||||
sql.addAttribute(new Attribute("id", "dynamicQuery"));
|
||||
//在这里添加where条件
|
||||
XmlElement selectTrimElement = new XmlElement("trim"); //设置trim标签
|
||||
selectTrimElement.addAttribute(new Attribute("prefix", "WHERE"));
|
||||
selectTrimElement.addAttribute(new Attribute("prefixOverrides", "AND | OR")); //添加where和and
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for(IntrospectedColumn introspectedColumn : introspectedTable.getAllColumns()) {
|
||||
XmlElement selectNotNullElement = new XmlElement("if"); //$NON-NLS-1$
|
||||
sb.setLength(0);
|
||||
sb.append("null != ");
|
||||
sb.append(introspectedColumn.getJavaProperty());
|
||||
selectNotNullElement.addAttribute(new Attribute("test", sb.toString()));
|
||||
sb.setLength(0);
|
||||
// 添加and
|
||||
sb.append(" and ");
|
||||
// 添加别名t
|
||||
sb.append("t.");
|
||||
sb.append(MyBatis3FormattingUtilities.getEscapedColumnName(introspectedColumn));
|
||||
// 添加等号
|
||||
sb.append(" = ");
|
||||
sb.append("#{"+ introspectedColumn.getJavaProperty() +"}");
|
||||
selectNotNullElement.addElement(new TextElement(sb.toString()));
|
||||
selectTrimElement.addElement(selectNotNullElement);
|
||||
}
|
||||
|
||||
//sql.addElement(selectTrimElement);
|
||||
parentElement.addElement(sql);
|
||||
|
||||
// 公用include
|
||||
XmlElement include = new XmlElement("include");
|
||||
include.addAttribute(new Attribute("refid", "dynamicQuery"));*/
|
||||
|
||||
}
|
||||
|
||||
private String getTableName() {
|
||||
String tableName = introspectedTable.getTableConfiguration().getTableName();
|
||||
String tableSuffix = tableName.substring(tableName.lastIndexOf("_") + 1);
|
||||
if(StringUtils.isNotBlank(tableSuffix) && tableSuffix.length() == 32){
|
||||
//企业库
|
||||
return tableName.substring(0, tableName.lastIndexOf("_")) + "_${enterpriseId}";
|
||||
}
|
||||
//平台库
|
||||
return tableName;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 对数据库中的tinyint->byte 处理为 tinyint->integer
|
||||
* @param field
|
||||
* @param topLevelClass
|
||||
* @param introspectedColumn
|
||||
* @param introspectedTable
|
||||
* @param modelClassType
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public boolean modelFieldGenerated(Field field,
|
||||
TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn,
|
||||
IntrospectedTable introspectedTable,
|
||||
ModelClassType modelClassType){
|
||||
int jdbcType = introspectedColumn.getJdbcType();
|
||||
if(jdbcType == Types.TINYINT){
|
||||
field.setType(new FullyQualifiedJavaType(Integer.class.getName()));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user