Mybatis-geneator自动代码生成工具的配置和使用,基础使用和了解这一篇就够了(顺带总结了些使用遇到的坑)

(1)Mybatis-geneator自动代码生成工具

mybatis三剑客之一的mybatis-geneator是一款mybatis自动代码生成工具,可以通过配置连接数据库后,快速生成数据表的pojo字段实体、mapper和xml文件(这两个文件有基础常见的sql增删改查操作)。如下图:

 

(2)在Maven项目中配置

找到项目根目录的pom.xml(Mavan依赖关系、架包管理等配置文件),在这个文件中间添加配置。配置方法如下,在最后处的pluginManagement标签的下面创建plugins标签,然后将mybatis-generator插件配置代码放在plugins标签中,代码如下:

  <plugins>
    <plugin>
      <groupId>org.mybatis.generator</groupId>
      <artifactId>mybatis-generator-maven-plugin</artifactId>
      <version>1.3.2</version>
      <configuration>
        <verbose>true</verbose>
        <overwrite>true</overwrite>
      </configuration>
    </plugin>
  </plugins>

Tips:这里有个坑,其实pluginManagement本身就是插件管理块,里面也有plugins标签,讲道理,我们的mybatis-generator其实应该也要放在这里面的,笔者一开始就是这样放的,但是放了,发现后面配置好之后,在Maven Projects侧根本就找不到mybatis-generator插件工具来生成代码,后面找了一圈解决方法,就是上述的配置,移出pluginManagement,新建plugins标签。

(3)generator的一些基本配置Config(指定连接数据库的配置,生成数据表对应的pojo/mapper/xml等文件配置)

在main的resources目录下创建generatorConfig.xml和datasource.properties配置文件,前者是generator的基本配置,后者是连接数据库如数据库用户名和密码等数据库基本配置。

db.driverLocation=C:/Users/mysql/mysql-connector-java/5.1.6/mysql-connector-java-5.1.6.jar
db.driverClassName=com.mysql.jdbc.Driver
db.url=jdbc:mysql://192.168.199.193:3306/mall?characterEncoding=utf-8
db.username=root
db.password=123456

Tips: 配置的第一和二行是驱动架包;第三行的192.168.199.193需要替换成所在主机的IP,mall替换成数据库名称;第四行和第五行分别配置为数据库连接的用户名和密码

generatorConfig.xml配置:(这里面引用了datasource.properties是的配置)

