
net.xiaoboli.mgp.ServicePlugin Maven / Gradle / Ivy
package net.xiaoboli.mgp;
import lombok.SneakyThrows;
import org.apache.commons.lang3.StringUtils;
import org.mybatis.generator.api.*;
import org.mybatis.generator.api.dom.java.*;
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 org.mybatis.generator.codegen.mybatis3.MyBatis3FormattingUtilities;
import org.mybatis.generator.logging.Log;
import org.mybatis.generator.logging.LogFactory;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import static org.mybatis.generator.internal.util.StringUtility.stringHasValue;
public class ServicePlugin extends PluginAdapter {
// 项目目录,一般为 src/main/java
private String targetProject;
private String targetImplProject;
// service包名,如:service.service
private String servicePackage;
// service实现类包名,如:service.service.impl
private String serviceImplPackage;
// service接口名前缀
private String servicePrefix;
// service接口名后缀
private String serviceSuffix;
// mapper接口的父接口
private String baseMapper;
// service接口的父接口
private String baseService;
// service实现类的父类
private String baseServiceClass;
private String recordType;
private String modelName;
private FullyQualifiedJavaType model;
private String serviceName;
private String serviceImplName;
private String mapperPublic;
private String mapperSystem;
private String mapperNS;
private String mapperTargetProject;
private Log log;
@Override
public void initialized(IntrospectedTable introspectedTable) {
this.log = LogFactory.getLog(this.getClass());
//
targetProject = properties.getProperty("targetProject", "");
targetImplProject = properties.getProperty("targetImplProject", "");
servicePackage = properties.getProperty("servicePackage", "system.service");
serviceImplPackage = properties.getProperty("serviceImplPackage", "");
//
String serviceProject = introspectedTable.getTableConfiguration().getProperty("serviceProject");
if (StringUtils.isNotBlank(serviceProject)) {
targetProject = serviceProject;
}
//
String serviceImplProject = introspectedTable.getTableConfiguration().getProperty("serviceImplProject");
if (StringUtils.isNotBlank(serviceImplProject)) {
targetImplProject = serviceImplProject;
}
//
String sp = introspectedTable.getTableConfiguration().getProperty("servicePackage");
if (StringUtils.isNotBlank(sp)) {
servicePackage = sp;
}
//
String tip = introspectedTable.getTableConfiguration().getProperty("serviceImplPackage");
if (StringUtils.isNotBlank(tip)) {
serviceImplPackage = tip;
}
//
targetImplProject = stringHasValue(targetImplProject) ? targetImplProject : targetProject;
serviceImplPackage = stringHasValue(serviceImplPackage) ? serviceImplPackage : (servicePackage + ".impl");
//
if (!stringHasValue(targetProject)) {
throw new RuntimeException("property serviceProject empty");
}
if (!stringHasValue(targetImplProject)) {
throw new RuntimeException("property targetImplProject empty");
}
if (!stringHasValue(servicePackage)) {
throw new RuntimeException("property servicePackage empty");
}
if (!stringHasValue(serviceImplPackage)) {
throw new RuntimeException("property serviceImplPackage empty");
}
// --------------------------------------
servicePrefix = properties.getProperty("servicePrefix");
servicePrefix = stringHasValue(servicePrefix) ? servicePrefix : "";
serviceSuffix = properties.getProperty("serviceSuffix", "Service");
serviceSuffix = stringHasValue(serviceSuffix) ? serviceSuffix : "";
baseMapper = properties.getProperty("baseMapper", "framework.base.BaseMapper");
baseService = properties.getProperty("baseService", "framework.base.BaseService");
baseServiceClass = properties.getProperty("baseServiceClass", "");
mapperTargetProject = properties.getProperty("mapperTargetProject", "");
}
@Override
public boolean validate(List warnings) {
boolean valid = true;
return valid;
}
@SneakyThrows
@Override
public List contextGenerateAdditionalXmlFiles(IntrospectedTable introspectedTable) {
List answer = new ArrayList<>();
try {
//mapper
if (stringHasValue(this.mapperTargetProject)) {
GeneratedXmlFile mapXml = generateMapperXml(introspectedTable);
if (PluginUtil.canWrite(mapXml))
answer.add(mapXml);
else
log.warn(PluginUtil.canonicalPath(mapXml) + " is exists, skip create, you can delete it and regenerate");
}
} catch (Exception exception) {
exception.printStackTrace();
throw exception;
}
return answer;
}
@Override
public List contextGenerateAdditionalJavaFiles(IntrospectedTable introspectedTable) {
List answer = new ArrayList<>();
try {
this.generateAdditionalJavaFiles(introspectedTable, answer);
} catch (Exception exception) {
exception.printStackTrace();
throw exception;
}
return answer;
}
/**
* 添加mapper
*
* @param interfaze
* @param topLevelClass
* @param introspectedTable
* @return
*/
@SneakyThrows
@Override
public boolean clientGenerated(Interface interfaze, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
boolean generated = true;
String recordType = introspectedTable.getBaseRecordType();
String modelName = recordType.substring(recordType.lastIndexOf(".") + 1);
//
//interface SysUserMapper extends Mapper, BaseMapper {
if (stringHasValue(baseMapper)) {
interfaze.addImportedType(new FullyQualifiedJavaType(baseMapper));
interfaze.addImportedType(new FullyQualifiedJavaType(recordType));
//
interfaze.addImportedType(introspectedTable.getPrimaryKeyColumns().get(0).getFullyQualifiedJavaType());
String bs = baseMapper + String.format("<%s, %s>", modelName, introspectedTable.getPrimaryKeyColumns().get(0).getFullyQualifiedJavaType().getFullyQualifiedName());
interfaze.addSuperInterface(new FullyQualifiedJavaType(bs));
}
//ADD listQuery
String modelMethodQuery = (String) introspectedTable.getAttribute("modelMethodQuery");
String modelMethodResult = (String) introspectedTable.getAttribute("modelMethodResult");
if (StringUtils.isNotBlank(modelMethodQuery) && StringUtils.isNotBlank(modelMethodResult)) {
interfaze.addImportedType(new FullyQualifiedJavaType(modelMethodQuery));
interfaze.addImportedType(new FullyQualifiedJavaType(modelMethodResult));
interfaze.addImportedType(new FullyQualifiedJavaType("java.util.List"));
//
Method listQuery = new Method("listQuery");
listQuery.addParameter(new Parameter(new FullyQualifiedJavaType(modelMethodQuery), "query"));
listQuery.setReturnType(new FullyQualifiedJavaType("List<" + modelMethodResult + ">"));
//
interfaze.addMethod(listQuery);
}
//已有文件检查
String targetPackage = context.getJavaClientGeneratorConfiguration().getTargetPackage();
String targetProject = context.getJavaClientGeneratorConfiguration().getTargetProject();
recordType = introspectedTable.getBaseRecordType();
String fileName = recordType.substring(recordType.lastIndexOf(".") + 1) + "Mapper.java";
//已存在检查
generated = PluginUtil.canWrite(targetProject, targetPackage, fileName);
if (!generated)
log.warn(PluginUtil.canonicalPath(targetProject, targetPackage, fileName) + " is exists, skip create, you can delete it and regenerate");
//
return generated;
}
@SneakyThrows
private void generateAdditionalJavaFiles(IntrospectedTable introspectedTable, List answer) {
recordType = introspectedTable.getBaseRecordType();
modelName = recordType.substring(recordType.lastIndexOf(".") + 1);
model = new FullyQualifiedJavaType(recordType);
serviceName = PluginUtil.serviceName(introspectedTable, servicePackage, servicePrefix, serviceSuffix);
serviceImplName = PluginUtil.serviceImplName(introspectedTable, serviceImplPackage, servicePrefix, serviceSuffix);
//
GeneratedJavaFile face = generateServiceInterface(introspectedTable);
if (PluginUtil.canWrite(face))
answer.add(face);
else
log.warn(PluginUtil.canonicalPath(face) + " is exists, skip create, you can delete it and regenerate");
GeneratedJavaFile impl = generateServiceImpl(introspectedTable);
if (PluginUtil.canWrite(impl))
answer.add(impl);
else
log.warn(PluginUtil.canonicalPath(impl) + " is exists, skip create, you can delete it and regenerate");
}
private GeneratedXmlFile generateMapperXml(IntrospectedTable introspectedTable) {
String tableName = introspectedTable.getAliasedFullyQualifiedTableNameAtRuntime();
//
Document document = new Document(this.mapperPublic, this.mapperSystem);
XmlElement root = new XmlElement("mapper");
root.addAttribute(new Attribute("namespace", this.mapperNS));
document.setRootElement(root);
//
document.getRootElement().addElement(new TextElement(""));
//
XmlElement list = new XmlElement("select");
list.addAttribute(new Attribute("id", "list"));
list.addAttribute(new Attribute("resultType", introspectedTable.getBaseRecordType()));
list.addAttribute(new Attribute("parameterType", introspectedTable.getBaseRecordType()));
list.addElement(new TextElement(String.format(
"SELECT\n" +
" \n" +
" FROM %s\n" +
" \n" +
" \n" +
" \n" +
" ORDER BY %s DESC",
tableName,
MyBatis3FormattingUtilities.getEscapedColumnName(introspectedTable.getPrimaryKeyColumns().get(0))
)));
document.getRootElement().addElement(list);
//
String modelMethodQuery = (String) introspectedTable.getAttribute("modelMethodQuery");
String modelMethodResult = (String) introspectedTable.getAttribute("modelMethodResult");
if (StringUtils.isNotBlank(modelMethodQuery) && StringUtils.isNotBlank(modelMethodResult)) {
document.getRootElement().addElement(new TextElement(""));
//
list = new XmlElement("select");
list.addAttribute(new Attribute("id", "listQuery"));
list.addAttribute(new Attribute("resultType", modelMethodResult));
list.addAttribute(new Attribute("parameterType", modelMethodQuery));
list.addElement(new TextElement("SELECT"));
list.addElement(new TextElement(" "));
list.addElement(new TextElement("FROM " + tableName));
list.addElement(buildIndexWhere(introspectedTable));
String keyName = MyBatis3FormattingUtilities.getEscapedColumnName(introspectedTable.getPrimaryKeyColumns().get(0));
list.addElement(new TextElement("ORDER BY " + keyName + " DESC"));
//
document.getRootElement().addElement(list);
}
//
String fileName = modelName + "Mapper.xml";
String targetPackage = "";
boolean isMergeable = true;
GeneratedXmlFile gf = new GeneratedXmlFile(document, fileName, targetPackage, this.mapperTargetProject, isMergeable, context.getXmlFormatter());
return gf;
}
// 生成service接口
private GeneratedJavaFile generateServiceInterface(IntrospectedTable introspectedTable) {
FullyQualifiedJavaType service = new FullyQualifiedJavaType(serviceName);
Interface serviceInterface = new Interface(service);
serviceInterface.setVisibility(JavaVisibility.PUBLIC);
// 添加父接口
if (stringHasValue(baseService)) {
serviceInterface.addImportedType(new FullyQualifiedJavaType(baseService));
serviceInterface.addImportedType(new FullyQualifiedJavaType(recordType));
//
serviceInterface.addImportedType(introspectedTable.getPrimaryKeyColumns().get(0).getFullyQualifiedJavaType());
String bs = this.baseService + String.format("<%s, %s>", modelName, introspectedTable.getPrimaryKeyColumns().get(0).getFullyQualifiedJavaType().getFullyQualifiedName());
serviceInterface.addSuperInterface(new FullyQualifiedJavaType(bs));
}
// 包导入
serviceInterface.addImportedType(model);
//
String modelMethodQuery = (String) introspectedTable.getAttribute("modelMethodQuery");
String modelMethodResult = (String) introspectedTable.getAttribute("modelMethodResult");
if (StringUtils.isNotBlank(modelMethodQuery) && StringUtils.isNotBlank(modelMethodResult)) {
serviceInterface.addImportedType(new FullyQualifiedJavaType(modelMethodQuery));
serviceInterface.addImportedType(new FullyQualifiedJavaType(modelMethodResult));
serviceInterface.addImportedType(new FullyQualifiedJavaType("com.github.pagehelper.PageInfo"));
//
Method method = new Method("listQuery");
method.addParameter(new Parameter(new FullyQualifiedJavaType(modelMethodQuery), "query"));
method.setReturnType(new FullyQualifiedJavaType("PageInfo<" + modelMethodResult + ">"));
method.addParameter(new Parameter(new FullyQualifiedJavaType("int"), "pageIndex"));
method.addParameter(new Parameter(new FullyQualifiedJavaType("int"), "pageSize"));
serviceInterface.addMethod(method);
//
method = new Method("listOne");
method.addParameter(new Parameter(new FullyQualifiedJavaType(modelMethodQuery), "query"));
method.setReturnType(new FullyQualifiedJavaType(modelMethodResult));
serviceInterface.addMethod(method);
}
//
GeneratedJavaFile gjf = new GeneratedJavaFile(serviceInterface, targetProject, context.getJavaFormatter());
//
return gjf;
}
// 生成serviceImpl实现类
private GeneratedJavaFile generateServiceImpl(IntrospectedTable introspectedTable) {
FullyQualifiedJavaType service = new FullyQualifiedJavaType(serviceName);
FullyQualifiedJavaType serviceImpl = new FullyQualifiedJavaType(serviceImplName);
TopLevelClass clazz = new TopLevelClass(serviceImpl);
//描述类的作用域修饰符
clazz.setVisibility(JavaVisibility.PUBLIC);
//描述类 引入的类
clazz.addImportedType(service);
// 包导入
clazz.addImportedType(model);
clazz.addImportedType(new FullyQualifiedJavaType("java.util.List"));
//描述类 的实现接口类
clazz.addSuperInterface(service);
if (stringHasValue(baseServiceClass)) {
clazz.addImportedType(baseServiceClass);
clazz.addImportedType(recordType);
//
clazz.addImportedType(introspectedTable.getPrimaryKeyColumns().get(0).getFullyQualifiedJavaType());
String bs = this.baseServiceClass + String.format("<%s, %s>", modelName, introspectedTable.getPrimaryKeyColumns().get(0).getFullyQualifiedJavaType().getFullyQualifiedName());
clazz.setSuperClass(new FullyQualifiedJavaType(bs));
}
clazz.addImportedType(new FullyQualifiedJavaType("org.springframework.stereotype.Service"));
clazz.addAnnotation("@Service");
//
String daoFieldType = introspectedTable.getMyBatis3JavaMapperType();
String daoFieldName = "mapper";
//描述类的成员属性
Field daoField = new Field(daoFieldName, new FullyQualifiedJavaType(daoFieldType));
clazz.addImportedType(new FullyQualifiedJavaType(daoFieldType));
clazz.addImportedType(new FullyQualifiedJavaType("org.springframework.beans.factory.annotation.Autowired"));
clazz.addImportedType(new FullyQualifiedJavaType("lombok.Getter"));
//描述成员属性 的注解
daoField.addAnnotation("@Autowired");
daoField.addAnnotation("@Getter");
//描述成员属性修饰符
daoField.setVisibility(JavaVisibility.PRIVATE);
clazz.addField(daoField);
//
String modelMethodQuery = (String) introspectedTable.getAttribute("modelMethodQuery");
String modelMethodResult = (String) introspectedTable.getAttribute("modelMethodResult");
if (StringUtils.isNotBlank(modelMethodQuery) && StringUtils.isNotBlank(modelMethodResult)) {
clazz.addImportedType(new FullyQualifiedJavaType(modelMethodQuery));
clazz.addImportedType(new FullyQualifiedJavaType(modelMethodResult));
clazz.addImportedType(new FullyQualifiedJavaType("com.github.pagehelper.PageHelper"));
clazz.addImportedType(new FullyQualifiedJavaType("com.github.pagehelper.PageInfo"));
//
Method method = new Method("listQuery");
method.setVisibility(JavaVisibility.PUBLIC);
method.addParameter(new Parameter(new FullyQualifiedJavaType(modelMethodQuery), "query"));
method.setReturnType(new FullyQualifiedJavaType("PageInfo<" + modelMethodResult + ">"));
method.addParameter(new Parameter(new FullyQualifiedJavaType("int"), "pageIndex"));
method.addParameter(new Parameter(new FullyQualifiedJavaType("int"), "pageSize"));
method.addBodyLine("PageHelper.startPage(pageIndex, pageSize);");
method.addBodyLine("List<" + new FullyQualifiedJavaType(modelMethodResult).getShortName() + "> list = mapper.listQuery(query);");
method.addBodyLine("return PageInfo.of(list);");
clazz.addMethod(method);
//
method = new Method("listOne");
method.setVisibility(JavaVisibility.PUBLIC);
method.addParameter(new Parameter(new FullyQualifiedJavaType(modelMethodQuery), "query"));
method.setReturnType(new FullyQualifiedJavaType(modelMethodResult));
method.addBodyLine("PageHelper.startPage(1, 1, false);");
method.addBodyLine("List<" + new FullyQualifiedJavaType(modelMethodResult).getShortName() + "> list = mapper.listQuery(query);");
method.addBodyLine("return list.size() == 0 ? null : list.get(0);");
clazz.addMethod(method);
}
//
GeneratedJavaFile gjf2 = new GeneratedJavaFile(clazz, targetImplProject, context.getJavaFormatter());
return gjf2;
}
/**
* 添加自定义方法到mapper
*/
@Override
public boolean sqlMapDocumentGenerated(Document document, IntrospectedTable introspectedTable) {
String tableName = introspectedTable.getAliasedFullyQualifiedTableNameAtRuntime();
//All_Column_List
this.addAllColumnElement(document.getRootElement(), introspectedTable);
//list
this.addAllWhere(document.getRootElement(), introspectedTable);
//list
this.addAllSet(document.getRootElement(), introspectedTable);
//loadByIds
XmlElement loadByIds = new XmlElement("select");
loadByIds.addAttribute(new Attribute("id", "loadByIds"));
//loadByIds.addAttribute(new Attribute("resultMap", "BaseResultMap"));
loadByIds.addAttribute(new Attribute("resultType", introspectedTable.getBaseRecordType()));
loadByIds.addElement(new TextElement(String.format(
"SELECT\n" +
" \n" +
" FROM %s\n" +
" \n" +
" \n" +
" \n" +
" %s IN \n" +
" #{id} \n" +
" \n" +
" \n" +
" 1 = 0\n" +
" \n" +
" \n" +
" ",
tableName,
introspectedTable.getPrimaryKeyColumns().get(0).getActualColumnName()
)));
document.getRootElement().addElement(loadByIds);
//loadByNotIds
XmlElement loadByNotIds = new XmlElement("select");
loadByNotIds.addAttribute(new Attribute("id", "loadByNotIds"));
// loadByNotIds.addAttribute(new Attribute("resultMap", "BaseResultMap"));
loadByNotIds.addAttribute(new Attribute("resultType", introspectedTable.getBaseRecordType()));
loadByNotIds.addElement(new TextElement(String.format(
"SELECT\n" +
" \n" +
" FROM %s\n" +
" \n" +
" \n" +
" \n" +
" %s NOT IN \n" +
" #{id} \n" +
" \n" +
" \n" +
" 1 = 0\n" +
" \n" +
" \n" +
" ",
tableName,
introspectedTable.getPrimaryKeyColumns().get(0).getActualColumnName()
)));
document.getRootElement().addElement(loadByNotIds);
//deleteByIds
XmlElement deleteByIds = new XmlElement("delete");
deleteByIds.addAttribute(new Attribute("id", "deleteByIds"));
deleteByIds.addElement(new TextElement(String.format(
"DELETE FROM %s \n" +
" \n" +
" \n" +
" \n" +
" %s IN \n" +
" #{id} \n" +
" \n" +
" \n" +
" 1 = 0\n" +
" \n" +
" \n" +
" ",
tableName,
introspectedTable.getPrimaryKeyColumns().get(0).getActualColumnName()
)));
document.getRootElement().addElement(deleteByIds);
//deleteByNotIds
XmlElement deleteByNotIds = new XmlElement("delete");
deleteByNotIds.addAttribute(new Attribute("id", "deleteByNotIds"));
deleteByNotIds.addElement(new TextElement(String.format(
"DELETE FROM %s \n" +
" \n" +
" \n" +
" \n" +
" %s NOT IN \n" +
" #{id} \n" +
" \n" +
" \n" +
" 1 = 0\n" +
" \n" +
" \n" +
" ",
tableName,
introspectedTable.getPrimaryKeyColumns().get(0).getActualColumnName()
)));
document.getRootElement().addElement(deleteByNotIds);
//暂存,以便后扩展XML生成
this.mapperPublic = document.getPublicId();
this.mapperSystem = document.getSystemId();
for (Attribute attribute : document.getRootElement().getAttributes()) {
if (attribute.getName().equals("namespace")) {
this.mapperNS = attribute.getValue();
break;
}
}
//
return super.sqlMapDocumentGenerated(document, introspectedTable);
}
private void addInsertElement(XmlElement element, IntrospectedTable introspectedTable) {
XmlElement list = new XmlElement("sql");
list.addAttribute(new Attribute("id", "insertColumn"));
/*
insert into A
B,
C,
D
#{b,jdbcType=INTEGER},
#{c,jdbcType=VARCHAR},
#{d,jdbcType=BIT},
* */
//element.addElement(list);
}
private void addAllColumnElement(XmlElement element, IntrospectedTable introspectedTable) {
XmlElement list = new XmlElement("sql");
list.addAttribute(new Attribute("id", "All_Column_List"));
// blob
// list.addElement(new TextElement(" "));
// if (introspectedTable.hasBLOBColumns()) {
// list.addElement(new TextElement(","));
// list.addElement(new TextElement(" "));
// }
int indent = 4;
List allColumns = introspectedTable.getAllColumns();
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < allColumns.size(); i++) {
IntrospectedColumn column = allColumns.get(i);
//
// if ((i + 1) % 10 == 0) {
// list.addElement(new TextElement(buffer.toString()));
// buffer = new StringBuffer();
// }
//
if ((buffer.length() + column.getActualColumnName().length() + 2 + indent) >= 100) {
list.addElement(new TextElement(buffer.toString()));
buffer = new StringBuffer();
}
buffer.append(column.getActualColumnName()).append(", ");
}
if (buffer.length() > 0) {
list.addElement(new TextElement(buffer.toString().substring(0, buffer.length() - 2)));
}
element.addElement(list);
}
private void addAllSet(XmlElement element, IntrospectedTable introspectedTable) {
//
XmlElement sql = new XmlElement("sql");
sql.addAttribute(new Attribute("id", "setAll"));
//循环拼接条件列
for (IntrospectedColumn introspectedColumn : introspectedTable.getAllColumns()) {
//跳过主键
boolean isPK = false;
for (IntrospectedColumn primaryKeyColumn : introspectedTable.getPrimaryKeyColumns()) {
if (primaryKeyColumn.getActualColumnName().equals(introspectedColumn.getActualColumnName())) {
isPK = true;
break;
}
}
if (isPK) {
//跳过主键
continue;
}
if (introspectedColumn.isAutoIncrement()) {
//跳过自增
continue;
}
// 拼接 if
XmlElement notNullElement = new XmlElement("if");
StringBuilder sb = new StringBuilder();
// java对象字段
sb.append(introspectedColumn.getJavaProperty());
sb.append(" != null ");
notNullElement.addAttribute(new Attribute("test", sb.toString()));
sb.setLength(0);
sb.append(MyBatis3FormattingUtilities
.getEscapedColumnName(introspectedColumn));
sb.append(" = ");
sb.append(MyBatis3FormattingUtilities
.getParameterClause(introspectedColumn));
sb.append(",");
notNullElement.addElement(new TextElement(sb.toString()));
sql.addElement(notNullElement);
}
//
element.addElement(sql);
}
private void addAllWhere(XmlElement element, IntrospectedTable introspectedTable) {
//
XmlElement list = new XmlElement("sql");
list.addAttribute(new Attribute("id", "whereAll"));
//循环拼接条件列
for (IntrospectedColumn introspectedColumn : introspectedTable.getAllColumns()) {
// 拼接 if
XmlElement notNullElement = new XmlElement("if");
StringBuilder sb = new StringBuilder();
// java对象字段
sb.append(introspectedColumn.getJavaProperty());
sb.append(" != null ");
// 字符型 增加 and column != ''
// introspectedColumn.isJdbcCharacterColumn()
if (introspectedColumn.isStringColumn()) {
sb.append("and ");
// java对象字段
sb.append(introspectedColumn.getJavaProperty());
sb.append(" != '' ");
}
notNullElement.addAttribute(new Attribute("test", sb.toString()));
sb.setLength(0);
sb.append(" AND ");
sb.append(MyBatis3FormattingUtilities
.getEscapedColumnName(introspectedColumn));
sb.append(" = ");
sb.append(MyBatis3FormattingUtilities
.getParameterClause(introspectedColumn));
notNullElement.addElement(new TextElement(sb.toString()));
list.addElement(notNullElement);
}
element.addElement(list);
}
@SneakyThrows
private XmlElement buildIndexWhere(IntrospectedTable introspectedTable) {
XmlElement element = new XmlElement("where");
//
Set nameSet = PluginUtil.getIndexColumns(introspectedTable);
if (nameSet.size() == 0) {
element.addElement(new TextElement(""));
element.addElement(new TextElement("1 = 0"));
return element;
}
// JavaBeansUtil.getCamelCaseString(column.getIndexType(), false)
//
// keySet.addAll(introspectedTable.getPrimaryKeyColumns());
// keySet.addAll(introspectedTable.getIndex);
List keySet = new ArrayList<>();
for (IntrospectedColumn introspectedColumn : introspectedTable.getAllColumns()) {
if (nameSet.contains(introspectedColumn.getActualColumnName())) {
keySet.add(introspectedColumn);
}
}
//循环拼接条件列
for (IntrospectedColumn introspectedColumn : keySet) {
// 拼接 if
XmlElement notNullElement = new XmlElement("if");
StringBuilder sb = new StringBuilder();
// java对象字段
sb.append(introspectedColumn.getJavaProperty());
sb.append(" != null ");
// 字符型 增加 and column != ''
// introspectedColumn.isJdbcCharacterColumn()
if (introspectedColumn.isStringColumn()) {
sb.append("and ");
// java对象字段
sb.append(introspectedColumn.getJavaProperty());
sb.append(" != '' ");
}
notNullElement.addAttribute(new Attribute("test", sb.toString()));
sb.setLength(0);
sb.append(" AND ");
sb.append(MyBatis3FormattingUtilities
.getEscapedColumnName(introspectedColumn));
sb.append(" = ");
sb.append(MyBatis3FormattingUtilities
.getParameterClause(introspectedColumn));
notNullElement.addElement(new TextElement(sb.toString()));
//
element.addElement(notNullElement);
}
//
return element;
}
// private void addListElement(XmlElement element, IntrospectedTable introspectedTable) {
// //
// XmlElement list = new XmlElement("select");
//
// list.addAttribute(new Attribute("id", "list"));
// list.addAttribute(new Attribute("resultMap", introspectedTable.getBaseResultMapId()));
// list.addAttribute(new Attribute("parameterType", introspectedTable.getBaseRecordType()));
// list.addElement(new TextElement("SELECT"));
// list.addElement(new TextElement(" "));
//
// // 是否有blob字段
//// if (introspectedTable.hasBLOBColumns()) {
//// answer.addElement(new TextElement(",")); //$NON-NLS-1$
//// answer.addElement(getBlobColumnListElement());
//// }
//
// list.addElement(new TextElement("FROM " + introspectedTable.getAliasedFullyQualifiedTableNameAtRuntime()));
// XmlElement whereXmlElement = new XmlElement("where");
// list.addElement(whereXmlElement);
//
// whereXmlElement.addElement(new TextElement(" 1=1 "));
//
// //循环拼接条件列
// for (IntrospectedColumn introspectedColumn : introspectedTable.getAllColumns()) {
// // 拼接 if
// XmlElement selectNotNullElement = new XmlElement("if");
// StringBuilder sb = new StringBuilder();
//
// // java对象字段
// sb.append(introspectedColumn.getJavaProperty());
// sb.append(" != null ");
//
// // 字符型 增加 and column != ''
// if (introspectedColumn.isJdbcCharacterColumn()) {
// sb.append("and ");
//
// // java对象字段
// sb.append(introspectedColumn.getJavaProperty());
// sb.append(" != '' ");
// }
// selectNotNullElement.addAttribute(new Attribute("test", sb.toString()));
// sb.setLength(0);
//
// sb.append(" AND ");
// sb.append(MyBatis3FormattingUtilities
// .getEscapedColumnName(introspectedColumn));
// sb.append(" = ");
// sb.append(MyBatis3FormattingUtilities
// .getParameterClause(introspectedColumn));
// selectNotNullElement.addElement(new TextElement(sb.toString()));
// whereXmlElement.addElement(selectNotNullElement);
// }
//
// element.addElement(list);
// }
@Override
public boolean clientCountByExampleMethodGenerated(Method method, Interface interfaze, IntrospectedTable introspectedTable) {
return false;
}
@Override
public boolean clientCountByExampleMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
return false;
}
@Override
public boolean sqlMapCountByExampleElementGenerated(XmlElement element, IntrospectedTable introspectedTable) {
return false;
}
@Override
public boolean sqlMapDeleteByExampleElementGenerated(XmlElement element, IntrospectedTable introspectedTable) {
return false;
}
@Override
public boolean sqlMapExampleWhereClauseElementGenerated(XmlElement element, IntrospectedTable introspectedTable) {
return false;
}
@Override
public boolean clientDeleteByExampleMethodGenerated(Method method, Interface interfaze, IntrospectedTable introspectedTable) {
return false;
}
@Override
public boolean clientDeleteByExampleMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
return false;
}
@Override
public boolean clientSelectByExampleWithBLOBsMethodGenerated(Method method, Interface interfaze, IntrospectedTable introspectedTable) {
return false;
}
@Override
public boolean clientSelectByExampleWithBLOBsMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
return false;
}
@Override
public boolean clientSelectByExampleWithoutBLOBsMethodGenerated(Method method, Interface interfaze, IntrospectedTable introspectedTable) {
return false;
}
@Override
public boolean clientSelectByExampleWithoutBLOBsMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
return false;
}
@Override
public boolean clientUpdateByExampleSelectiveMethodGenerated(Method method, Interface interfaze, IntrospectedTable introspectedTable) {
return false;
}
@Override
public boolean clientUpdateByExampleSelectiveMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
return false;
}
@Override
public boolean clientUpdateByExampleWithBLOBsMethodGenerated(Method method, Interface interfaze, IntrospectedTable introspectedTable) {
return false;
}
@Override
public boolean clientUpdateByExampleWithBLOBsMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
return false;
}
@Override
public boolean clientUpdateByExampleWithoutBLOBsMethodGenerated(Method method, Interface interfaze, IntrospectedTable introspectedTable) {
return false;
}
@Override
public boolean clientUpdateByExampleWithoutBLOBsMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
return false;
}
@Override
public boolean modelExampleClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
return false;
}
@Override
public boolean sqlMapSelectByExampleWithoutBLOBsElementGenerated(XmlElement element, IntrospectedTable introspectedTable) {
return false;
}
@Override
public boolean sqlMapSelectByExampleWithBLOBsElementGenerated(XmlElement element, IntrospectedTable introspectedTable) {
return false;
}
@Override
public boolean sqlMapUpdateByExampleSelectiveElementGenerated(XmlElement element, IntrospectedTable introspectedTable) {
return false;
}
@Override
public boolean sqlMapUpdateByExampleWithBLOBsElementGenerated(XmlElement element, IntrospectedTable introspectedTable) {
return false;
}
@Override
public boolean sqlMapUpdateByExampleWithoutBLOBsElementGenerated(XmlElement element, IntrospectedTable introspectedTable) {
return false;
}
@Override
public boolean providerCountByExampleMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
return false;
}
@Override
public boolean providerDeleteByExampleMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
return false;
}
@Override
public boolean providerInsertSelectiveMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
return false;
}
@Override
public boolean providerSelectByExampleWithBLOBsMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
return false;
}
@Override
public boolean providerSelectByExampleWithoutBLOBsMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
return false;
}
@Override
public boolean providerUpdateByExampleSelectiveMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
return false;
}
@Override
public boolean providerUpdateByExampleWithBLOBsMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
return false;
}
@Override
public boolean providerUpdateByExampleWithoutBLOBsMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
return false;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy