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

来源:互联网 发布:techrules 知乎 编辑:程序博客网 时间:2024/06/14 14:38

http://peihexian.iteye.com/blog/982917

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

SQLXMLDAOJDBCMicrosoft 
Xml代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE generatorConfiguration  
  3.   PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"  
  4.   "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">  
  5.   
  6. <generatorConfiguration>  
  7.     <classPathEntry location="d://java//sqljdbc4.jar" />  
  8.   
  9.     <context id="DB2Tables" targetRuntime="MyBatis3">  
  10.   
  11.         <property name="suppressTypeWarnings" value="true" />  
  12.   
  13.         <plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin" />  
  14.         <plugin type="org.mybatis.generator.plugins.SerializablePlugin" />  
  15.         <plugin type="org.mybatis.generator.plugins.CaseInsensitiveLikePlugin" />  
  16.         <plugin type="org.mybatis.generator.plugins.RenameExampleClassPlugin">  
  17.             <property name="searchString" value="Example$" />  
  18.             <property name="replaceString" value="Criteria" />  
  19.         </plugin>  
  20.         <plugin type="com.shinowit.mybatis.plugin.SelectByPagePlugin" />  
  21.         <plugin type="com.shinowit.mybatis.plugin.Struts2ActionPlugin" />  
  22.     <commentGenerator>  
  23.             <property name="suppressAllComments" value="true" />  
  24.         </commentGenerator>  
  25.   
  26.         <jdbcConnection driverClass="com.microsoft.sqlserver.jdbc.SQLServerDriver"  
  27.             connectionURL="jdbc:sqlserver://localhost:1433;databaseName=OSS;"  
  28.             userId="sa" password="sasa">  
  29.         </jdbcConnection>  
  30.   
  31.         <javaTypeResolver>  
  32.             <property name="forceBigDecimals" value="false" />  
  33.         </javaTypeResolver>  
  34.   
  35.         <javaModelGenerator targetPackage="com.shinowit.model"  
  36.             targetProject="src">  
  37.             <property name="enableSubPackages" value="true" />  
  38.             <property name="trimStrings" value="true" />  
  39.         </javaModelGenerator>  
  40.   
  41.         <sqlMapGenerator targetPackage="com.shinowit.dao.mapper"  
  42.             targetProject="src">  
  43.             <property name="enableSubPackages" value="true" />  
  44.         </sqlMapGenerator>  
  45.   
  46.         <javaClientGenerator type="XMLMAPPER"  
  47.             targetPackage="com.shinowit.dao.mapper" targetProject="src">  
  48.             <property name="enableSubPackages" value="true" />  
  49.         </javaClientGenerator>  
  50.   
  51.   
  52.         <table tableName="TBa_MemberInfo">  
  53.             <generatedKey column="ID" sqlStatement="SqlServer"  
  54.                 identity="true" />  
  55.         </table>  
  56.         <table tableName="TBa_SupplyRecordInfo">  
  57.             <generatedKey column="ID" sqlStatement="SqlServer"  
  58.                 identity="true" />  
  59.         </table>  
  60.   
  61.     </context>  
  62. </generatorConfiguration>  

 其实想要mybaits代码生成器生成Example类换个名字,是通过插件实现的,即下面的这个插件配置参数很关键。

Xml代码  收藏代码
  1. <plugin type="org.mybatis.generator.plugins.RenameExampleClassPlugin">  
  2.     <property name="searchString" value="Example$" />  
  3.     <property name="replaceString" value="Criteria" />  
  4. </plugin>  

 

 

如果不喜欢生成的代码中带有代理的mybatis代码生成器的注解信息,可以配置下面的配置参数关闭注解信息的生成:

 

Xml代码  收藏代码
  1. <commentGenerator>  
  2.         <property name="suppressAllComments" value="true" />  
  3. </commentGenerator>  

 

 

上面示例中的分页代码自动生成插件是我自己写的,用于自动生成数据库物理分页的代码。

 

该插件的源码如下:

