mybatis结合generator进行分页插件PluginAdapter开发
2024-09-06 06:16:29
使用org.mybatis.generator生成UserExample时,无法进行分页,使用下面这个类运行generator便可以生成分页相关的属性了
package org.mybatis.generator.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.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;
public class PaginationMysqlPlugin extends PluginAdapter {
@Override
public boolean modelExampleClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
addLimit(topLevelClass, introspectedTable, "limitStart");
addLimit(topLevelClass, introspectedTable, "limitEnd");
return super.modelExampleClassGenerated(topLevelClass, introspectedTable);
}
@Override
public boolean sqlMapSelectByExampleWithoutBLOBsElementGenerated(XmlElement element, IntrospectedTable introspectedTable) {
XmlElement isNotNullElement = new XmlElement("if");
isNotNullElement.addAttribute(new Attribute("test", "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 = context.getCommentGenerator();
Field field = new Field();
field.setVisibility(JavaVisibility.PROTECTED);
field.setType(FullyQualifiedJavaType.getIntInstance());
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(FullyQualifiedJavaType.getIntInstance(), name));
method.addBodyLine("this." + name + "=" + name + ";");
commentGenerator.addGeneralMethodComment(method, introspectedTable);
topLevelClass.addMethod(method);
method = new Method();
method.setVisibility(JavaVisibility.PUBLIC);
method.setReturnType(FullyQualifiedJavaType.getIntInstance());
method.setName("get" + camel);
method.addBodyLine("return " + name + ";");
commentGenerator.addGeneralMethodComment(method, introspectedTable);
topLevelClass.addMethod(method);
}
public boolean validate(List<String> warnings) {
return true;
}
public static void generate() {
String config = PaginationMysqlPlugin.class.getClassLoader().getResource("generatorConfig.xml").getFile();
String[] arg = { "-configfile", config, "-overwrite" };
ShellRunner.main(arg);
}
public static void main(String[] args) {
generate();
}
}
项目代码下载:https://github.com/vincentduan/Medical.git
最新文章
- (原创)微信支付SDK调用的核心代码与分析(基于Android)
- Storyboard中segue(转场)使用
- iOS多线程开发
- 【Go语言】学习资料
- linux 安装 ftp
- JS - Cookie: getCookie, setCookie
- UITabBarItem编写的时候出现得图片显示异常,和有一些比较忽略的方法总结
- Java和Tomcat类加载机制
- Access自动编号的初始值设置及重置编号 转
- Android平台的事件处理机制和手指滑动例子
- ACM起步要点总结(转哈工大)
- Mysql的转义字符
- Java微信公众平台开发之公众号支付(微信内H5调起支付)
- [转]设置Jupyter-Notebook表格打印多个变量的值
- (NO.00004)iOS实现打砖块游戏(六):反弹棒类
- numpy中的随机数模块
- PHP开发API接口签名及验证
- python之路之简单介绍:
- IDEA和WebStorm破解教程--激活n年(随时更新)
- ie6 表格td中无内容时不显示边框的解决办法