IDEA+Mybatis+Maven逆向工程

逆向工程

之前接触到逆向工程这个东西,感觉很有方便。只要在mysql中创好一张表,然后在IDEA中配置一下,就可以得到对应表的POJO、Mapper接口和xml文件。
今天把它记录下来方便以后使用

配置

mysql建表我就不说了,先创好一个maven的webapp工程;

依赖

进入pom.xml导入依赖

<dependencies>
    <!-- 依赖 MyBatis 核心包 -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.2.8</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <finalName>atcrowdfunding06_common_reverse</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <!-- 具体插件, 逆向工程的操作是以构建过程中插件形式出现的 -->
        <plugin>
          <groupId>org.mybatis.generator</groupId>
          <artifactId>mybatis-generator-maven-plugin</artifactId>
          <version>1.3.0</version>
          <!-- 插件的依赖 -->
          <dependencies>
            <!-- 逆向工程的核心依赖 -->
            <dependency>
              <groupId>org.mybatis.generator</groupId>
              <artifactId>mybatis-generator-core</artifactId>
              <version>1.3.2</version>
            </dependency>
            <!-- 数据库连接池 -->
            <dependency>
              <groupId>com.mchange</groupId>
              <artifactId>c3p0</artifactId>
              <version>0.9.2</version>
            </dependency>
            <!-- MySQL 驱动 -->
            <dependency>
              <groupId>mysql</groupId>
              <artifactId>mysql-connector-java</artifactId>
              <version>8.0.16</version>
            </dependency>
          </dependencies>
        </plugin>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

xml配置文件

在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>
    <!--逆向生成命令-->
    <!-- mybatis-generator:generate -->
    <context id="myTables" targetRuntime="MyBatis3">
        <commentGenerator>
            <!-- 是否去除自动生成的注释 true:;false:-->
            <property name="suppressAllComments" value="true" />
        </commentGenerator>
        <!--数据库连接的信息: 驱动类、 连接地址、 用户名、 密码 -->
        <jdbcConnection
                driverClass="com.mysql.cj.jdbc.Driver"
                connectionURL="jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC"
                userId="root"
                password="root">
            <!-- 加上这个可以保证不会创建其它数据库的同名表 -->
            <property name="nullCatalogMeansCurrent" value="true" />
        </jdbcConnection>
        <!-- 默认 false, 把 JDBC DECIMAL 和 NUMERIC 类型解析为 Integer, 为 true 时把
        JDBC DECIMAL
        和 NUMERIC 类型解析为 java.math.BigDecimal -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>
        <!-- targetProject:生成 Entity 类的路径 -->
        <javaModelGenerator targetProject=".\src\main\java"
                            targetPackage="com.zx.entity.po">
            <!-- enableSubPackages:是否让 schema 作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
            <!-- 从数据库返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!-- targetProject:XxxMapper.xml 映射文件生成的路径 -->
        <sqlMapGenerator targetProject=".\src\main\java"
                         targetPackage="com.zx.mapper">
            <!-- enableSubPackages:是否让 schema 作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>
        <!-- targetPackage: Mapper 接口生成的位置 -->
        <javaClientGenerator type="XMLMAPPER"
                             targetProject=".\src\main\java"
                             targetPackage="com.zx.mapper">
            <!-- enableSubPackages:是否让 schema 作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>
        <!-- 数据库表名字和我们的 entity 类对应的映射指定 -->
        <table tableName="account" domainObjectName="AccountPO" />
    </context>
</generatorConfiguration>

大家可以根据文中内容自行更改
我是用的是mysql8.0.16,数据库连接那根据自己实际情况进行更改
其中的targetPackage改成自己文件目录就行,意思是将逆向生成的PO和Mapper放在哪个文件夹下面
下图中的tableName属性就填数据库中的需要进行逆向生成的表名,domainObjectName表示我们逆向生成的文件的名字。
在这里插入图片描述

maven逆向生成

点击IDEA右上方哪个框,没错就是我们添加tomcat那个入口
在这里插入图片描述
然后就是跟着图中的顺序进行操作,1、2就不说了,3就是选择逆向工程,4那里输入框中对应代码即可,点击应用。
在这里插入图片描述

生成

同tomcat那样在右上方选取我们刚刚配置的maven点击运行就行,生成情况如下,大家可以参照之前的xml配置进行一一对应。
在这里插入图片描述
后面根据自己的需要对相应的文件内容进行更该就行。

意外

自己在操作的时候,出现了一个意外,逆向生成的时候明明连接的是我的ssm数据库,要生成该库下的account表。但是实际上同时把里一个数据库中的同名account表给一起逆向生成了。
就像这样
在这里插入图片描述
控制台输出,说匹配到多个同名表,当时我就懵了,我不是指定了连接哪个数据库吗,为啥会匹配到其他数据库。。
在这里插入图片描述

解决

其实已经将解决方案附在代码上了,就是xml中的配置这个属性。其实吧,原理我也没去弄清楚,看着网上说是mysql8的问题。。咋这么多问题,连接数据库还要加serverTimezone=UTC。
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值