`

mybatis代码生成器避免生成Example类的配置参数

阅读更多
<?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;
	}

}

 

5
3
分享到:
评论
4 楼 u148 2014-08-01  
调去你自己写的那个分页的没有成功,请求帮助。
3 楼 mojunbin 2012-05-15  
呵呵.准备研究一下楼主的分页插件
2 楼 witchan 2011-11-12  
同问 用插件的方式可以不生成example类吗 我觉得这个可以提取出来公用
1 楼 Dev_song 2011-09-30  
能让mybatis生成的代码不要带example的类实体么,非替换

相关推荐

    Mybatis代码生成器

    Mybatis代码生成器是一款强大的工具,它极大地提高了开发效率,特别是在处理大量的数据库操作时。这款工具主要用于自动生成MyBatis框架所需的SQL映射文件(sqlmapping系列文件)以及与数据库表对应的实体类,从而...

    MyBatis代码生成工具

    MyBatis代码生成工具则是为了进一步提高开发效率,自动生成常见的增删改查(CRUD)操作所需的XML配置文件、DAO接口、Service接口及其实现类、Entity实体类,以及一些实用工具类。这些自动生成的代码可以极大地减少...

    mybatis 代码生成器 扩展版本,可以自动生成分页查询

    MyBatis 代码生成器(MBG)是一个强大的工具,用于自动为数据库表生成Java实体类、Mapper接口和XML配置文件,极大地提高了开发效率。在基础版本上进行扩展后,这个特定版本的MBG增加了对分页查询的支持,使得开发者...

    mybatis-plus代码生成器模版代码

    本资源包含的是Mybatis-Plus的代码生成器模板代码,用于自动生成符合项目规范的Java实体类、Mapper接口及XML配置文件,提高开发效率。 代码生成器是开发中的利器,它能够根据数据库表结构快速生成对应的Java代码,...

    mybatis自动生成代码和配置文件

    MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 在标题...

    mybatis自动生成代码工具

    MyBatis Generator(MBG)是一款强大的自动化代码生成工具,专为简化MyBatis框架的使用而设计。它能够根据数据库表结构自动生成Java实体类、Mapper接口与XML配置文件,以及Service和Controller层的代码,极大地提高...

    mybatis-puls自定义代码生成器

    MyBatis-Puls是一款基于MyBatis框架的增强工具,它在MyBatis的基础上提供了许多便利的功能,其中包括自定义代码生成器。这个功能允许开发者根据数据库表结构快速生成对应的Java代码,大大提高了开发效率,降低了出错...

    mybatis自动生成基本代码工具

    在实际开发中,为了提高开发效率,MyBatis提供了一种自动代码生成工具,可以帮助开发者自动生成数据库中的单表操作的基本代码,包括增、删、改、查等常见功能。这个工具极大地减少了手动编写这些重复性工作的时间,...

    Mybatis项目代码自动生成工具.zip

    Mybatis项目代码自动生成工具是一种高效开发神器,它极大地简化了开发者在使用Mybatis框架时的手动编码工作。这个工具能够自动创建实体类、接口以及映射文件,从而减轻开发人员的工作负担,提高开发效率。这里我们将...

    mybatis自动生成实体类

    本文将详细介绍如何使用MyBatis的代码生成器(Generator)来自动生成实体类,以及相关的配置和使用步骤。 首先,我们需要在项目中配置MyBatis的generator.xml文件。这个文件是MyBatis Generator的配置中心,它包含...

    使用Mybatis Generator自动生成Mybatis相关代码

    此外,你还可以通过配置文件来控制是否生成Example类,用于更复杂的查询条件。 总之,Mybatis Generator是Mybatis框架下的一款强大辅助工具,它通过自动化代码生成,帮助开发者节省大量手动编写基础代码的时间,...

    mybatis逆向生成工具

    MyBatis逆向生成工具是一种实用的开发辅助软件,它能够帮助开发者自动生成MyBatis相关的代码,包括Mapper接口、Mapper XML配置文件、实体类以及DAO层的实现,极大地提高了开发效率。逆向工程通常指的是从现有的...

    MyBatis自动生成工具

    MyBatis自动生成工具是开发过程中的一大利器,它极大地提高了开发效率,减少了手动编写重复代码的工作量。在本文中,我们将深入探讨MyBatis自动生成工具及其核心特性、使用方法和实际应用场景。 MyBatis是一个优秀...

    MyBatis通用插件自动生成代码器

    总结来说,MyBatis通用插件自动生成代码器是提高MyBatis开发效率的重要工具,它帮助开发者快速生成与数据库表相关的实体类、Mapper接口和XML映射文件,降低了手动编码的工作量,同时也减少了潜在的错误。通过合理...

    mybatis自动生成dao接口、pojo、mapper.xml

    这个压缩包文件“generator”很可能包含了一套MyBatis代码生成器的配置和脚本,用于自动生成DAO接口、POJO(Plain Old Java Object)类以及对应的Mapper XML文件。 首先,我们来了解一下DAO(Data Access Object)...

    mybatis文件生成器

    1. 安装必要的依赖:如`mybatis-generator-core-1.3.5.jar`,这是MyBatis生成器的核心库,以及`mysql-connector-java-5.1.38.jar`,这是连接MySQL数据库的驱动。 2. 配置`generatorConfig.xml`,确保所有信息正确...

    Mybatis自动生成映射配置文件信息的generator工具

    Mybatis Generator是一款强大的Java代码生成工具,它能够自动根据数据库表结构生成Mybatis的Mapper接口、XML映射文件以及实体类,极大地提高了开发效率。在实际的开发过程中,手动编写这些文件不仅耗时,还容易出错...

    MyBatis Generator 代码生成器+MySQL驱动+配置文件

    `mybatis-generator-core-1.3.5.jar` 是MyBatis Generator的核心库,包含了代码生成器的主要功能。这个库提供了API和XML配置文件的支持,用于定义如何生成代码,包括选择要操作的数据库表、指定生成的代码模板等。...

Global site tag (gtag.js) - Google Analytics