mybatis-generator自动生成

1.在maven工程中的resource中创建generatorConfig.xml 

mybatis-generator自动生成

配置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="E:\java2\generator\mysql-connector-java-5.1.39-bin.jar"/>
    <context id="DB2Tables"  targetRuntime="MyBatis3">

        <!-- 生成的Java文件的编码 -->
        <property name="javaFileEncoding" value="UTF-8"/>
        <!-- 格式化java代码 -->
        <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
        <!-- 格式化XML代码 -->
        <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>

        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <!-- 是否去除自动生成的注释 true:是 : false:-->
            <!--<commentGenerator>里面有个suppressAllComments的属性,如果填写为true的话,
            所有生成的模型文件虽然会没有注释,但是Mapper.xml不会覆盖,而是追加在后面,会导致运行出错。
            建议设置为false-->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

        <!--数据库链接URL,用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/demo"
                        userId="root"
                        password="root" />

        <!-- java类型处理器
       用于处理DB中的类型到Java中的类型,默认使用JavaTypeResolverDefaultImpl       注意一点,默认会先尝试使用IntegerLongShort等来对应DECIMAL NUMERIC数据类型;-->
        <javaTypeResolver>
            <!-- 是否使用bigDecimal false可自动转化以下类型(Long, Integer, Short, etc.-->
            <!--
            true:使用BigDecimal对应DECIMAL NUMERIC数据类型
            false:默认,
                scale>0;length>18:使用BigDecimal;
                scale=0;length[10,18]:使用Long
                scale=0;length[5,9]:使用Integer
                scale=0;length<5:使用Short-->
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <!-- java模型创建器,是必须要的元素
        负责:1key类(见contextdefaultModelType);2java类;3,查询类
        targetPackage:生成的类要放的包,真实的包受enableSubPackages属性控制;
        targetProject:目标项目,指定一个存在的目录下,生成的内容会放到指定目录中,如果目录不存在,MBG不会自动建目录-->
        <!-- 生成模型的包名和位置-->
        <javaModelGenerator targetPackage="com.nit.sbmf.domain" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!-- 生成映射文件的包名和位置-->
        <sqlMapGenerator targetPackage="mapping" targetProject="src/main/resources">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!-- 生成DAO的包名和位置-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.nit.sbmf.mapper" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
        <table tableName="tb" domainObjectName="tb" enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"
        />
    </context>
</generatorConfiguration>

在pom.xml 中也要做相应的设置

<build>
   <plugins>
      <!-- mybatis generator 自动生成代码插件 -->
      <plugin>
         <groupId>org.mybatis.generator</groupId>
         <artifactId>mybatis-generator-maven-plugin</artifactId>
         <version>1.3.5</version>
         <configuration>
            <configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile>
            <overwrite>true</overwrite>
            <verbose>true</verbose>
         </configuration>
      </plugin>
   </plugins>
</build>

以运行的方式来自动生成代码

mybatis-generator自动生成

mybatis-generator自动生成

mybatis-generator自动生成

配置文件设置好,选项到generator 点运行 ,代码会自动生成。

mybatis-generator自动生成

以上是配置文件相应的设置,下面是用mybatis 可能会遇到的坑。

1.在配置文件 generatorConfig.xml 中有一条设置

<commentGenerator>
    <property name="suppressDate" value="true"/>
    <!-- 是否去除自动生成的注释 true:是 : false:-->
    <!--<commentGenerator>里面有个suppressAllComments的属性,如果填写为true的话,
    所有生成的模型文件虽然会没有注释,但是Mapper.xml不会覆盖,而是追加在后面,会导致运行出错。
    建议设置为false-->
    <property name="suppressAllComments" value="true"/>
</commentGenerator>

suppressAllComments 这个选项 如果是为true的话,你不小心生成了2次相同的实体,你会发现你的实体类,和dao层的mapper类 没变,但是你的mapper.xml 里面代码的行数增加了 ,这个是因为自动生成代码这个工具 是根据他自动生成时给你添加的注释来判断 该代码是否是自动生成的

<!--
  WARNING - @mbg.generated
  This element is automatically generated by MyBatis Generator, do not modify.
-->

类似这个 @mbg.generated

所以生成代码的时候要小心,这个应该算是个bug。 

2.自动生成的代码insert 返回的并不是主键 而是影响条数

<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
  SELECT LAST_INSERT_ID()
</selectKey>

可以在insert into 前面添加一条这样的语句 

mybatis-generator自动生成