修改mybatis的MBG工具源码,支持mysql分页
最近要做一个项目(私人的,呵呵),因为新公司的新项目是用 spring2.5+ibatis 开发的,所以为了熟悉ibatis ,我的私人项目就决定使用spring3.0 + mybatis3.0 来边熟练边做。
我是一个懒人,在mybatis官网的时候偶然看到竟然有表生成器MBG(一开始还以为只是生成实体对象),就下载下来用了(省了写bean的时间,呵呵)。没想到这工具竟然不是IDE的插件(和hibernate差好多啊),而是要手写(支持用各种方式,比如ant,或者java代码)生成文件,没办法,又下载了这工具的文档看了下,花了点时间,总算用java把这工具写好了。
写好之后,意外发现了,这工具不单帮我生成了实体bean,还帮我生成了相对应的XML文件(里面竟然连增,删,改,查 已经都写好了,不过仅支持单表操作,不知道和我的表没有设外键有没关系,没试过)以及 dao的接口mapper文件,这下爽死了,连配置文件和接口都省的写了(至少省了单表操作的sql)。
使用了下,发现问题了,查询不支持分页,无语,但是我又不甘心啊,如果表都用这玩意生成那我不是爽死了,可以省了很多事,所以我又去官网down了这工具的源码下来研究,并修改了源码,终于支持分页了(我只增加了mysql的分页),哈哈。。
废话不多说了,直接上修改方法。
1、修改源码要注意的事情:源码包的路径是绝对不能修改的,因为发现源码里面有些配置文件的路径是写死的, - - 这悲剧的。。
2、其他的不多说,有兴趣自己研究,不算很难,我只说我要修改的文件。
(1)\org\mybatis\generator\codegen\mybatis3\xmlmapper 这个包里面的类都是为了生成配置xml文件,在里面的elements包下的SelectByExampleWithoutBLOBsElementGenerator.java文件,这个文件是写查询的sql语句,修改如下:
修改addElements方法如下:
public void addElements(XmlElement parentElement) {
String fqjt = introspectedTable.getExampleType();
XmlElement answer = new XmlElement("select"); //$NON-NLS-1$
answer.addAttribute(new Attribute("id", //$NON-NLS-1$
introspectedTable.getSelectByExampleStatementId()));
answer.addAttribute(new Attribute(
"resultMap", introspectedTable.getBaseResultMapId())); //$NON-NLS-1$
answer.addAttribute(new Attribute("parameterType", fqjt)); //$NON-NLS-1$
context.getCommentGenerator().addComment(answer);
answer.addElement(new TextElement("select")); //$NON-NLS-1$
XmlElement ifElement = new XmlElement("if"); //$NON-NLS-1$
ifElement.addAttribute(new Attribute("test", "distinct")); //$NON-NLS-1$ //$NON-NLS-2$
ifElement.addElement(new TextElement("distinct")); //$NON-NLS-1$
answer.addElement(ifElement);
StringBuilder sb = new StringBuilder();
if (stringHasValue(introspectedTable
.getSelectByExampleQueryId())) {
sb.append('\'');
sb.append(introspectedTable.getSelectByExampleQueryId());
sb.append("' as QUERYID,"); //$NON-NLS-1$
answer.addElement(new TextElement(sb.toString()));
}
answer.addElement(getBaseColumnListElement());
sb.setLength(0);
sb.append("from "); //$NON-NLS-1$
sb.append(introspectedTable
.getAliasedFullyQualifiedTableNa