<?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>
    <!-- 1 导入属性配置-->
    <properties resource="datasource.properties"></properties>

    <!--指定特定数据库的jdbc驱动jar包的位置-->
    <classPathEntry location="${db.driverLocation}"/>

    <context id="default" targetRuntime="MyBatis3">

        <!-- optional,旨在创建class时,对注释进行控制 -->
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

        <!--jdbc的数据库连接 -->
        <jdbcConnection
                driverClass="${db.driverClassName}"
                connectionURL="${db.url}"
                userId="${db.username}"
                password="${db.password}">
        </jdbcConnection>


        <!-- 非必需,类型处理器,在数据库类型和java类型之间的转换控制-->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>


        <!-- 2 Model模型生成器,用来生成含有主键key的类,记录类 以及查询Example类
            targetPackage     指定生成的model生成所在的包名
            targetProject     指定在该项目下所在的路径
        -->
        <!--<javaModelGenerator targetPackage="com.mmall.pojo" targetProject=".\src\main\java">-->
        <javaModelGenerator targetPackage="com.mmall.pojo" targetProject="./src/main/java">
            <!-- 是否允许子包,即targetPackage.schemaName.tableName -->
            <property name="enableSubPackages" value="false"/>
            <!-- 是否对model添加 构造函数 -->
            <property name="constructorBased" value="true"/>
            <!-- 是否对类CHAR类型的列的数据进行trim操作 -->
            <property name="trimStrings" value="true"/>
            <!-- 建立的Model对象是否 不可改变  即生成的Model对象不会有 setter方法,只有构造方法 -->
            <property name="immutable" value="false"/>
        </javaModelGenerator>

        <!--mapper映射文件生成所在的目录 为每一个数据库的表生成对应的SqlMap文件 -->
        <!--<sqlMapGenerator targetPackage="mappers" targetProject=".\src\main\resources">-->
        <sqlMapGenerator targetPackage="mappers" targetProject="./src/main/resources">
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>

        <!-- 客户端代码,生成易于使用的针对Model对象和XML配置文件 的代码
                type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象
                type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象
                type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口
        -->

        <!-- targetPackage:mapper接口dao生成的位置 -->
        <!--<javaClientGenerator type="XMLMAPPER" targetPackage="com.mmall.dao" targetProject=".\src\main\java">-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.mmall.dao" targetProject="./src/main/java">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>

        <!-- 3 数据表的配置,用于生成pojo、mapper和xml - tableName是数据库表名 domainObjectName-是要生成本地代码的名字  -->
        <table tableName="mmall_shipping" domainObjectName="Shipping" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
        <table tableName="mmall_cart" domainObjectName="Cart" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
        <table tableName="mmall_cart_item" domainObjectName="CartItem" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
        <table tableName="mmall_category" domainObjectName="Category" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
        <table tableName="mmall_order" domainObjectName="Order" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
        <table tableName="mmall_order_item" domainObjectName="OrderItem" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
        <table tableName="mmall_pay_info" domainObjectName="PayInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
        <table tableName="mmall_product" domainObjectName="Product" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
            <columnOverride column="detail" jdbcType="VARCHAR" />
            <columnOverride column="sub_images" jdbcType="VARCHAR" />
        </table>
        <table tableName="mmall_user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>


        <!-- geelynote mybatis插件的搭建 -->
    </context>
</generatorConfiguration>

TIPS:这里面主要就是配置数据库连接、自动生成代码(pojo、mapper、xml)存放位置和配置对应要生产的数据表,具体可以看代码,代码有详细的注释。

基本结构如下:

 

 

(3)自动生成代码

上述配置好之后,点击右侧的Maven Projects-Plugins-mybatis generator- mybatis generator,双击,自动生成pojo、mapper和xml文件,生成的结构如上图所示。

 

如果,你双击,控制台不报错,那就恭喜了,渡劫成功,如果时候可能会出现一些小问题,看控制台的一些错误提示,修正就好。

(4)基本使用说明

以购物车order_cart表为例:

mybatis-generator自动生成好的原生的mapper和xml后,我们只要在具体实现的代码处通过自动注解,注入mapper就可以实现调用对应方法的串联。

(5)一些坑:

  1. 前面说的,Maven Projects侧根本没有mybatis generator,这个就是插件写的位置导致的,按上面的写法,在pluginManagement标签的下面创建plugins标签,然后将mybatis-generator插件配置移动到plugins标签中就行,具体参照上述。
  2. datasource.properties文件中的db.driverLocation值中的路径斜杠是“/”,不是直接复制过来的“\”
  3. 项目运行中,还遇到一个巨坑。我在项目中新增一张表,需要生成这个表的代码,然后重新执行了一边generator,遗憾的巨坑来了,重新生成后他会把mapper中之前我们自己写的自定义方法直接还原覆盖了,项目直接报错,这个坑的一定要注意,要是代码可以源代码管理去,直接覆盖会你倒退几百年。

--在后续的版本迭代中,数据库表难免会有所调整和扩展。此时如果再用mybatis-generator插件重新自动生成,会把该表原有的mapper文件覆盖,xml文件追加。

解决思路参考:

把我们手写的sql放到一个扩展的mapper和xml中,继承原生的mapper和xml,这样就可以每次重新生成时就只覆盖原生的表而不影响到我们自写的代码。

具体参考:

Mybatis_generator自动生成代码覆盖了手写部分xml的解决办法

 

参考:

Maven之pom.xml配置文件详解

mybatis-generator 的坑我都走了一遍

用mybatis的generator自动生成代码--坑我都走了一遍,后面的同学别踩了

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值