Spring Boot 集成教程


概述

MyBatis Generator是一个代码生成器,可以为mybatis自动生成对应数据库表结构的实体类、mapper接口以及对应mapper.xml,大大减少这些繁琐重复的劳动,很方便。

MyBatis Generator被设计为可以多次运行,生成代码时,java文件一般会被覆盖,xml文件新旧代码会合并。

MyBatis Generator有三种用法:命令行、eclipse插件、maven插件。我们这里介绍最方便的maven插件用法,其他方法大同小异,如需了解可参考相关资料。

准备工作

准备数据

数据会重用之前教程的数据,如无数据请参照教程创建。

Eclipse项目

不创建新项目,重用前2篇教程的项目,没有项目请按前2篇文章创建。

添加依赖

添加mybatis generator插件,在pom.xml的build > plugins下添加依赖

            <plugin>
              <groupId>org.mybatis.generator</groupId>
              <artifactId>mybatis-generator-maven-plugin</artifactId>
              <version>1.3.7</version>
              <configuration>
                <verbose>true</verbose>
                <overwrite>true</overwrite>
              </configuration>
              <dependencies>
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>8.0.13</version>
                    <scope>runtime</scope>
                </dependency>
              </dependencies>
            </plugin>

pom.xml的完整内容

<?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 http://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.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.qikegu</groupId>
    <artifactId>springboot-mybatis-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-mybatis-demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.10</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <plugin>
              <groupId>org.mybatis.generator</groupId>
              <artifactId>mybatis-generator-maven-plugin</artifactId>
              <version>1.3.7</version>
              <configuration>
                <verbose>true</verbose>
                <overwrite>true</overwrite>
              </configuration>
              <dependencies>
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>8.0.13</version>
                    <scope>runtime</scope>
                </dependency>
              </dependencies>
            </plugin>

        </plugins>
    </build>

</project>

添加配置

新增generatorConfig.xml文件,此文件是MyBatis Generator的配置文件

文件内容如下:

<?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>
    <!--导入配置文件-->
    <properties resource="application.properties"></properties>

    <!-- 一个数据库一个context -->
    <context id="default">

        <!-- 注释生成设置 -->
        <commentGenerator>
            <!-- 是否生成注释代时间戳-->
            <property name="suppressDate" value="true" />
            <!-- 是否取消注释 -->
            <property name="suppressAllComments" value="true" />
        </commentGenerator>

        <!--jdbc的数据库连接-->
        <jdbcConnection driverClass="${spring.datasource.driver-class-name}"
                        connectionURL="${spring.datasource.url}"
                        userId="${spring.datasource.username}"
                        password="${spring.datasource.password}">
            <property name="nullCatalogMeansCurrent" value="true" />
        </jdbcConnection>

        <!-- 类型转换 -->
        <javaTypeResolver>
            <!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!-- targetPackage:生成的实体类所在的包 -->
        <!-- targetProject:生成的实体类所在的硬盘位置 -->
        <javaModelGenerator targetPackage="com.qikegu.demo.model" targetProject="src/main/java">
            <!-- 是否允许子包 -->
            <property name="enableSubPackages" value="false" />
            <!-- 是否对modal添加构造函数 -->
            <property name="constructorBased" value="true" />
            <!-- 是否清理从数据库中查询出的字符串左右两边的空白字符 -->
            <property name="trimStrings" value="true" />
            <!-- 建立modal对象是否不可改变 即生成的modal对象不会有setter方法,只有构造方法 -->
            <property name="immutable" value="false" />
        </javaModelGenerator>

        <!-- targetPackage 和 targetProject:生成的  mapper xml 文件的包和位置 -->
        <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
            <!-- 是否在当前路径下新加一层schema,ex:false路径com.qikegu.demo.model, com.qikegu.demo.model.[schemaName] -->
            <property name="enableSubPackages" value="false" />
            <!-- 是否针对string类型的字段在set的时候进行trim调用 -->
            <property name="trimStrings" value="true"/>
        </sqlMapGenerator>

        <!-- targetPackage 和  targetProject:生成的  java interface 文件的包和位置 -->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.qikegu.demo.repository"
                             targetProject="src/main/java">
            <!-- 是否在当前路径下新加一层schema,ex:false路径com.qikegu.demo.model, com.qikegu.demo.model.[schemaName] -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>

        <!-- 配置表信息 -->
        <!-- schema即为数据库名 tableName为对应的数据库表 domainObjectName是要生成的实体类 enable*ByExample, 是否生成 example类   -->
        <!-- 不同的表,修改tableName和domainObjectName就可以 -->
        <table tableName="user" domainObjectName="User"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
        </table>
    </context>
</generatorConfiguration>

解释:

请参考代码中的注释。

自动生成

删除旧文件

删除下图中的文件,这些文件将由mybatis generator自动生成

运行mybatis generator

Eclipse左侧,在项目根目录上点击鼠标右键弹出菜单,选择:run as -> 4.Maven build...,弹出对话框如下图,注意红圈中的修改,点击run运行:

如果没有意外,build完成后,文件已经生成。

修改代码

如果运行一下程序,会报错,原因是userMapper.java中selectUser()接口不存在了。

==注释掉相关代码:==

UserService.java

//    public List<User> listUser(int page, int pageSize);

UserserviceImpl.java

//  @Override
//  public List<User> listUser(int page, int pageSize) {
//        List<User> result = null;
//        try {
//            PageHelper.startPage(page, pageSize); //每页的大小为pageSize,查询第page页的结果
//            PageHelper.orderBy("id ASC "); //进行分页结果的排序
//          result = userMapper.selectUser();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//
//      return result;
//  }

UserController.java

//    @RequestMapping(value="", method = RequestMethod.GET, produces="application/json")
//    public PageInfo<User> listUser(
//          @RequestParam(value="page", required=false, defaultValue="1") int page,
//          @RequestParam(value="page-size", required=false, defaultValue="5") int pageSize){
//
//
//        List<User> result = userService.listUser(page, pageSize);
//        // PageInfo包装结果,返回更多分页相关信息
//        PageInfo<User> pi = new PageInfo<User>(result);
//
//        return pi;
//    }

运行

Eclipse左侧,在项目根目录上点击鼠标右键弹出菜单,选择:run as -> spring boot app运行程序。 打开Postman访问接口,运行结果如下:

总结

本文介绍了mybatis generator的使用方法,要点总结如下:

  1. 添加mybatis generator的maven插件依赖
  2. 添加mybatis generator的配置文件:generatorConfig.xml
  3. 运行maven build: mybatis-generator:generate,生成代码

实际开发中,mybatis generator很有用,用起来可以减少很多工作量。

完整代码

01-14 20:07