标签:
在使用 mybatis-generator-maven-plugin 进行代码生成后,可能会发现,有些通用方法并没有生成,譬如删除操作,数据库中的数据都是有意义的,删除时尽量都是进行逻辑删除操作的,如果使用代码生成器的删除方法,那么数据会物理删除,这种方法并不是我们所需要的,那么,我们就需要在代码生成过程中,添加一个方法 deleteLogicByIds, 这样,所有代码生成的过程中,如果能够自动生成这个方法,那么,我们的代码量就相当少了。先上git : http://git.oschina.net/alexgaoyh/MutiModule-parent
其中,generatorConfig.xml 文件中,增加
<plugin type="com.MutiModule.common.mybatis.plugin.PaginationPlugin"></plugin> <plugin type="com.MutiModule.common.mybatis.plugin.DeleteLogicByIdsPlugin"></plugin>
package com.MutiModule.common.mybatis.plugin; import java.util.List; import org.mybatis.generator.api.CommentGenerator; import org.mybatis.generator.api.IntrospectedTable; import org.mybatis.generator.api.PluginAdapter; import org.mybatis.generator.api.dom.java.Field; import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType; import org.mybatis.generator.api.dom.java.JavaVisibility; import org.mybatis.generator.api.dom.java.Method; import org.mybatis.generator.api.dom.java.Parameter; import org.mybatis.generator.api.dom.java.TopLevelClass; import org.mybatis.generator.api.dom.xml.Attribute; import org.mybatis.generator.api.dom.xml.TextElement; import org.mybatis.generator.api.dom.xml.XmlElement; /** * mybais mysql 分页相关,扩展 mybatis-generator-maven-plugin 插件功能,生成分页相关 * @author alexgaoyh * */ public class PaginationPlugin extends PluginAdapter { @Override public boolean modelExampleClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) { // add field, getter, setter // for limit clause addPage(topLevelClass, introspectedTable, "page"); return super.modelExampleClassGenerated(topLevelClass, introspectedTable); } @Override public boolean sqlMapSelectByExampleWithoutBLOBsElementGenerated( XmlElement element, IntrospectedTable introspectedTable) { XmlElement page = new XmlElement("if"); page.addAttribute(new Attribute("test", "page != null")); page.addElement(new TextElement("limit #{page.begin} , #{page.length}")); element.addElement(page); return super.sqlMapUpdateByExampleWithoutBLOBsElementGenerated(element, introspectedTable); } /** * @param topLevelClass * @param introspectedTable * @param name */ private void addPage(TopLevelClass topLevelClass, IntrospectedTable introspectedTable, String name) { topLevelClass.addImportedType(new FullyQualifiedJavaType( "com.MutiModule.common.vo.mybatis.pagination.Page")); CommentGenerator commentGenerator = context.getCommentGenerator(); Field field = new Field(); field.setVisibility(JavaVisibility.PROTECTED); field.setType(new FullyQualifiedJavaType( "com.MutiModule.common.vo.mybatis.pagination.Page")); field.setName(name); commentGenerator.addFieldComment(field, introspectedTable); topLevelClass.addField(field); char c = name.charAt(0); String camel = Character.toUpperCase(c) + name.substring(1); Method method = new Method(); method.setVisibility(JavaVisibility.PUBLIC); method.setName("set" + camel); method.addParameter(new Parameter(new FullyQualifiedJavaType( "com.MutiModule.common.vo.mybatis.pagination.Page"), name)); method.addBodyLine("this." + name + "=" + name + ";"); commentGenerator.addGeneralMethodComment(method, introspectedTable); topLevelClass.addMethod(method); method = new Method(); method.setVisibility(JavaVisibility.PUBLIC); method.setReturnType(new FullyQualifiedJavaType( "com.MutiModule.common.vo.mybatis.pagination.Page")); method.setName("get" + camel); method.addBodyLine("return " + name + ";"); commentGenerator.addGeneralMethodComment(method, introspectedTable); topLevelClass.addMethod(method); } /** * This plugin is always valid - no properties are required */ public boolean validate(List<String> warnings) { return true; } }
package com.MutiModule.common.mybatis.plugin; import java.util.List; import org.mybatis.generator.api.IntrospectedTable; import org.mybatis.generator.api.PluginAdapter; 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.java.TopLevelClass; 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; public class DeleteLogicByIdsPlugin extends PluginAdapter { /** * {@inheritDoc} */ public boolean validate(List<String> warnings) { return true; } /** * {@inheritDoc} */ @Override public boolean clientSelectByExampleWithBLOBsMethodGenerated(Method method, Interface interfaze, IntrospectedTable introspectedTable) { interfaze.addMethod(generateDeleteLogicByIds(method, introspectedTable)); return true; } /** * {@inheritDoc} */ @Override public boolean clientSelectByExampleWithoutBLOBsMethodGenerated( Method method, Interface interfaze, IntrospectedTable introspectedTable) { interfaze.addMethod(generateDeleteLogicByIds(method, introspectedTable)); return true; } /** * {@inheritDoc} */ @Override public boolean clientSelectByExampleWithBLOBsMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) { topLevelClass.addMethod(generateDeleteLogicByIds(method, introspectedTable)); return true; } /** * {@inheritDoc} */ @Override public boolean clientSelectByExampleWithoutBLOBsMethodGenerated( Method method, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) { topLevelClass.addMethod(generateDeleteLogicByIds(method, introspectedTable)); return true; } @Override public boolean sqlMapDocumentGenerated(Document document, IntrospectedTable introspectedTable) { String tableName = introspectedTable.getAliasedFullyQualifiedTableNameAtRuntime();//数据库表名 XmlElement parentElement = document.getRootElement(); // 产生分页语句前半部分 XmlElement deleteLogicByIdsElement = new XmlElement("update"); deleteLogicByIdsElement.addAttribute(new Attribute("id", "deleteLogicByIds")); deleteLogicByIdsElement.addElement( new TextElement( "update " + tableName + " set deleteFlag = #{deleteFlag,jdbcType=INTEGER} where id in " + " <foreach item=\"item\" index=\"index\" collection=\"ids\" open=\"(\" separator=\",\" close=\")\">#{item}</foreach> " )); parentElement.addElement(deleteLogicByIdsElement); return super.sqlMapDocumentGenerated(document, introspectedTable); } private Method generateDeleteLogicByIds(Method method, IntrospectedTable introspectedTable) { Method m = new Method("deleteLogicByIds"); m.setVisibility(method.getVisibility()); m.setReturnType(FullyQualifiedJavaType.getIntInstance()); m.addParameter(new Parameter(FullyQualifiedJavaType.getIntInstance(), "deleteFlag", "@Param(\"deleteFlag\")")); m.addParameter(new Parameter(new FullyQualifiedJavaType("Integer[]"), "ids", "@Param(\"ids\")")); context.getCommentGenerator().addGeneralMethodComment(m, introspectedTable); return m; } }
mybatis-generator-maven-plugin 插件扩展 增加自定义方法
标签:
原文地址:http://my.oschina.net/alexgaoyh/blog/477296