Mybatis Generator插件物理分页,适用于targetRuntime="MyBatis3"
通过继承generator工具的PluginAdapter抽象类来扩展插件,具体参考文档
- package com.fxhx.gamelog.common.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.ShellRunner;
- import org.mybatis.generator.api.dom.java.Field;
- 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.PrimitiveTypeWrapper;
- 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;
-
- /**
- * <P>File name : PaginationPlugin.java </P>
- * <P>Author : fly </P>
- * <P>Date : 2013-7-2 上午11:50:45 </P>
- */
- public class PaginationPlugin extends PluginAdapter {
- @Override
- public boolean modelExampleClassGenerated(TopLevelClass topLevelClass,
- IntrospectedTable introspectedTable) {
- // add field, getter, setter for limit clause
- addLimit(topLevelClass, introspectedTable, "limitStart");
- addLimit(topLevelClass, introspectedTable, "limitEnd");
- return super.modelExampleClassGenerated(topLevelClass,
- introspectedTable);
- }
- @Override
- public boolean sqlMapSelectByExampleWithoutBLOBsElementGenerated(
- XmlElement element, IntrospectedTable introspectedTable) {
- // XmlElement isParameterPresenteElemen = (XmlElement) element
- // .getElements().get(element.getElements().size() - 1);
- XmlElement isNotNullElement = new XmlElement("if"); //$NON-NLS-1$
- isNotNullElement.addAttribute(new Attribute("test", "limitStart != null and limitStart>=0")); //$NON-NLS-1$ //$NON-NLS-2$
- // isNotNullElement.addAttribute(new Attribute("compareValue", "0")); //$NON-NLS-1$ //$NON-NLS-2$
- isNotNullElement.addElement(new TextElement(
- "limit #{limitStart} , #{limitEnd}"));
- // isParameterPresenteElemen.addElement(isNotNullElement);
- element.addElement(isNotNullElement);
- return super.sqlMapUpdateByExampleWithoutBLOBsElementGenerated(element,
- introspectedTable);
- }
- private void addLimit(TopLevelClass topLevelClass,
- IntrospectedTable introspectedTable, String name) {
- CommentGenerator commentGenerator = context.getCommentGenerator();
- Field field = new Field();
- field.setVisibility(JavaVisibility.PROTECTED);
- // field.setType(FullyQualifiedJavaType.getIntInstance());
- field.setType(PrimitiveTypeWrapper.getIntegerInstance());
- field.setName(name);
- // field.setInitializationString("-1");
- 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(PrimitiveTypeWrapper.getIntegerInstance(), name));
- method.addBodyLine("this." + name + "=" + name + ";");
- commentGenerator.addGeneralMethodComment(method, introspectedTable);
- topLevelClass.addMethod(method);
- method = new Method();
- method.setVisibility(JavaVisibility.PUBLIC);
- method.setReturnType(PrimitiveTypeWrapper.getIntegerInstance());
- 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;
- }
-
- }
接着在generatorConfig.xml文件里引入插件:
- com.fxhx.gamelog.common.plugin.PaginationPlugin
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE generatorConfiguration PUBLIC "-////DTD MyBatis Generator Configuration 1.0//EN" "/dtd/mybatis-generator-config_1_0.dtd" >
- <generatorConfiguration >
- <classPathEntry location="E:\workspace\mysql-connector-java-5.0.8-bin.jar" />
- <!-- targetRuntime = Ibatis2Java5 -->
- <context id="context1" targetRuntime="MyBatis3" >
- <!-- 这里引入扩展插件 -->
- <plugin type="com.fxhx.gamelog.common.plugin.PaginationPlugin" />
-
- <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/p1LogManager?useUnicode=true&characterEncoding=utf8" userId="root" password="123" />
- <javaModelGenerator targetPackage="com.fxhx.gamelog.entity" targetProject="LogDataSys/src/main/java" />
- <sqlMapGenerator targetPackage="com.fxhx.gamelog.mapper" targetProject="LogDataSys/src/main/java" />
- <javaClientGenerator targetPackage="com.fxhx.gamelog.mapper" targetProject="LogDataSys/src/main/java" type="XMLMAPPER" />
-
- <table schema="" tableName="consume_log" domainObjectName="ConsumeLog" />
- </context>
- </generatorConfiguration>
此工程需要mybatis-generator-core.jar包
- <dependency>
- <groupId>org.mybatis.generator</groupId>
- <artifactId>mybatis-generator-core</artifactId>
- <version>1.3.2</version>
- <type>jar</type>
- <scope>test</scope>
- </dependency>
|