准备系列-Mybatis(二) TKmybatis-springboot 使用 maven Generator 插件自动配置

232 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 2 天,点击查看活动详情

Tkmybatis 是基于 Mybatis 框架开发的一个工具,通过调用它提供的方法实现对单表的数据操作,不需要写任何 sql 语句,这极大地提高了项目开发效率。

1.Web页面 新建 Springboot 项目

直接在 start.spring.io/ 中新建一个Springboot项目

Spring 版本 2.7.8

Mybatis 版本 3.5.11

MySql版本 8.0.26

image.png

2. 配置项目及启动

2.1 目录结构

我们先看一下目录结构,如下

目录作用
resources/sqlmapper目录存放 mybaits 的 xml文件
config 目录存放 生成的BaseMapper文件
domain.po 目录存放 bean文件 数据PO文件
repository.mapper目录存放 Mapper文件
generator 目录存放 generatorConfig.xml配置文件

image.png

2.2 创建一个带Json数据的表结构

创建用户表 ,字段信息如下

CREATE TABLE `user_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `user_id` char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户ID',
  `user_name` char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户ID',
  `age` int(11) NOT NULL COMMENT '年龄',
  `address`  varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '地址',
  `order_ids` JSON COMMENT '用户id的json数组',
  `goods` JSON COMMENT '用户商品信息 商品对象',
  `sort_order` int(11) DEFAULT '0' COMMENT '排序字段',
  `is_del` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否删除',
  `addtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
  `modtime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表'

2.3 项目 pom文件修改如下

添加 mybatis依赖, tkmybatis依赖等

<?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.7.8</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>
   <groupId>com.jzj</groupId>
   <artifactId>tdmybatis</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>tdmybatis</name>
   <description>test demo mybatis for Spring Boot</description>
   <properties>
      <java.version>1.8</java.version>
      <mybatis-spring-boot-starter.version>1.3.2</mybatis-spring-boot-starter.version>
      <tkmybatis.version>2.1.5</tkmybatis.version>
      <druid.version>1.2.6</druid.version>
   </properties>
   <dependencies>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
      </dependency>

      <!-- Spring Boot Mybatis 依赖 -->
      <dependency>
         <groupId>org.mybatis.spring.boot</groupId>
         <artifactId>mybatis-spring-boot-starter</artifactId>
         <version>${mybatis-spring-boot-starter.version}</version>
      </dependency>
      <!--tk mybatis-->
      <dependency>
         <groupId>tk.mybatis</groupId>
         <artifactId>mapper-spring-boot-starter</artifactId>
         <version>${tkmybatis.version}</version>
      </dependency>

      <dependency>
         <groupId>com.alibaba</groupId>
         <artifactId>druid-spring-boot-starter</artifactId>
         <version>${druid.version}</version>
      </dependency>

      <dependency>
         <groupId>com.mysql</groupId>
         <artifactId>mysql-connector-j</artifactId>
         <scope>runtime</scope>
      </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>
      </dependency>
   </dependencies>

   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
               <excludes>
                  <exclude>
                     <groupId>org.projectlombok</groupId>
                     <artifactId>lombok</artifactId>
                  </exclude>
               </excludes>
            </configuration>
         </plugin>
         <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.3.7</version>
            <configuration>
               <configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
               <overwrite>true</overwrite>
               <verbose>true</verbose>
            </configuration>
            <dependencies>
               <dependency>
                  <groupId>mysql</groupId>
                  <artifactId>mysql-connector-java</artifactId>
                  <version>5.1.46</version>
               </dependency>
               <dependency>
                  <groupId>tk.mybatis</groupId>
                  <artifactId>mapper-generator</artifactId>
                  <version>1.0.5</version>
               </dependency>
            </dependencies>
         </plugin>
      </plugins>
   </build>

</project>
2.4 配置文件配置DB连接数据

新建 generator/db.properties 配置 数据库连接信息,用于mybatis生成 xml文件

server.port=8800

## mybatis-generator自动生成代码#########################################################################################
mybatis.url=jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&tinyInt1isBit=false
mybatis.name=root
mybatis.password=
datasource.driverClassName=com.mysql.jdbc.Driver
targetModelPackage=com.jzj.tdmybatis.domain.po
targetMapperPackage=sqlmapper
targetClientPackage=com.jzj.tdmybatis.repository.mapper
targetJavaProject=src/main/java
targetResources=src/main/resources
2.5 在项目中配置 BaseMapper

项目 config中配置 BaseMapper

package com.jzj.tdmybatis.config;

import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;

/**
 * tkmybatis 通用 mapper
 */
public interface BaseMapper<T> extends Mapper<T>, MySqlMapper<T> {
}
2.6 配置generatorConfig.xml 配置文件

generatorConfig.xml 配置如下

表结构信息 "user_info"

PO信息 "UserInfoPO"

mapper信息 "UserInfoMapper"

<?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="generator/db.properties"/>


    <context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <!-- TKmybatis配置 -->
        <property name="javaFileEncoding" value="UTF-8"/>
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>
        <!--  <plugin type="${mapper.plugin}">
              <property name="mappers" value="${mapper.Mapper}"/>
          </plugin>-->

        <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
            <property name="mappers" value="com.jzj.tdmybatis.config.BaseMapper"/>
        </plugin>

        <commentGenerator>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="false"/>
            <property name="suppressDate" value="true"/>

        </commentGenerator>
        <!-- 数据库链接URL、用户名、密码 -->
        <jdbcConnection driverClass="${datasource.driverClassName}"
                        connectionURL="${mybatis.url}" userId="${mybatis.name}"
                        password="${mybatis.password}"/>

        <!-- 生成模型的包名和位置 -->
        <javaModelGenerator targetPackage="${targetModelPackage}" targetProject="${targetJavaProject}"/>
        <!-- 生成的映射文件包名和位置 -->
        <sqlMapGenerator targetPackage="${targetMapperPackage}" targetProject="${targetResources}"/>
        <!-- 生成service的包名和位置 -->
        <javaClientGenerator targetPackage="${targetClientPackage}" targetProject="${targetJavaProject}"
                             type="XMLMAPPER"/>

        <table tableName="user_info" domainObjectName="UserInfoPO"
               mapperName="UserInfoMapper">
            <generatedKey column="id" sqlStatement="Mysql" identity="true"/>
        </table>
    </context>
</generatorConfiguration>
2.7 maven插件运行 generator

maven插件找打 plugins 找到 generator, 双击运行

image.png

2.8 generator结果
[INFO] Introspecting table user_info
[INFO] Generating Record class for table user_info
[INFO] Generating Mapper Interface for table user_info
[INFO] Generating SQL Map for table user_info
[INFO] Saving file UserInfoMapper.xml
[INFO] Saving file UserInfoPO.java
[INFO] Saving file UserInfoMapper.java
[WARNING] Existing file /Users/xxx/IdeaProjects/demo/tdmybatis/src/main/java/com/jzj/tdmybatis/domain/po/UserInfoPO.java was overwritten
[WARNING] Existing file /Users/xxx/IdeaProjects/demo/tdmybatis/src/main/java/com/jzj/tdmybatis/repository/mapper/UserInfoMapper.java was overwritten
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS

运行成功, 可以看到 UserInfoPO, UserInfoMapper, UserInfoMapper.xml 成功生成

3.报错解决办法

mybatis-generator:generate报错

No valid Maven installation found. Either set the home directory in the configuration dialog or set the M2_HOME environment variable on your system. 其实就是maven 项目的路径没有安装, 我们可以配置下 maven即可

image.png