Mybatis3分頁, 基於Mybatis Generator外掛生成MYSQL分頁語句
阿新 • • 發佈:2019-02-17
http://ibatis.apache.org/docs/tools/ibator/reference/pluggingIn.html
Mybatis Generator外掛物理分頁,適用於targetRuntime="MyBatis3"
- 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>
- */
- publicclass PaginationPlugin extends PluginAdapter {
- @Override
- publicboolean modelExampleClassGenerated(TopLevelClass topLevelClass,
- IntrospectedTable introspectedTable) {
- // add field, getter, setter for limit clause
- addLimit(topLevelClass, introspectedTable, "limitStart");
- addLimit(topLevelClass, introspectedTable, "limitEnd");
- returnsuper.modelExampleClassGenerated(topLevelClass,
- introspectedTable);
- }
- @Override
- publicboolean 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);
- returnsuper.sqlMapUpdateByExampleWithoutBLOBsElementGenerated(element,
- introspectedTable);
- }
- privatevoid 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
- */
- publicboolean validate(List<String> warnings) {
- returntrue;
- }
- }
接著在generatorConfig.xml檔案裡引入外掛:
- com.fxhx.gamelog.common.plugin.PaginationPlugin
- <?xmlversion="1.0"encoding="UTF-8"?>
- <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
- <generatorConfiguration>
- <classPathEntrylocation="E:\workspace\mysql-connector-java-5.0.8-bin.jar"/>
- <!-- targetRuntime = Ibatis2Java5 -->
- <contextid="context1"targetRuntime="MyBatis3">
- <!-- 這裡引入擴充套件外掛 -->
- <plugintype="com.fxhx.gamelog.common.plugin.PaginationPlugin"/>
- <jdbcConnectiondriverClass="com.mysql.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/p1LogManager?useUnicode=true&characterEncoding=utf8"userId="root"password="123"/>
- <javaModelGeneratortargetPackage="com.fxhx.gamelog.entity"targetProject="LogDataSys/src/main/java"/>
- <sqlMapGeneratortargetPackage="com.fxhx.gamelog.mapper"targetProject="LogDataSys/src/main/java"/>
- <javaClientGeneratortargetPackage="com.fxhx.gamelog.mapper"targetProject="LogDataSys/src/main/java"type="XMLMAPPER"/>
- <tableschema=""tableName="consume_log"domainObjectName="ConsumeLog"/>
- </context>
- </generatorConfiguration>
此工程需要mybatis-generator-core.jar包
- maven:
- <dependency>
- <groupId>org.mybatis.generator</groupId>
- <artifactId>mybatis-generator-core</artifactId>
- <version>1.3.2</version>
- <type>jar</type>
- <scope>test</scope>
- </dependency>