SpringBoot+Mybatis逆向工程


什么是逆向工程

分析数据库中数据表,自动生成Pojo(与数据库表对应的实体类)、dao 接口(数据访问层接口,定义了访问数据的方法)、mapper (sql 语句映射文件,与dao层接口类一一对应)

新建SpringBoot项目

注意:这里使用springboot进行新建项目,pom文件见下文。

Step1: 编写pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

 <modelVersion>4.0.0</modelVersion>
 <parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.1.11.RELEASE</version>
  <relativePath/> <!-- lookup parent from repository -->
 </parent>
 <groupId>cn.henu</groupId>
 <artifactId>henu</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <name>cn</name>
 <description>Demo project for Spring Boot</description>
 <properties>
  <java.version>1.8</java.version>
 </properties>
 <dependencies>
  <dependency>
   <groupId>org.mybatis.spring.boot</groupId>
   <artifactId>mybatis-spring-boot-starter</artifactId>
   <version>1.3.2</version>
  </dependency>
  <dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
   <optional>true</optional>
  </dependency>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-test</artifactId>
   <scope>test</scope>
   <exclusions>
    <exclusion>
     <groupId>org.junit.vintage</groupId>
     <artifactId>junit-vintage-engine</artifactId>
    </exclusion>
   </exclusions>
  </dependency>
  <!--mybatis.generator-->
  <dependency>
   <groupId>org.mybatis.generator</groupId>
   <artifactId>mybatis-generator-core</artifactId>
   <version>1.3.2</version>
  </dependency>
  <dependency>
   <groupId>org.junit.jupiter</groupId>
   <artifactId>junit-jupiter</artifactId>
   <version>RELEASE</version>
   <scope>test</scope>
  </dependency>
 </dependencies>
 <build>
  <resources>
   <resource>
    <directory>src/main/resources</directory>
    <includes>
     <!--扫描.xml文件-->
     <include>**/*.xml</include>
     <!--这里是为了防止application.properties文件扫描不到-->
     <include>**/*.properties</include>
    </includes>
   </resource>
  </resources>
  <plugins>
   <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
   </plugin>
   <!--mybatis generator-->
   <plugin>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-maven-plugin</artifactId>
    <version>1.3.2</version>
    <configuration>
     <!--允许移动生成的文件-->
     <verbose>true</verbose>
     <!-- 是否允许覆盖生成的文件,true表示会替换生成的JAVA文件,false则不覆盖 -->
     <overwrite>true</overwrite>
     <!--配置文件的路径-->
     <configurationFile>
      src/main/resources/generatorConfig.xml
     </configurationFile>
    </configuration>
    <dependencies>
     <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.11</version>
     </dependency>
    </dependencies>
   </plugin>
  </plugins>
 </build>
</project>

step2:编写XML配置文件

自动生成代码的xml,这里命名为: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>
    <context id="faceRec" targetRuntime="MyBatis3">
        <!--重写hashcode和equals-->
        <plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"></plugin>
        <!--实现序列化接口-->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>
        <!--重写ToString接口-->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"></plugin>
        <commentGenerator>
            <!-- 是否去除自动生成的注释 true:是 : false:否 ,自动生成的通常是英文的注释-->
            <property name="suppressAllComments" value="true" />
        </commentGenerator>
        <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://127.0.0.1:3306/faceRec?serverTimezone=Hongkong"
                        userId="root"
                        password="******">

        </jdbcConnection>
        <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
            NUMERIC 类型解析为java.math.BigDecimal -->

        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!-- targetProject:生成PO类的位置 -->
        <javaModelGenerator targetPackage="cn.henu.pojo"
                            targetProject="src/main/java">

            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
            <!-- 从数据库返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!-- targetProject:mapper映射文件生成的位置 -->
        <sqlMapGenerator targetPackage="mapper"
                         targetProject="src/main/resources">

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

            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>
        <!-- 指定数据库表 -->
        <!-- <table schema="" tableName="tb_item" domainObjectName="Item"></table>
            domainObjectName 可以配置生成的pojo名字
            如不需要example类添加下面四个属性
            enableCountByExample="false" enableDeleteByExample="false"
            enableSelectByExample="false" enableUpdateByExample="false"></table>-->

        <table schema="" tableName="faceAdmin"></table>
        <table schema="" tableName="faceUser"></table>
        <table schema="" tableName="Movie"></table>
    </context>
</generatorConfiguration>


这里可以修改mapper 的位置,把mapper和dao接口放在一起
<!-- targetProject:mapper映射文件生成的位置 -->
        <sqlMapGenerator targetPackage="cn.henu.dao"
                         targetProject="src/main/java">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>


step3:生成文件

双击下图所示的地方



整体目录结构


所有步骤均文本人亲自测试完成,如有疑问可以留言,或者微信联系我。

全部评论