mybatis 代码生成工具支持oracle mysql 分页

编写分页插件即可
mysql

package org.mybatis.generator.plugins;

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.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;
import org.mybatis.generator.config.Context;

public class MySQLPaginationPlugin extends PluginAdapter
{
  public boolean modelExampleClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable)
  {
    addLimit(topLevelClass, introspectedTable, "limitStart");
    addLimit(topLevelClass, introspectedTable, "limitEnd");
    return super.modelExampleClassGenerated(topLevelClass, introspectedTable);
  }

  public boolean sqlMapSelectByExampleWithoutBLOBsElementGenerated(XmlElement element, IntrospectedTable introspectedTable)
  {
    XmlElement isNotNullElement = new XmlElement("if");
    isNotNullElement.addAttribute(new Attribute("test", "limitStart != null and limitStart>=0"));

    isNotNullElement.addElement(new TextElement("limit #{limitStart} , #{limitEnd}"));
    element.addElement(isNotNullElement);
    return super.sqlMapUpdateByExampleWithoutBLOBsElementGenerated(element, introspectedTable);
  }

  private void addLimit(TopLevelClass topLevelClass, IntrospectedTable introspectedTable, String name)
  {
    CommentGenerator commentGenerator = this.context.getCommentGenerator();
    Field field = new Field();
    field.setVisibility(JavaVisibility.PROTECTED);
    field.setType(PrimitiveTypeWrapper.getIntegerInstance());
    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(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);
  }

  public boolean validate(List<String> warnings) {
    return true;
  }
}

oracle

package org.mybatis.generator.plugins;

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.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.Document;
import org.mybatis.generator.api.dom.xml.TextElement;
import org.mybatis.generator.api.dom.xml.XmlElement;
import org.mybatis.generator.config.Context;

public class OraclePaginationPlugin extends PluginAdapter
{
  public boolean modelExampleClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable)
  {
    addLimit(topLevelClass, introspectedTable, "limitStart");
    addLimit(topLevelClass, introspectedTable, "limitEnd");
    return super.modelExampleClassGenerated(topLevelClass, 
      introspectedTable);
  }

  public boolean sqlMapDocumentGenerated(Document document, IntrospectedTable introspectedTable)
  {
    XmlElement parentElement = document.getRootElement();

    XmlElement paginationPrefixElement = new XmlElement("sql");
    paginationPrefixElement.addAttribute(
      new Attribute("id", 
      "OracleDialectPrefix"));
    XmlElement pageStart = new XmlElement("if");
    pageStart.addAttribute(new Attribute("test", "limitStart != null and limitStart>=1 and limitEnd != null and limitEnd>=1"));
    pageStart.addElement(
      new TextElement("select * from (select t.*, rownum r from ( "));
    paginationPrefixElement.addElement(pageStart);
    parentElement.addElement(paginationPrefixElement);

    XmlElement paginationSuffixElement = new XmlElement("sql");
    paginationSuffixElement.addAttribute(
      new Attribute("id", 
      "OracleDialectSuffix"));
    XmlElement pageEnd = new XmlElement("if");
    pageEnd.addAttribute(new Attribute("test", "limitStart != null and limitStart>=1 and limitEnd != null and limitEnd>=1"));
    pageEnd.addElement(
      new TextElement("<![CDATA[ ) t where rownum <= #{limitEnd}  )  where r >= #{limitStart}  ]]>"));
    paginationSuffixElement.addElement(pageEnd);
    parentElement.addElement(paginationSuffixElement);

    return super.sqlMapDocumentGenerated(document, introspectedTable);
  }

  public boolean sqlMapSelectByExampleWithoutBLOBsElementGenerated(XmlElement element, IntrospectedTable introspectedTable)
  {
    XmlElement pageStart = new XmlElement("include");
    pageStart.addAttribute(new Attribute("refid", "OracleDialectPrefix"));
    element.getElements().add(0, pageStart);

    XmlElement isNotNullElement = new XmlElement("include");
    isNotNullElement.addAttribute(
      new Attribute("refid", 
      "OracleDialectSuffix"));
    element.getElements().add(isNotNullElement);

    return super.sqlMapUpdateByExampleWithoutBLOBsElementGenerated(element, 
      introspectedTable);
  }

  private void addLimit(TopLevelClass topLevelClass, IntrospectedTable introspectedTable, String name)
  {
    CommentGenerator commentGenerator = this.context.getCommentGenerator();
    Field field = new Field();
    field.setVisibility(JavaVisibility.PROTECTED);
    field.setType(PrimitiveTypeWrapper.getIntegerInstance());
    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(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);
  }

  public boolean validate(List<String> warnings)
  {
    return true;
  }
}

配置文件插件
org.mybatis.generator.plugins.OraclePaginationPlugin

<?xml version="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>
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <plugin type="org.mybatis.generator.plugins.RenameExampleClassPlugin">
            <property name="searchString" value="Example$" />
            <property name="replaceString" value="Criteria" />
        </plugin>
        <plugin type="org.mybatis.generator.plugins.OraclePaginationPlugin" />    
        <commentGenerator>
            <property name="suppressDate" value="true" />
            <property name="suppressAllComments" value="true" />
        </commentGenerator>

         <jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver" 
                  connectionURL="jdbc:oracle:thin:@10.1.228.222:1521:DEVORA" 
                  userId="deviot" 
                  password="viviot"> 
          </jdbcConnection> 

        <javaTypeResolver
            type="org.mybatis.generator.internal.types.JavaTypeResolver4MvneImpl">
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <javaModelGenerator targetPackage="com.ai.runner.sdiot.dao.mapper.bo"
            targetProject="F:\work\SD\Runner-Sdiot\src\main\java">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <sqlMapGenerator targetPackage="mybatis.mapper.sdiot"
            targetProject="F:\work\SD\Runner-Sdiot\src\main\resources">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>

        <javaClientGenerator type="XMLMAPPER"
            targetPackage="com.ai.runner.sdiot.dao.mapper.interfaces"
            targetProject="F:\work\SD\Runner-Sdiot\src\main\java">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>      
            <table tableName="group_subaccount_card_rel" enableCountByExample="true"
            enableUpdateByExample="true" enableDeleteByExample="true"
            enableSelectByExample="true" selectByExampleQueryId="true" />           
    </context>
</generatorConfiguration>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值