`
somefuture
  • 浏览: 1089033 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Mybatis反向生成模型带中文注释

 
阅读更多

mybatis可以通过数据库表直接替我们生成模型类和mappper文件。

这里说一下怎么配置,尤其是如何加上中文注释。当前前提是数据表和字段有中文注释。

比如这样的:

下面配置自动生成模型类和mapper类还有mapper的xml文件。

 

网上关于如何使用mybatis-generator生成Java对象的文章很多,这里不详细说了。大家可以到百度上so一下,比如http://www.cnblogs.com/smileberry/p/4145872.htmlhttp://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>

 再次运行插件,可以看到模型类上有了我们在数据库里写好的注释。

 

 

 

  • 大小: 32.5 KB
0
0
分享到:
评论

相关推荐

    mybatis反向生成工具

    MyBatis反向生成工具是开发过程中非常实用的一个辅助组件,尤其在大型项目中,它能够极大地提高开发效率。这个工具允许开发者根据已有的数据库结构自动生成对应的Mapper接口、Mapper XML配置文件以及POJO(Plain Old...

    Mybatis反向生成工具(普通工程和图形化界面两种)

    在使用Mybatis反向生成工具时,需要注意以下几点: 1. 数据库连接信息的准确性:包括数据库类型、URL、用户名和密码,这些信息直接影响到工具能否成功连接到数据库并获取表结构。 2. 表的选择:根据实际需求,选择...

    mybatis反向生成类工具Mybatis-Generator.rar

    首先,Mybatis-Generator的核心功能在于反向工程,即根据数据库中的表信息来生成相应的Java源代码。用户需要在项目的配置文件中指定数据库连接参数(如URL、用户名、密码等),以及需要生成代码的表名和相应的配置...

    mybatis反向生成工具+注释.zip

    本压缩包“mybatis反向生成工具+注释.zip”提供了这样一个便捷的工具,并且带有详细的注释,旨在帮助开发者更好地理解和使用。 首先,我们需要了解MyBatis的反向生成工具(MyBatis Generator,简称MBG)。MBG能够...

    mybatis反向生成工具-oracle,mysql版

    Mybatis反向生成工具是一款强大的数据库操作辅助软件,主要用于简化开发过程中的模型、Mapper接口、Mapper XML文件以及Service层代码的编写。它可以根据数据库表结构自动生成对应的Java实体类、Mapper接口及其XML...

    mysql-mybatis反向生成bean,mapper等

    总结起来,"mysql-mybatis反向生成bean,mapper等"这一过程是Java开发中提升效率的重要手段。通过MySQL的反向工程和MyBatis Generator,我们可以快速地从数据库表结构生成相应的Java代码,降低了开发的复杂度,同时...

    mybatis 反向工程

    MyBatis 反向工程(Reverse Engineering)是 MyBatis 提供的一种自动化工具,它能够根据数据库中的表结构自动生成对应的 Java 模型类、Mapper 映射接口以及 XML 映射文件,大大减少了开发人员的手动编码工作,提高了...

    mybatis_generator反向生成dao,model,mapper。mode带注释

    在“mybatis_generator反向生成dao,model,mapper。model带注释”的场景下,MBG将基于指定的数据库连接信息,读取表结构并生成以下组件: 1. DAO(Data Access Object):这是与数据库交互的接口层,MBG会为每个表...

    mybatis反向生成实体类和配置文件插件及说明文档

    MyBatis Generator(MBG)是一款强大的工具,用于自动生成MyBatis的实体类、映射文件以及DAO接口。这款Eclipse插件极大地简化了开发过程,帮助开发者节省时间,提高代码质量。以下是对该插件及其使用方法的详细解释...

    Mybatis反向工程插件,模版

    Mybatis反向工程支持自定义模版,你可以根据项目需求调整生成的Java实体类、Mapper接口和XML文件的样式。默认模版已经包含了基本的CRUD操作,但你可能需要添加更多的业务逻辑或注解。在generatorConfig.xml中,可以...

    mybatis-gernerator-cn生成中文.zip

    总结一下,这个压缩包提供的资源可以帮助你在使用 MyBatis Generator 时生成带有中文注释的 Java 类,提升团队协作效率。只需正确配置 `generatorConfig.xml` 和在 Maven 项目中引用 `mybatis-generator-core-1.3.2....

    mybatis逆向生成代码

    "mybatis逆向生成代码"是指利用特定工具或方法,从现有的数据库表结构反向生成MyBatis的相关文件,如Mapper文件、接口文件以及POJO(Plain Old Java Object)实体类文件。这种操作可以显著提高开发效率,避免手动...

    eclipse插件mybatis逆向生成插件MyBatis Generator

    MyBatis Generator(MBG)是一款强大的工具,用于在Java开发中自动生成MyBatis映射器、模型类和XML配置文件。它极大地简化了基于MyBatis框架的数据访问层(DAO)代码编写工作,通过数据库表反向工程实现代码自动化...

    mybatis-genertor 反向生成代码

    下面将详细介绍如何在Idea中使用MyBatis Generator进行反向生成代码。 首先,我们需要了解MyBatis Generator的基本配置。MBG的配置文件通常是一个XML文件,其中包含了数据库连接信息、表的选择以及生成代码的模板等...

    mybatis generator 翻转生成

    MyBatis Generator(MBG)是一款强大的工具,用于自动生成MyBatis的SQL映射文件、Java模型类以及DAO接口。在Eclipse这样的集成开发环境中,MBG作为一个插件使用,能够极大地提升开发效率,减少手动编写重复代码的...

    mybatis的通用java-xml版逆向生成工程

    MyBatis Generator(MBG)是一个强大的工具,用于自动生成MyBatis的SQL映射文件、Java模型类和DAO接口。这个"mybatis的通用java-xml版逆向生成工程"是一个利用MBG来反向工程数据库,自动创建与数据库表对应的Java...

    mybatis逆向工程(附源码)

    MyBatis逆向工程是一种强大的工具,它可以帮助开发者自动生成数据访问对象(DAO)和JavaBean类,从而简化了数据库模型层的编码工作。在Java Web开发中,MyBatis作为一个优秀的持久层框架,提供了灵活的SQL映射机制,...

    mybatis-generator.zip

    "mybatis逆向工程"指的是MBG通过读取数据库表结构反向生成对应的Java实体类、Mapper接口和XML映射文件。"mybatis-generator"和"mybatis自动生成"表明了这个工具是MyBatis框架的一部分,专门用来自动化代码生成。而...

    mybatis逆向工程mybatis-generator-core-1.3.2jar包

    `mybatis-generator-core-1.3.2.jar`是MBG的一个特定版本,该版本支持对数据库表进行反向工程,生成相关的Java类和XML配置,使开发者无需手动编写繁琐的DAO层代码。 在使用MBG时,我们需要创建一个配置文件(通常...

    mybaits反向工程

    MyBatis 反向工程(Reverse Engineering)是 MyBatis 框架提供的一种便捷工具,用于快速生成基于数据库表的 Java 模型类、Mapper 映射接口和 XML 映射文件。通过反向工程,开发者可以节省大量手动编写这些基础代码的...

Global site tag (gtag.js) - Google Analytics