package com.hui.mybatis.backup; 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.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.internal.util.StringUtility; import java.util.List; /** * <b><code>SelectPageKeyPlugin</code></b> * <p/> * Description: * <p/> * <b>Creation Time:</b> 2018/12/6 23:36. * * @author HuWeihui */ public class SelectPageKeyPlugin extends PluginAdapter { private static final String IS_GEN_PAGINATION = "generate.pagination"; public boolean validate(List<String> list) { return true; } @Override public boolean clientGenerated(Interface interfaze, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) { boolean super_result = super.clientGenerated(interfaze, topLevelClass, introspectedTable); // 生成方法 Method newMethod = new Method("selectByPage"); // 设置方法类型 newMethod.setVisibility(JavaVisibility.PUBLIC); // 设置方法返回值类型 FullyQualifiedJavaType returnType = new FullyQualifiedJavaType("List<" + introspectedTable.getTableConfiguration().getDomainObjectName() + ">"); newMethod.setReturnType(returnType); // 设置方法参数 FullyQualifiedJavaType offsetJavaType = new FullyQualifiedJavaType("Long"); Parameter offsetParameter = new Parameter(offsetJavaType, "offset"); offsetParameter.addAnnotation("@Param(\"offset\")"); newMethod.addParameter(0, offsetParameter); FullyQualifiedJavaType limitJavaType = new FullyQualifiedJavaType("Long"); Parameter limitParameter = new Parameter(limitJavaType, "limit"); limitParameter.addAnnotation("@Param(\"limit\")"); newMethod.addParameter(1, limitParameter); // 添加相应的包 interfaze.addImportedType(new FullyQualifiedJavaType(("org.apache.ibatis.annotations.Param"))); interfaze.addImportedType(new FullyQualifiedJavaType("java.util.List")); interfaze.addMethod(newMethod); return true; } @Override public boolean sqlMapDocumentGenerated(Document document, IntrospectedTable introspectedTable) { // if (isGeneratePagination(introspectedTable)) { XmlElement select = new XmlElement("select"); select.addAttribute(new Attribute("id", "selectByPage")); select.addAttribute(new Attribute("resultMap", "BaseResultMap")); select.addElement(new TextElement("SELECT <include refid=\"Base_Column_List\" /> FROM " + introspectedTable.getFullyQualifiedTableNameAtRuntime() + " LIMIT #{offset},#{limit}")); XmlElement parentElement = document.getRootElement(); parentElement.addElement(select); return super.sqlMapDocumentGenerated(document, introspectedTable); // } // return super.sqlMapDocumentGenerated(document, introspectedTable); } /** * 判断参数generate.pagination.是否生成 */ private boolean isGeneratePagination(IntrospectedTable introspectedTable) { String is_generate_pagination = introspectedTable.getTableConfigurationProperty(IS_GEN_PAGINATION); if (StringUtility.stringHasValue(is_generate_pagination)) { return Boolean.valueOf(is_generate_pagination); } else { return false; } } }