mybatis可以通过数据库表直接替我们生成模型类和mappper文件。
这里说一下怎么配置,尤其是如何加上中文注释。当前前提是数据表和字段有中文注释。
比如这样的:
下面配置自动生成模型类和mapper类还有mapper的xml文件。
网上关于如何使用mybatis-generator生成Java对象的文章很多,这里不详细说了。大家可以到百度上so一下,比如http://www.cnblogs.com/smileberry/p/4145872.html,http://www.cnblogs.com/yjmyzz/p/4210554.html
假设我们已经设计好了表结构,表和字段都有自己的注释(其实中英文倒无所谓)。
下面是反向生成的过程:
在类路径下新建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> <!--指定特定数据库的jdbc驱动jar包的位置--> <classPathEntry location="${jdbc.driverLocation}"/> <context id="default" targetRuntime="MyBatis3"> <!--jdbc的数据库连接 --> <jdbcConnection driverClass="${jdbc.driverClass}" connectionURL="${jdbc.connectionURL}" userId="${jdbc.userId}" password="${jdbc.password}"> </jdbcConnection> <javaTypeResolver> <property name="forceBigDecimals" value="true"/> </javaTypeResolver> <javaModelGenerator targetPackage="comxxx.model" targetProject="src/main/java"> <property name="enableSubPackages" value="false"/> <property name="constructorBased" value="true"/> <property name="trimStrings" value="true"/> <property name="immutable" value="false"/> </javaModelGenerator> <sqlMapGenerator targetPackage="com.xxx.mapper" targetProject="src/main/resources"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <javaClientGenerator targetPackage="com.xxx.mapper" targetProject="src/main/java" type="XMLMAPPER"> <property name="enableSubPackages" value="false"/> </javaClientGenerator> <table tableName="import_goods_quantity" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> <!--<generatedKey identity="true" sqlStatement="MySql" column="id"/>--> </table> </context> </generatorConfiguration>
generatorConfiguration 有一个子标签
<properties resource="xxx.properties"></properties>
可以引入配置变量。
配置好以后就可以使用插件mybatis-generator-maven-plugin生成了。
<plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.5</version> <configuration> <verbose>true</verbose> <overwrite>true</overwrite> </configuration> </plugin>
我们这里使用的是1.3.5版本。
现在用mybatis-generator:generate就可以生成Java类和xml文件到指定目录了。
这样生成的类注释是自动的、毫无意义的时间描述,类似于
@mbg.generated
我们希望数据库里的注释能够拿过来,怎么搞呢?
新建一个maven工程,坐标比如是
<groupId>com.xxx</groupId> <artifactId>comment_generator</artifactId> <version>1.0-SNAPSHOT</version>
引入依赖
<dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.5</version> </dependency>
新建注释配置类
public class MybatisCommentGenerator implements CommentGenerator { private Properties properties; private Properties systemPro; private boolean suppressDate; private boolean suppressAllComments; private String currentDateStr; public MybatisCommentGenerator() { super(); properties = new Properties(); systemPro = System.getProperties(); suppressDate = false; suppressAllComments = false; currentDateStr = (new SimpleDateFormat("yyyy-MM-dd")).format(new Date()); } /** * Adds properties for this instance from any properties configured in the * CommentGenerator configuration. * <p> * This method will be called before any of the other methods. * * @param properties All properties from the configuration */ public void addConfigurationProperties(Properties properties) { this.properties.putAll(properties); suppressDate = isTrue(properties.getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_DATE)); suppressAllComments = isTrue(properties.getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_ALL_COMMENTS)); } /** * * @param field the field * @param introspectedTable the introspected table * @param introspectedColumn */ public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) { if (suppressAllComments) { return; } StringBuilder sb = new StringBuilder(); field.addJavaDocLine("/**"); sb.append(" * "); sb.append(introspectedColumn.getRemarks()); field.addJavaDocLine(sb.toString()); addJavadocTag(field, false); field.addJavaDocLine(" */"); } /** * Adds the field comment. * * @param field the field * @param introspectedTable */ public void addFieldComment(Field field, IntrospectedTable introspectedTable) { if (suppressAllComments) { return; } StringBuilder sb = new StringBuilder(); field.addJavaDocLine("/**"); sb.append(" * "); sb.append(introspectedTable.getFullyQualifiedTable()); field.addJavaDocLine(sb.toString()); field.addJavaDocLine(" */"); } public void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) { if (suppressAllComments) { return; } StringBuilder sb = new StringBuilder(); topLevelClass.addJavaDocLine("/**"); sb.append(" * "); sb.append(introspectedTable.getRemarks()); sb.append(" "); sb.append(introspectedTable.getTableType()); sb.append(" "); sb.append(getDateString()); topLevelClass.addJavaDocLine(sb.toString()); topLevelClass.addJavaDocLine(" */"); } /** * Adds the inner class comment. * * @param innerClass the inner class * @param introspectedTable */ public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable) { if (suppressAllComments) { return; } StringBuilder sb = new StringBuilder(); innerClass.addJavaDocLine("/**"); sb.append(" * "); sb.append(introspectedTable.getFullyQualifiedTable()); sb.append(" "); sb.append(getDateString()); innerClass.addJavaDocLine(sb.toString()); innerClass.addJavaDocLine(" */"); } /** * Adds the inner class comment. * * @param innerClass the inner class * @param introspectedTable the introspected table * @param markAsDoNotDelete */ public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable, boolean markAsDoNotDelete) { if (suppressAllComments) { return; } StringBuilder sb = new StringBuilder(); innerClass.addJavaDocLine("/**"); sb.append(" * "); sb.append(introspectedTable.getFullyQualifiedTable()); innerClass.addJavaDocLine(sb.toString()); sb.setLength(0); sb.append(" * @author "); sb.append(systemPro.getProperty("user.name")); sb.append(" "); sb.append(currentDateStr); addJavadocTag(innerClass, markAsDoNotDelete); innerClass.addJavaDocLine(" */"); } /** * Adds the enum comment. * * @param innerEnum the inner enum * @param introspectedTable */ public void addEnumComment(InnerEnum innerEnum, IntrospectedTable introspectedTable) { if (suppressAllComments) { return; } StringBuilder sb = new StringBuilder(); innerEnum.addJavaDocLine("/**"); addJavadocTag(innerEnum, false); sb.append(" * "); sb.append(introspectedTable.getFullyQualifiedTable()); innerEnum.addJavaDocLine(sb.toString()); innerEnum.addJavaDocLine(" */"); } /** * Adds the getter comment. * * @param method the method * @param introspectedTable the introspected table * @param introspectedColumn */ public void addGetterComment(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) { if (suppressAllComments) { return; } method.addJavaDocLine("/**"); StringBuilder sb = new StringBuilder(); sb.append(" * "); sb.append(introspectedColumn.getRemarks()); method.addJavaDocLine(sb.toString()); sb.setLength(0); sb.append(" * @return "); sb.append(introspectedColumn.getActualColumnName()); sb.append(" "); sb.append(introspectedColumn.getRemarks()); method.addJavaDocLine(sb.toString()); addJavadocTag(method, false); method.addJavaDocLine(" */"); } /** * Adds the setter comment. * * @param method the method * @param introspectedTable the introspected table * @param introspectedColumn */ public void addSetterComment(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) { if (suppressAllComments) { return; } method.addJavaDocLine("/**"); StringBuilder sb = new StringBuilder(); sb.append(" * "); sb.append(introspectedColumn.getRemarks()); method.addJavaDocLine(sb.toString()); Parameter parm = method.getParameters().get(0); sb.setLength(0); sb.append(" * @param "); sb.append(parm.getName()); sb.append(" "); sb.append(introspectedColumn.getRemarks()); method.addJavaDocLine(sb.toString()); addJavadocTag(method, false); method.addJavaDocLine(" */"); } /** * Adds the general method comment. * * @param method the method * @param introspectedTable */ public void addGeneralMethodComment(Method method, IntrospectedTable introspectedTable) { if (suppressAllComments) { return; } method.addJavaDocLine("/**"); // addJavadocTag(method, false); StringBuilder sb = new StringBuilder(); sb.append(" * "); sb.append(MergeConstants.NEW_ELEMENT_TAG); String s = method.getName(); sb.append(' '); sb.append(s); method.addJavaDocLine(sb.toString()); method.addJavaDocLine(" */"); } public void addJavaFileComment(CompilationUnit compilationUnit) { } public void addComment(XmlElement xmlElement) { } public void addRootComment(XmlElement rootElement) { } protected void addJavadocTag(JavaElement javaElement, boolean markAsDoNotDelete) { javaElement.addJavaDocLine(" *"); StringBuilder sb = new StringBuilder(); sb.append(" * "); sb.append(MergeConstants.NEW_ELEMENT_TAG); if (markAsDoNotDelete) { sb.append(" do_not_delete_during_merge"); } String s = getDateString(); if (s != null) { sb.append(' '); sb.append(s); } javaElement.addJavaDocLine(sb.toString()); } protected String getDateString() { String result = null; if (!suppressDate) { result = currentDateStr; } return result; } }
将这个工程install一下。(可以关闭了,除非你要继续修改)
回到前面需要反向生成的工程。
在generatorConfig.xml中,修改
commentGenerator
元素为
<commentGenerator type="com.xxx.mybatis.MybatisCommentGenerator"> <property name="suppressDate" value="false"/> <property name="suppressAllComments" value="false"/> </commentGenerator>
其中type指向刚才工程里的注释配置类。suppressDate依个人喜好可有可无。
修改generator插件,引入刚才新建的工程依赖:
<plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.5</version> <configuration> <verbose>true</verbose> <overwrite>true</overwrite> </configuration> <dependencies> <dependency> <groupId>com.xxx</groupId> <artifactId>comment_generator</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> </plugin>
再次运行插件,可以看到模型类上有了我们在数据库里写好的注释。
相关推荐
MyBatis反向生成工具是开发过程中非常实用的一个辅助组件,尤其在大型项目中,它能够极大地提高开发效率。这个工具允许开发者根据已有的数据库结构自动生成对应的Mapper接口、Mapper XML配置文件以及POJO(Plain Old...
在使用Mybatis反向生成工具时,需要注意以下几点: 1. 数据库连接信息的准确性:包括数据库类型、URL、用户名和密码,这些信息直接影响到工具能否成功连接到数据库并获取表结构。 2. 表的选择:根据实际需求,选择...
首先,Mybatis-Generator的核心功能在于反向工程,即根据数据库中的表信息来生成相应的Java源代码。用户需要在项目的配置文件中指定数据库连接参数(如URL、用户名、密码等),以及需要生成代码的表名和相应的配置...
本压缩包“mybatis反向生成工具+注释.zip”提供了这样一个便捷的工具,并且带有详细的注释,旨在帮助开发者更好地理解和使用。 首先,我们需要了解MyBatis的反向生成工具(MyBatis Generator,简称MBG)。MBG能够...
Mybatis反向生成工具是一款强大的数据库操作辅助软件,主要用于简化开发过程中的模型、Mapper接口、Mapper XML文件以及Service层代码的编写。它可以根据数据库表结构自动生成对应的Java实体类、Mapper接口及其XML...
总结起来,"mysql-mybatis反向生成bean,mapper等"这一过程是Java开发中提升效率的重要手段。通过MySQL的反向工程和MyBatis Generator,我们可以快速地从数据库表结构生成相应的Java代码,降低了开发的复杂度,同时...
MyBatis 反向工程(Reverse Engineering)是 MyBatis 提供的一种自动化工具,它能够根据数据库中的表结构自动生成对应的 Java 模型类、Mapper 映射接口以及 XML 映射文件,大大减少了开发人员的手动编码工作,提高了...
在“mybatis_generator反向生成dao,model,mapper。model带注释”的场景下,MBG将基于指定的数据库连接信息,读取表结构并生成以下组件: 1. DAO(Data Access Object):这是与数据库交互的接口层,MBG会为每个表...
MyBatis Generator(MBG)是一款强大的工具,用于自动生成MyBatis的实体类、映射文件以及DAO接口。这款Eclipse插件极大地简化了开发过程,帮助开发者节省时间,提高代码质量。以下是对该插件及其使用方法的详细解释...
Mybatis反向工程支持自定义模版,你可以根据项目需求调整生成的Java实体类、Mapper接口和XML文件的样式。默认模版已经包含了基本的CRUD操作,但你可能需要添加更多的业务逻辑或注解。在generatorConfig.xml中,可以...
总结一下,这个压缩包提供的资源可以帮助你在使用 MyBatis Generator 时生成带有中文注释的 Java 类,提升团队协作效率。只需正确配置 `generatorConfig.xml` 和在 Maven 项目中引用 `mybatis-generator-core-1.3.2....
"mybatis逆向生成代码"是指利用特定工具或方法,从现有的数据库表结构反向生成MyBatis的相关文件,如Mapper文件、接口文件以及POJO(Plain Old Java Object)实体类文件。这种操作可以显著提高开发效率,避免手动...
MyBatis Generator(MBG)是一款强大的工具,用于在Java开发中自动生成MyBatis映射器、模型类和XML配置文件。它极大地简化了基于MyBatis框架的数据访问层(DAO)代码编写工作,通过数据库表反向工程实现代码自动化...
下面将详细介绍如何在Idea中使用MyBatis Generator进行反向生成代码。 首先,我们需要了解MyBatis Generator的基本配置。MBG的配置文件通常是一个XML文件,其中包含了数据库连接信息、表的选择以及生成代码的模板等...
MyBatis Generator(MBG)是一款强大的工具,用于自动生成MyBatis的SQL映射文件、Java模型类以及DAO接口。在Eclipse这样的集成开发环境中,MBG作为一个插件使用,能够极大地提升开发效率,减少手动编写重复代码的...
MyBatis Generator(MBG)是一个强大的工具,用于自动生成MyBatis的SQL映射文件、Java模型类和DAO接口。这个"mybatis的通用java-xml版逆向生成工程"是一个利用MBG来反向工程数据库,自动创建与数据库表对应的Java...
MyBatis逆向工程是一种强大的工具,它可以帮助开发者自动生成数据访问对象(DAO)和JavaBean类,从而简化了数据库模型层的编码工作。在Java Web开发中,MyBatis作为一个优秀的持久层框架,提供了灵活的SQL映射机制,...
"mybatis逆向工程"指的是MBG通过读取数据库表结构反向生成对应的Java实体类、Mapper接口和XML映射文件。"mybatis-generator"和"mybatis自动生成"表明了这个工具是MyBatis框架的一部分,专门用来自动化代码生成。而...
`mybatis-generator-core-1.3.2.jar`是MBG的一个特定版本,该版本支持对数据库表进行反向工程,生成相关的Java类和XML配置,使开发者无需手动编写繁琐的DAO层代码。 在使用MBG时,我们需要创建一个配置文件(通常...
MyBatis 反向工程(Reverse Engineering)是 MyBatis 框架提供的一种便捷工具,用于快速生成基于数据库表的 Java 模型类、Mapper 映射接口和 XML 映射文件。通过反向工程,开发者可以节省大量手动编写这些基础代码的...