Java代码  收藏代码
  1. package com.shinowit.mybatis.plugin;  
  2.   
  3. import static org.mybatis.generator.internal.util.messages.Messages.getString;  
  4.   
  5. import java.util.List;  
  6. import java.util.Set;  
  7. import java.util.TreeSet;  
  8.   
  9. import org.mybatis.generator.api.IntrospectedColumn;  
  10. import org.mybatis.generator.api.IntrospectedTable;  
  11. import org.mybatis.generator.api.PluginAdapter;  
  12. import org.mybatis.generator.api.dom.java.Field;  
  13. import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;  
  14. import org.mybatis.generator.api.dom.java.Interface;  
  15. import org.mybatis.generator.api.dom.java.JavaVisibility;  
  16. import org.mybatis.generator.api.dom.java.Method;  
  17. import org.mybatis.generator.api.dom.java.Parameter;  
  18. import org.mybatis.generator.api.dom.java.TopLevelClass;  
  19. import org.mybatis.generator.api.dom.xml.Attribute;  
  20. import org.mybatis.generator.api.dom.xml.Document;  
  21. import org.mybatis.generator.api.dom.xml.TextElement;  
  22. import org.mybatis.generator.api.dom.xml.XmlElement;  
  23. import org.mybatis.generator.codegen.mybatis3.MyBatis3FormattingUtilities;  
  24.   
  25. public class SelectByPagePlugin extends PluginAdapter {  
  26.   
  27.     @Override  
  28.     public boolean validate(List<String> warnings) {  
  29.         return true;  
  30.     }  
  31.   
  32.     private void addField(String fieldName, FullyQualifiedJavaType fieldType,  
  33.             TopLevelClass topLevelClass) {  
  34.         Field tmpField = new Field(fieldName, fieldType);  
  35.         tmpField.setVisibility(JavaVisibility.PRIVATE);  
  36.         topLevelClass.addField(tmpField);  
  37.   
  38.         Method setMethod = new Method();  
  39.         setMethod.setName("set" + fieldName.toUpperCase().substring(01)  
  40.                 + fieldName.substring(1));  
  41.         Parameter param = new Parameter(fieldType, fieldName);  
  42.         setMethod.addParameter(param);  
  43.         setMethod.setVisibility(JavaVisibility.PUBLIC);  
  44.         setMethod.addBodyLine("this." + fieldName + "=" + fieldName + ";");  
  45.   
  46.         topLevelClass.addMethod(setMethod);  
  47.   
  48.         Method getMethod = new Method();  
  49.         getMethod.setName("get" + fieldName.toUpperCase().substring(01)  
  50.                 + fieldName.substring(1));  
  51.   
  52.         getMethod.setReturnType(fieldType);  
  53.         getMethod.setVisibility(JavaVisibility.PUBLIC);  
  54.         getMethod.addBodyLine("return this." + fieldName + ";");  
  55.   
  56.         topLevelClass.addMethod(getMethod);  
  57.   
  58.     }  
  59.   
  60.     @Override  
  61.     public boolean modelExampleClassGenerated(TopLevelClass topLevelClass,  
  62.             IntrospectedTable introspectedTable) {  
  63.         FullyQualifiedJavaType intType = FullyQualifiedJavaType  
  64.                 .getIntInstance();  
  65.         addField("pageIndex", intType, topLevelClass);  
  66.         addField("pageSize", intType, topLevelClass);  
  67.   
  68.         Method getSkipCountMethod = new Method();  
  69.         getSkipCountMethod.setName("getSkipRecordCount");  
  70.   
  71.         getSkipCountMethod.setReturnType(intType);  
  72.         getSkipCountMethod.setVisibility(JavaVisibility.PUBLIC);  
  73.         getSkipCountMethod  
  74.                 .addBodyLine("return (this.pageIndex-1)*this.pageSize;");  
  75.   
  76.         topLevelClass.addMethod(getSkipCountMethod);  
  77.           
  78.         Method getEndRecordIndexMethod = new Method();  
  79.         getEndRecordIndexMethod.setName("getEndRecordCount");  
  80.   
  81.         getEndRecordIndexMethod.setReturnType(intType);  
  82.         getEndRecordIndexMethod.setVisibility(JavaVisibility.PUBLIC);  
  83.         getEndRecordIndexMethod  
  84.                 .addBodyLine("return this.pageIndex*this.pageSize;");  
  85.   
  86.         topLevelClass.addMethod(getEndRecordIndexMethod);  
  87.           
  88.   
  89.         Method newConstructorMethod = new Method();  
  90.         newConstructorMethod.setConstructor(true);  
  91.         newConstructorMethod.addParameter(new Parameter(intType, "pageSize"));  
  92.         newConstructorMethod.addParameter(new Parameter(intType, "pageIndex"));  
  93.         newConstructorMethod.addBodyLine("this();");  
  94.         newConstructorMethod.addBodyLine("this.pageSize=pageSize;");  
  95.         newConstructorMethod.addBodyLine("this.pageIndex=pageIndex;");  
  96.         newConstructorMethod.setVisibility(JavaVisibility.PUBLIC);  
  97.         newConstructorMethod.setName(topLevelClass.getType().getShortName());  
  98.   
  99.         topLevelClass.addMethod(newConstructorMethod);  
  100.         return true;  
  101.     }  
  102.   
  103.     @Override  
  104.     public boolean clientGenerated(Interface interfaze,  
  105.             TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {  
  106.   
  107.         Set<FullyQualifiedJavaType> importedTypes = new TreeSet<FullyQualifiedJavaType>();  
  108.         FullyQualifiedJavaType type = new FullyQualifiedJavaType(  
  109.                 introspectedTable.getExampleType());  
  110.         importedTypes.add(type);  
  111.         importedTypes.add(FullyQualifiedJavaType.getNewListInstance());  
  112.   
  113.         Method method = new Method();  
  114.         method.setVisibility(JavaVisibility.PUBLIC);  
  115.   
  116.         FullyQualifiedJavaType returnType = FullyQualifiedJavaType  
  117.                 .getNewListInstance();  
  118.         FullyQualifiedJavaType listType;  
  119.         if (introspectedTable.getRules().generateBaseRecordClass()) {  
  120.             listType = new FullyQualifiedJavaType(introspectedTable  
  121.                     .getBaseRecordType());  
  122.         } else if (introspectedTable.getRules().generatePrimaryKeyClass()) {  
  123.             listType = new FullyQualifiedJavaType(introspectedTable  
  124.                     .getPrimaryKeyType());  
  125.         } else {  
  126.             throw new RuntimeException(getString("RuntimeError.12")); //$NON-NLS-1$  
  127.         }  
  128.   
  129.         importedTypes.add(listType);  
  130.         returnType.addTypeArgument(listType);  
  131.         method.setReturnType(returnType);  
  132.   
  133.         method.setName("selectPage");  
  134.         method.addParameter(new Parameter(type, "example")); //$NON-NLS-1$  
  135.   
  136.         interfaze.addImportedTypes(importedTypes);  
  137.         interfaze.addMethod(method);  
  138.   
  139.         return true;  
  140.     }  
  141.   
  142.     @Override  
  143.     public boolean sqlMapDocumentGenerated(Document document,  
  144.             IntrospectedTable introspectedTable) {  
  145.   
  146.         XmlElement parentElement = document.getRootElement();  
  147.   
  148.         XmlElement newResultMapElement = new XmlElement("resultMap");  
  149.         newResultMapElement  
  150.                 .addAttribute(new Attribute("id""selectPageResult"));  
  151.         newResultMapElement.addAttribute(new Attribute("extends",  
  152.                 "BaseResultMap"));  
  153.           
  154.         String returnType;  
  155.         if (introspectedTable.getRules().generateBaseRecordClass()) {  
  156.             returnType = introspectedTable.getBaseRecordType();  
  157.         } else {  
  158.             returnType = introspectedTable.getPrimaryKeyType();  
  159.         }  
  160.           
  161.         newResultMapElement.addAttribute(new Attribute("type",  
  162.                 returnType));  
  163.         newResultMapElement  
  164.                 .addElement(new TextElement(  
  165.                         "<!--\r\n<association property=\"\" column=\"\" javaType=\"\">\r\n"  
  166.                                 + "   <id column=\"\" property=\"\" jdbcType=\"\" />\r\n"  
  167.                                 + "   <result column=\"\" property=\"\" jdbcType=\"\" />\r\n"  
  168.                                 + " </association>\r\n-->"));  
  169.   
  170.         parentElement.addElement(newResultMapElement);  
  171.           
  172.           
  173.         //以下代码用于生成支持分页的sql片段  
  174.         /** 
  175.          *注意千万不要随意删除代码中的空格 ! 
  176.          *do not remove spaces  
  177.          */  
  178.           
  179.         XmlElement outter_where_sql=new XmlElement("sql");  
  180.         outter_where_sql.addAttribute(new Attribute("id""select_by_page_outter_where_sql"));  
  181.           
  182.         StringBuilder sb = new StringBuilder();  
  183.         sb.append("  <if test=\"oredCriteria.size>0\">");  
  184.         sb.append("     <if test=\"_parameter != null\" > <include refid=\"Example_Where_Clause\"/> </if>");  
  185.         sb.append("    and ");  
  186.         sb.append("  </if>");  
  187.         sb.append("  <if test=\"oredCriteria.size==0\"> ");  
  188.         sb.append("    where ");  
  189.         sb.append("  </if> ");  
  190.         outter_where_sql.addElement(new TextElement(sb.toString()));  
  191.         parentElement.addElement(outter_where_sql);  
  192.           
  193.         XmlElement inner_where_sql=new XmlElement("sql");  
  194.         inner_where_sql.addAttribute(new Attribute("id""select_by_page_inner_where_and_orderby_sql"));  
  195.         sb.setLength(0);  
  196.         sb.append("  <if test=\"oredCriteria.size>0\">");  
  197.         sb.append("     <if test=\"_parameter != null\" > <include refid=\"Example_Where_Clause\"/> </if>");  
  198.         sb.append("  </if>");  
  199.         sb.append("   <if test=\"orderByClause != null\">");  
  200.         sb.append("    order by ${orderByClause} ");  
  201.         sb.append("  </if> ");  
  202.         inner_where_sql.addElement(new TextElement(sb.toString()));  
  203.         parentElement.addElement(inner_where_sql);  
  204.           
  205.           
  206.         XmlElement outter_orderby_sql=new XmlElement("sql");  
  207.         outter_orderby_sql.addAttribute(new Attribute("id""select_by_page_outter_orderby_sql"));  
  208.         sb.setLength(0);  
  209.         sb.append("   <if test=\"orderByClause != null\">");  
  210.         sb.append("    order by ${orderByClause} ");  
  211.         sb.append("  </if> ");  
  212.         outter_orderby_sql.addElement(new TextElement(sb.toString()));  
  213.         parentElement.addElement(outter_orderby_sql);  
  214.           
  215.         //以上代码用于生成支持分页的sql片段  
  216.   
  217.         String fqjt = introspectedTable.getExampleType();  
  218.   
  219.         XmlElement answer = new XmlElement("select"); //$NON-NLS-1$  
  220.   
  221.         answer.addAttribute(new Attribute("id"//$NON-NLS-1$  
  222.                 "selectPage"));  
  223.         answer.addAttribute(new Attribute(  
  224.                 "resultMap","selectPageResult")); //$NON-NLS-1$  
  225.         answer.addAttribute(new Attribute("parameterType", fqjt)); //$NON-NLS-1$  
  226.   
  227.           
  228.         sb.setLength(0);  
  229.         sb.append("select a.* from ");  
  230.         sb.append(introspectedTable  
  231.                 .getAliasedFullyQualifiedTableNameAtRuntime());  
  232.   
  233.         sb.append(" a where a.");  
  234.   
  235.         List<IntrospectedColumn> pks=introspectedTable.getPrimaryKeyColumns();  
  236.           
  237.         if (pks.size()==1){  
  238.             sb.append(MyBatis3FormattingUtilities.getAliasedEscapedColumnName(pks.get(0)));  
  239.         }else{  
  240.             sb.append(" #your_primary_key_name ");  
  241.         }  
  242.         sb.append(" in \r\n (select top ${pageSize} ");  
  243.         if (pks.size()==1){  
  244.             sb.append(MyBatis3FormattingUtilities.getAliasedEscapedColumnName(pks.get(0)));  
  245.         }else{  
  246.             sb.append(" #your_primary_key_name ");  
  247.         }  
  248.         sb.append(" from "+introspectedTable.getAliasedFullyQualifiedTableNameAtRuntime()+" ");  
  249.         sb.append("\r\n<include refid=\"select_by_page_outter_where_sql\"/> \r\n");  
  250.         if (pks.size()==1){  
  251.             sb.append(MyBatis3FormattingUtilities.getAliasedEscapedColumnName(pks.get(0)));  
  252.         }else{  
  253.             sb.append(" #your_primary_key_name ");  
  254.         }  
  255.         sb.append(" not in (select top ${skipRecordCount} " );  
  256.         if (pks.size()==1){  
  257.             sb.append(MyBatis3FormattingUtilities.getAliasedEscapedColumnName(pks.get(0)));  
  258.         }else{  
  259.             sb.append(" #your_primary_key_name ");  
  260.         }  
  261.         sb.append(" from "+introspectedTable.getAliasedFullyQualifiedTableNameAtRuntime()+" ");  
  262.         sb.append(" \r\n<include refid=\"select_by_page_inner_where_and_orderby_sql\"/> \r\n");  
  263.         sb.append(" )");  
  264.         sb.append(" \r\n<include refid=\"select_by_page_outter_orderby_sql\"/> \r\n");  
  265.         sb.append(" )");  
  266.           
  267.           
  268.         answer.addElement(new TextElement(sb.toString()));  
  269.   
  270.         parentElement.addElement(answer);  
  271.   
  272.         return true;  
  273.     }  
  274.   
  275. }  

原创粉丝点击