使用mybatis-generator自动生成代码
1、Maven引入:
<!-- ====================== MyBatis ORM framework dependencies ====================== --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.2</version> <type>jar</type> <scope>provided</scope> </dependency>
2、/src/main/resources下新建generatorConfig.xml
<?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:\source\maven_repository\postgresql\postgresql\9.1-901-1.jdbc4\postgresql-9.1-901-1.jdbc4.jar" /> <context id="context1"> <property name="javaFileEncoding" value="utf-8"/> <property name="" value=""/> <!-- pagination plugin --> <plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin> <plugin type="org.mybatis.generator.plugin.PaginationMysqlPlugin" /> <plugin type="org.mybatis.generator.plugin.CommentPlugin" /> <commentGenerator> <!-- 不生成注解信息 --> <property name="suppressAllComments" value="true" /> </commentGenerator> <jdbcConnection driverClass="org.postgresql.Driver" connectionURL="jdbc:postgresql://10.168.xx.xx:5432/crm_cms" userId="crm" password="crm" /> <javaTypeResolver> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <javaModelGenerator targetPackage="com.lashou.cms.domain" targetProject="service-cms" /> <sqlMapGenerator targetPackage="com.lashou.cms.mapper" targetProject="service-cms" /> <javaClientGenerator targetPackage="com.lashou.cms.mapper" targetProject="service-cms" type="XMLMAPPER" /> <table schema="" tableName="comment_deal" domainObjectName="CommentDeal" /> </context> </generatorConfiguration>
3、新建这两个:
CommentPlugin.java
/** * */ package org.mybatis.generator.plugin; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import org.mybatis.generator.api.FullyQualifiedTable; 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.TopLevelClass; import org.mybatis.generator.internal.db.ConnectionFactory; /** * @author c * @date 2015年9月7日 * */ public class CommentPlugin extends PluginAdapter { private static final String AUTHOR = "modelClassAuthor"; public boolean modelFieldGenerated(Field field, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) { String remark = introspectedColumn.getRemarks(); field.addJavaDocLine("/** " + remark + " */"); return true; } public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) { addModelClassComment(topLevelClass, introspectedTable); return true; } private void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) { String remarks = ""; String author = getProperties().getProperty(AUTHOR); if (null == author || "".equals(author)) { author = System.getProperty("user.name"); } FullyQualifiedTable table = introspectedTable.getFullyQualifiedTable(); try { Connection connection = ConnectionFactory.getInstance().getConnection( context.getJdbcConnectionConfiguration()); ResultSet rs = connection.getMetaData().getTables(table.getIntrospectedCatalog(), table.getIntrospectedSchema(), table.getIntrospectedTableName(), null); if (null != rs && rs.next()) { remarks = rs.getString("REMARKS"); } closeConnection(connection, rs); } catch (SQLException e) {} SimpleDateFormat format = new SimpleDateFormat("yyyy-M-d"); topLevelClass.addJavaDocLine("/**"); topLevelClass.addJavaDocLine(" * " + remarks); topLevelClass.addJavaDocLine(" *"); topLevelClass.addJavaDocLine(" * @author " + author); topLevelClass.addJavaDocLine(" * @date " + format.format(new Date())); topLevelClass.addJavaDocLine(" *"); topLevelClass.addJavaDocLine(" */"); } public boolean modelRecordWithBLOBsClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) { addModelClassComment(topLevelClass, introspectedTable); return true; } @Override public boolean validate(List<String> warnings) { return true; } private void closeConnection(Connection connection, ResultSet rs) { if (null != rs) { try { rs.close(); } catch (SQLException e) {} } if (connection != null) { try { connection.close(); } catch (SQLException e) {} } } }
PaginationMysqlPlugin.java
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; /** * <pre> * add pagination using mysql limit. * This class is only used in ibator code generator. * </pre> */ public class PaginationMysqlPlugin extends PluginAdapter { @Override public boolean modelExampleClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) { // add field, getter, setter for limit clause addLimit(topLevelClass, introspectedTable, "limitStart"); addLimit(topLevelClass, introspectedTable, "limitEnd"); return super.modelExampleClassGenerated(topLevelClass, introspectedTable); } @Override public boolean sqlMapSelectByExampleWithoutBLOBsElementGenerated( XmlElement element, IntrospectedTable introspectedTable) { // XmlElement isParameterPresenteElemen = (XmlElement) element // .getElements().get(element.getElements().size() - 1); // XmlElement isNotNullElement = new XmlElement("isGreaterEqual"); //$NON-NLS-1$ // isNotNullElement.addAttribute(new Attribute("property", "limitStart")); //$NON-NLS-1$ //$NON-NLS-2$ // isNotNullElement.addAttribute(new Attribute("compareValue", "0")); //$NON-NLS-1$ //$NON-NLS-2$ XmlElement isNotNullElement = new XmlElement("if"); isNotNullElement.addAttribute(new Attribute("test", "limitStart >= 0")); isNotNullElement.addElement(new TextElement( " limit ${limitStart} , ${limitEnd}")); // isParameterPresenteElemen.addElement(isNotNullElement); 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); } /** * This plugin is always valid - no properties are required */ public boolean validate(List<String> warnings) { return true; } public static void generate() { String config = PaginationMysqlPlugin.class.getClassLoader() .getResource("mybatisConfig.xml").getFile(); String[] arg = { "-configfile", config, "-overwrite" }; ShellRunner.main(arg); } public static void main(String[] args) { generate(); } }
4、生成代码:
在generatorConfig.xml上右键,选择Generator Mybatis/IBATIES Artifacts
在追随技术的道路上,十年如一日~