All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.mountcloud.mybatisplugin.MybatisMySqlLimitPlugin Maven / Gradle / Ivy

There is a newer version: 1.2
Show newest version
package org.mountcloud.mybatisplugin;

import org.mountcloud.mybatisplugin.exception.MybatisMySqlLimitPluginException;
import org.mountcloud.mybatisplugin.utils.MybatisPluginUtil;
import org.mountcloud.mybatisplugin.utils.ObjectUtil;
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.*;

import java.util.List;

/**
 * TODO: 扩展分页插件
 * com.ugirls.storagemanager.mybatisplugin
 * 2018/8/22.
 *
 * @author zhanghaishan
 * @version V1.0
 */
public class MybatisMySqlLimitPlugin extends PluginAdapter {
    @Override
    public boolean validate(List warnings) {
        return true;
    }

    /**
     * 添加limit Class 和 limit 属性
     * @param topLevelClass 类
     * @param introspectedTable 添加的项
     * @return 添加结果
     */
    @Override
    public boolean modelExampleClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
//
//        //如果父类中有limit属性并合规的话就不生成class了
//        if(checkSuperClasslimit(topLevelClass)){
//            return super.modelExampleClassGenerated(topLevelClass, introspectedTable);
//        }

        //添加limit class
        InnerClass limitClass = new InnerClass("Limit");
        limitClass.setStatic(true);
        limitClass.setVisibility(JavaVisibility.PUBLIC);

        MybatisPluginUtil.addField(context,limitClass,introspectedTable,"start",PrimitiveTypeWrapper.getIntegerInstance(),true);
        MybatisPluginUtil.addField(context,limitClass,introspectedTable,"size",PrimitiveTypeWrapper.getIntegerInstance(),true);

        topLevelClass.addInnerClass(limitClass);

        //添加limit属性
        MybatisPluginUtil.addField(context,topLevelClass,introspectedTable,"limit",new FullyQualifiedJavaType("Limit"),true);

        return super.modelExampleClassGenerated(topLevelClass, introspectedTable);
    }

    /**
     * 为select添加limit
     * @param document 总xml
     * @param introspectedTable 添加项
     * @return 添加结果
     */
    @Override
    public boolean sqlMapDocumentGenerated(Document document, IntrospectedTable introspectedTable) {
        XmlElement parentElement = document.getRootElement();

        List elements = MybatisPluginUtil.getElement(parentElement,"select");

        if(elements.size()>0){
            for(int i=0;i superClass = Class.forName(fullyQualifiedName);

                //获取limit属性
                java.lang.reflect.Field limitField = ObjectUtil.getField(superClass,"limit");
                if(limitField!=null){
                    //如果存在limit属性则获取limit的class
                    Class limitClass = limitField.getType();
                    java.lang.reflect.Field limitStartField = ObjectUtil.getField(limitClass,"start");
                    if(limitStartField==null){
                        throw new MybatisMySqlLimitPluginException(fullyQualifiedName+" not found start field!");
                    }else{
                        if(!limitStartField.getType().equals(Integer.class)&&!limitStartField.getType().getName().equals("int")){
                            throw new MybatisMySqlLimitPluginException(fullyQualifiedName+" start field type not is Integer or int!");
                        }
                    }
                    java.lang.reflect.Field limitSizeField = ObjectUtil.getField(limitClass,"size");
                    if(limitSizeField==null){
                        throw new MybatisMySqlLimitPluginException(fullyQualifiedName+" not found size field!");
                    }else{
                        if(!limitSizeField.getType().equals(Integer.class)&&!limitSizeField.getType().getName().equals("int")){
                            throw new MybatisMySqlLimitPluginException(fullyQualifiedName+" size field type not is Integer or int!");
                        }
                    }
                }else{
                    state = false;
                }

            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
        return state;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy