<?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>
<classPathEntry location="d://java//sqljdbc4.jar" />
<context id="DB2Tables" targetRuntime="MyBatis3">
<property name="suppressTypeWarnings" value="true" />
<plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin" />
<plugin type="org.mybatis.generator.plugins.SerializablePlugin" />
<plugin type="org.mybatis.generator.plugins.CaseInsensitiveLikePlugin" />
<plugin type="org.mybatis.generator.plugins.RenameExampleClassPlugin">
<property name="searchString" value="Example$" />
<property name="replaceString" value="Criteria" />
</plugin>
<plugin type="com.shinowit.mybatis.plugin.SelectByPagePlugin" />
<plugin type="com.shinowit.mybatis.plugin.Struts2ActionPlugin" />
<commentGenerator>
<property name="suppressAllComments" value="true" />
</commentGenerator>
<jdbcConnection driverClass="com.microsoft.sqlserver.jdbc.SQLServerDriver"
connectionURL="jdbc:sqlserver://localhost:1433;databaseName=OSS;"
userId="sa" password="sasa">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<javaModelGenerator targetPackage="com.shinowit.model"
targetProject="src">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<sqlMapGenerator targetPackage="com.shinowit.dao.mapper"
targetProject="src">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.shinowit.dao.mapper" targetProject="src">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<table tableName="TBa_MemberInfo">
<generatedKey column="ID" sqlStatement="SqlServer"
identity="true" />
</table>
<table tableName="TBa_SupplyRecordInfo">
<generatedKey column="ID" sqlStatement="SqlServer"
identity="true" />
</table>
</context>
</generatorConfiguration>
其实想要mybaits代码生成器生成Example类换个名字,是通过插件实现的,即下面的这个插件配置参数很关键。
<plugin type="org.mybatis.generator.plugins.RenameExampleClassPlugin">
<property name="searchString" value="Example$" />
<property name="replaceString" value="Criteria" />
</plugin>
如果不喜欢生成的代码中带有代理的mybatis代码生成器的注解信息,可以配置下面的配置参数关闭注解信息的生成:
<commentGenerator>
<property name="suppressAllComments" value="true" />
</commentGenerator>
上面示例中的分页代码自动生成插件是我自己写的,用于自动生成数据库物理分页的代码。
该插件的源码如下:
package com.shinowit.mybatis.plugin;
import static org.mybatis.generator.internal.util.messages.Messages.getString;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import org.mybatis.generator.api.IntrospectedColumn;
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.FullyQualifiedJavaType;
import org.mybatis.generator.api.dom.java.Interface;
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.Document;
import org.mybatis.generator.api.dom.xml.TextElement;
import org.mybatis.generator.api.dom.xml.XmlElement;
import org.mybatis.generator.codegen.mybatis3.MyBatis3FormattingUtilities;
public class SelectByPagePlugin extends PluginAdapter {
@Override
public boolean validate(List<String> warnings) {
return true;
}
private void addField(String fieldName, FullyQualifiedJavaType fieldType,
TopLevelClass topLevelClass) {
Field tmpField = new Field(fieldName, fieldType);
tmpField.setVisibility(JavaVisibility.PRIVATE);
topLevelClass.addField(tmpField);
Method setMethod = new Method();
setMethod.setName("set" + fieldName.toUpperCase().substring(0, 1)
+ fieldName.substring(1));
Parameter param = new Parameter(fieldType, fieldName);
setMethod.addParameter(param);
setMethod.setVisibility(JavaVisibility.PUBLIC);
setMethod.addBodyLine("this." + fieldName + "=" + fieldName + ";");
topLevelClass.addMethod(setMethod);
Method getMethod = new Method();
getMethod.setName("get" + fieldName.toUpperCase().substring(0, 1)
+ fieldName.substring(1));
getMethod.setReturnType(fieldType);
getMethod.setVisibility(JavaVisibility.PUBLIC);
getMethod.addBodyLine("return this." + fieldName + ";");
topLevelClass.addMethod(getMethod);
}
@Override
public boolean modelExampleClassGenerated(TopLevelClass topLevelClass,
IntrospectedTable introspectedTable) {
FullyQualifiedJavaType intType = FullyQualifiedJavaType
.getIntInstance();
addField("pageIndex", intType, topLevelClass);
addField("pageSize", intType, topLevelClass);
Method getSkipCountMethod = new Method();
getSkipCountMethod.setName("getSkipRecordCount");
getSkipCountMethod.setReturnType(intType);
getSkipCountMethod.setVisibility(JavaVisibility.PUBLIC);
getSkipCountMethod
.addBodyLine("return (this.pageIndex-1)*this.pageSize;");
topLevelClass.addMethod(getSkipCountMethod);
Method getEndRecordIndexMethod = new Method();
getEndRecordIndexMethod.setName("getEndRecordCount");
getEndRecordIndexMethod.setReturnType(intType);
getEndRecordIndexMethod.setVisibility(JavaVisibility.PUBLIC);
getEndRecordIndexMethod
.addBodyLine("return this.pageIndex*this.pageSize;");
topLevelClass.addMethod(getEndRecordIndexMethod);
Method newConstructorMethod = new Method();
newConstructorMethod.setConstructor(true);
newConstructorMethod.addParameter(new Parameter(intType, "pageSize"));
newConstructorMethod.addParameter(new Parameter(intType, "pageIndex"));
newConstructorMethod.addBodyLine("this();");
newConstructorMethod.addBodyLine("this.pageSize=pageSize;");
newConstructorMethod.addBodyLine("this.pageIndex=pageIndex;");
newConstructorMethod.setVisibility(JavaVisibility.PUBLIC);
newConstructorMethod.setName(topLevelClass.getType().getShortName());
topLevelClass.addMethod(newConstructorMethod);
return true;
}
@Override
public boolean clientGenerated(Interface interfaze,
TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
Set<FullyQualifiedJavaType> importedTypes = new TreeSet<FullyQualifiedJavaType>();
FullyQualifiedJavaType type = new FullyQualifiedJavaType(
introspectedTable.getExampleType());
importedTypes.add(type);
importedTypes.add(FullyQualifiedJavaType.getNewListInstance());
Method method = new Method();
method.setVisibility(JavaVisibility.PUBLIC);
FullyQualifiedJavaType returnType = FullyQualifiedJavaType
.getNewListInstance();
FullyQualifiedJavaType listType;
if (introspectedTable.getRules().generateBaseRecordClass()) {
listType = new FullyQualifiedJavaType(introspectedTable
.getBaseRecordType());
} else if (introspectedTable.getRules().generatePrimaryKeyClass()) {
listType = new FullyQualifiedJavaType(introspectedTable
.getPrimaryKeyType());
} else {
throw new RuntimeException(getString("RuntimeError.12")); //$NON-NLS-1$
}
importedTypes.add(listType);
returnType.addTypeArgument(listType);
method.setReturnType(returnType);
method.setName("selectPage");
method.addParameter(new Parameter(type, "example")); //$NON-NLS-1$
interfaze.addImportedTypes(importedTypes);
interfaze.addMethod(method);
return true;
}
@Override
public boolean sqlMapDocumentGenerated(Document document,
IntrospectedTable introspectedTable) {
XmlElement parentElement = document.getRootElement();
XmlElement newResultMapElement = new XmlElement("resultMap");
newResultMapElement
.addAttribute(new Attribute("id", "selectPageResult"));
newResultMapElement.addAttribute(new Attribute("extends",
"BaseResultMap"));
String returnType;
if (introspectedTable.getRules().generateBaseRecordClass()) {
returnType = introspectedTable.getBaseRecordType();
} else {
returnType = introspectedTable.getPrimaryKeyType();
}
newResultMapElement.addAttribute(new Attribute("type",
returnType));
newResultMapElement
.addElement(new TextElement(
"<!--\r\n<association property=\"\" column=\"\" javaType=\"\">\r\n"
+ " <id column=\"\" property=\"\" jdbcType=\"\" />\r\n"
+ " <result column=\"\" property=\"\" jdbcType=\"\" />\r\n"
+ " </association>\r\n-->"));
parentElement.addElement(newResultMapElement);
//以下代码用于生成支持分页的sql片段
/**
*注意千万不要随意删除代码中的空格 !
*do not remove spaces
*/
XmlElement outter_where_sql=new XmlElement("sql");
outter_where_sql.addAttribute(new Attribute("id", "select_by_page_outter_where_sql"));
StringBuilder sb = new StringBuilder();
sb.append(" <if test=\"oredCriteria.size>0\">");
sb.append(" <if test=\"_parameter != null\" > <include refid=\"Example_Where_Clause\"/> </if>");
sb.append(" and ");
sb.append(" </if>");
sb.append(" <if test=\"oredCriteria.size==0\"> ");
sb.append(" where ");
sb.append(" </if> ");
outter_where_sql.addElement(new TextElement(sb.toString()));
parentElement.addElement(outter_where_sql);
XmlElement inner_where_sql=new XmlElement("sql");
inner_where_sql.addAttribute(new Attribute("id", "select_by_page_inner_where_and_orderby_sql"));
sb.setLength(0);
sb.append(" <if test=\"oredCriteria.size>0\">");
sb.append(" <if test=\"_parameter != null\" > <include refid=\"Example_Where_Clause\"/> </if>");
sb.append(" </if>");
sb.append(" <if test=\"orderByClause != null\">");
sb.append(" order by ${orderByClause} ");
sb.append(" </if> ");
inner_where_sql.addElement(new TextElement(sb.toString()));
parentElement.addElement(inner_where_sql);
XmlElement outter_orderby_sql=new XmlElement("sql");
outter_orderby_sql.addAttribute(new Attribute("id", "select_by_page_outter_orderby_sql"));
sb.setLength(0);
sb.append(" <if test=\"orderByClause != null\">");
sb.append(" order by ${orderByClause} ");
sb.append(" </if> ");
outter_orderby_sql.addElement(new TextElement(sb.toString()));
parentElement.addElement(outter_orderby_sql);
//以上代码用于生成支持分页的sql片段
String fqjt = introspectedTable.getExampleType();
XmlElement answer = new XmlElement("select"); //$NON-NLS-1$
answer.addAttribute(new Attribute("id", //$NON-NLS-1$
"selectPage"));
answer.addAttribute(new Attribute(
"resultMap","selectPageResult")); //$NON-NLS-1$
answer.addAttribute(new Attribute("parameterType", fqjt)); //$NON-NLS-1$
sb.setLength(0);
sb.append("select a.* from ");
sb.append(introspectedTable
.getAliasedFullyQualifiedTableNameAtRuntime());
sb.append(" a where a.");
List<IntrospectedColumn> pks=introspectedTable.getPrimaryKeyColumns();
if (pks.size()==1){
sb.append(MyBatis3FormattingUtilities.getAliasedEscapedColumnName(pks.get(0)));
}else{
sb.append(" #your_primary_key_name ");
}
sb.append(" in \r\n (select top ${pageSize} ");
if (pks.size()==1){
sb.append(MyBatis3FormattingUtilities.getAliasedEscapedColumnName(pks.get(0)));
}else{
sb.append(" #your_primary_key_name ");
}
sb.append(" from "+introspectedTable.getAliasedFullyQualifiedTableNameAtRuntime()+" ");
sb.append("\r\n<include refid=\"select_by_page_outter_where_sql\"/> \r\n");
if (pks.size()==1){
sb.append(MyBatis3FormattingUtilities.getAliasedEscapedColumnName(pks.get(0)));
}else{
sb.append(" #your_primary_key_name ");
}
sb.append(" not in (select top ${skipRecordCount} " );
if (pks.size()==1){
sb.append(MyBatis3FormattingUtilities.getAliasedEscapedColumnName(pks.get(0)));
}else{
sb.append(" #your_primary_key_name ");
}
sb.append(" from "+introspectedTable.getAliasedFullyQualifiedTableNameAtRuntime()+" ");
sb.append(" \r\n<include refid=\"select_by_page_inner_where_and_orderby_sql\"/> \r\n");
sb.append(" )");
sb.append(" \r\n<include refid=\"select_by_page_outter_orderby_sql\"/> \r\n");
sb.append(" )");
answer.addElement(new TextElement(sb.toString()));
parentElement.addElement(answer);
return true;
}
}
分享到:
相关推荐
Mybatis代码生成器是一款强大的工具,它极大地提高了开发效率,特别是在处理大量的数据库操作时。这款工具主要用于自动生成MyBatis框架所需的SQL映射文件(sqlmapping系列文件)以及与数据库表对应的实体类,从而...
MyBatis代码生成工具则是为了进一步提高开发效率,自动生成常见的增删改查(CRUD)操作所需的XML配置文件、DAO接口、Service接口及其实现类、Entity实体类,以及一些实用工具类。这些自动生成的代码可以极大地减少...
MyBatis 代码生成器(MBG)是一个强大的工具,用于自动为数据库表生成Java实体类、Mapper接口和XML配置文件,极大地提高了开发效率。在基础版本上进行扩展后,这个特定版本的MBG增加了对分页查询的支持,使得开发者...
本资源包含的是Mybatis-Plus的代码生成器模板代码,用于自动生成符合项目规范的Java实体类、Mapper接口及XML配置文件,提高开发效率。 代码生成器是开发中的利器,它能够根据数据库表结构快速生成对应的Java代码,...
MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 在标题...
MyBatis Generator(MBG)是一款强大的自动化代码生成工具,专为简化MyBatis框架的使用而设计。它能够根据数据库表结构自动生成Java实体类、Mapper接口与XML配置文件,以及Service和Controller层的代码,极大地提高...
MyBatis-Puls是一款基于MyBatis框架的增强工具,它在MyBatis的基础上提供了许多便利的功能,其中包括自定义代码生成器。这个功能允许开发者根据数据库表结构快速生成对应的Java代码,大大提高了开发效率,降低了出错...
在实际开发中,为了提高开发效率,MyBatis提供了一种自动代码生成工具,可以帮助开发者自动生成数据库中的单表操作的基本代码,包括增、删、改、查等常见功能。这个工具极大地减少了手动编写这些重复性工作的时间,...
Mybatis项目代码自动生成工具是一种高效开发神器,它极大地简化了开发者在使用Mybatis框架时的手动编码工作。这个工具能够自动创建实体类、接口以及映射文件,从而减轻开发人员的工作负担,提高开发效率。这里我们将...
本文将详细介绍如何使用MyBatis的代码生成器(Generator)来自动生成实体类,以及相关的配置和使用步骤。 首先,我们需要在项目中配置MyBatis的generator.xml文件。这个文件是MyBatis Generator的配置中心,它包含...
此外,你还可以通过配置文件来控制是否生成Example类,用于更复杂的查询条件。 总之,Mybatis Generator是Mybatis框架下的一款强大辅助工具,它通过自动化代码生成,帮助开发者节省大量手动编写基础代码的时间,...
MyBatis逆向生成工具是一种实用的开发辅助软件,它能够帮助开发者自动生成MyBatis相关的代码,包括Mapper接口、Mapper XML配置文件、实体类以及DAO层的实现,极大地提高了开发效率。逆向工程通常指的是从现有的...
MyBatis自动生成工具是开发过程中的一大利器,它极大地提高了开发效率,减少了手动编写重复代码的工作量。在本文中,我们将深入探讨MyBatis自动生成工具及其核心特性、使用方法和实际应用场景。 MyBatis是一个优秀...
总结来说,MyBatis通用插件自动生成代码器是提高MyBatis开发效率的重要工具,它帮助开发者快速生成与数据库表相关的实体类、Mapper接口和XML映射文件,降低了手动编码的工作量,同时也减少了潜在的错误。通过合理...
这个压缩包文件“generator”很可能包含了一套MyBatis代码生成器的配置和脚本,用于自动生成DAO接口、POJO(Plain Old Java Object)类以及对应的Mapper XML文件。 首先,我们来了解一下DAO(Data Access Object)...
1. 安装必要的依赖:如`mybatis-generator-core-1.3.5.jar`,这是MyBatis生成器的核心库,以及`mysql-connector-java-5.1.38.jar`,这是连接MySQL数据库的驱动。 2. 配置`generatorConfig.xml`,确保所有信息正确...
Mybatis Generator是一款强大的Java代码生成工具,它能够自动根据数据库表结构生成Mybatis的Mapper接口、XML映射文件以及实体类,极大地提高了开发效率。在实际的开发过程中,手动编写这些文件不仅耗时,还容易出错...
`mybatis-generator-core-1.3.5.jar` 是MyBatis Generator的核心库,包含了代码生成器的主要功能。这个库提供了API和XML配置文件的支持,用于定义如何生成代码,包括选择要操作的数据库表、指定生成的代码模板等。...