[springboot 开发单体web shop] 2. Mybatis Generator 生成common mapper

Mybatis Generator tool


在咱们开启一个新项目的研发后,一般要编写不少的entity/pojo/dto/mapper/dao..., 大多研发兄弟们都会抱怨,为何我要重复写CRUD? 咱们为了不编写一些没必要要的重复代码,这节给你们介绍介绍使用一个开源工具,来帮助咱们从这种简单枯燥的编码中解救出来。 隆重有请: MyBatis通用Mapper4 > 通用Mapper均可以极大的方便开发人员。能够随意的按照本身的须要选择通用方法,还能够很方便的开发本身的通用方法。 极其方便的使用MyBatis单表的增删改查。 支持单表操做,不支持通用的多表联合查询。 通用 Mapper 支持 Mybatis-3.2.4 及以上版本。 Tips: 各位技术同仁必定要有版本意识哦~ Let's code!html

Create mybatis-generator-tool Module

参考上一节中的Module建立mybatis-generator-tool.java


  • 添加依赖
<!--?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">
    <parent>
        <artifactid>expensive-shop</artifactid>
        <groupid>com.life-runner</groupid>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelversion>4.0.0</modelversion>

    <artifactid>mybatis-generator-tool</artifactid>

    <properties>
        <project.build.sourceencoding>UTF-8</project.build.sourceencoding>
    </properties>

    <build>
        <plugins>
            <!--springboot 构建可执行fat jars必须的插件,如不添加,在生产环境会有问题-->
            <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.6</version>
                <configuration>
                    <!-- 设置配置文件路径 -->
                    <configurationfile>
                        ${basedir}/src/main/resources/generator/generatorConfig.xml
                    </configurationfile>
                    <!--容许覆盖-->
                    <overwrite>true</overwrite>
                    <verbose>true</verbose>
                </configuration>
                <dependencies>
                    <!-- mysql8 驱动-->
                    <dependency>
                        <groupid>mysql</groupid>
                        <artifactid>mysql-connector-java</artifactid>
                        <version>8.0.16</version>
                    </dependency>
                    <!--通用 Mapper-->
                    <dependency>
                        <groupid>tk.mybatis</groupid>
                        <artifactid>mapper</artifactid>
                        <version>4.1.5</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>
</project>

  • 编写配置文件 根据咱们在pom文件中指定的路径:${basedir}/src/main/resources/generator/generatorConfig.xml, 咱们须要在项目src=&gt;main=&gt;resource目录下建立generator文件夹,在文件夹下建立文件generatorConfig.xml,内容以下:
<!--?xml version="1.0" encoding="UTF-8"?-->


<generatorconfiguration>
  <!--引入数据库配置内容-->
  <properties resource="generator/config.properties" />

  <context id="MysqlContext" targetruntime="MyBatis3Simple" defaultmodeltype="flat">
    <!--配置是否使用通用 Mapper 自带的注释扩展,默认 true-->
    <!--<property name="useMapperCommentGenerator" value="false"/>-->

    <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
      <!--设置Mapper生成的basic,可自定义-->
      <property name="mappers" value="tk.mybatis.mapper.common.Mapper" />
      <!--大小写转换敏感-->
      <property name="caseSensitive" value="true" />
      <!--引入lombok注解-->
      <property name="lombok" value="Getter,Setter,ToString" />
      <!--分隔符定义-->
      <property name="beginningDelimiter" value="`" />
      <property name="endingDelimiter" value="`" />
    </plugin>

    <!-- 设置数据库配置 -->
    <jdbcconnection driverclass="${jdbc.driverClass}" connectionurl="${jdbc.url}" userid="${jdbc.user}" password="${jdbc.password}">
    </jdbcconnection>

    <!-- 对应生成的pojo所在包 -->
    <javamodelgenerator targetPackage="com.liferunner.pojo" targetProject="src/main/java" />

    <!-- 对应生成的mapper所在目录 -->
    <sqlmapgenerator targetPackage="mapper" targetProject="src/main/resources" />

    <!-- 配置mapper对应的java映射 -->
    <javaclientgenerator targetPackage="com.liferunner.mapper" targetProject="src/main/java" type="XMLMAPPER" />

    <!-- 数据库表 -->
    <table tablename="carousel"></table>
    <table tablename="category"></table>
    <table tablename="items"></table>
    <table tablename="items_comments"></table>
    <table tablename="items_img"></table>
    <table tablename="items_param"></table>
    <table tablename="items_spec"></table>
    <table tablename="order_items"></table>
    <table tablename="order_status"></table>
    <table tablename="orders"></table>
    <table tablename="shop_users"></table>
    <table tablename="user_address"></table>
    <table tablename="users"></table>
  </context>
</generatorconfiguration>

咱们能够看到一行配置内容:<properties resource="generator/config.properties" />,这里是为了将咱们的数据库链接、帐号等信息外置,配置内容以下:mysql

jdbc.driverClass = com.mysql.cj.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/expensiveshop?characterEncoding=UTF-8&amp;useSSL\
  =false&amp;useUnicode=true&amp;serverTimezone=UTC
jdbc.user = root
jdbc.password = 12345678

能够看到这里设置的内容就是下属代码中用到的。git

...
   <jdbcconnection driverclass="${jdbc.driverClass}" connectionurl="${jdbc.url}" userid="${jdbc.user}" password="${jdbc.password}">
    </jdbcconnection>
...

配置信息你们能够参考:传送门github


  • 使用maven测试生成 执行如下命令:
mybatis-generator-tool&gt;mvn mybatis-generator:generate
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------&lt; com.life-runner:mybatis-generator-tool &gt;---------------
[INFO] Building mybatis-generator-tool 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- mybatis-generator-maven-plugin:1.3.6:generate (default-cli) @ mybatis-generator-tool ---
[INFO] Connecting to the Database
[INFO] Introspecting table carousel
[INFO] Introspecting table category
...
[INFO] Generating Record class for table carousel
[INFO] Generating Mapper Interface for table carousel
[INFO] Generating SQL Map for table carousel
...
[INFO] Saving file CarouselMapper.xml
...
[INFO] Saving file Carousel.java
[INFO] Saving file Users.java
...
[WARNING] Table configuration with catalog null, schema null, and table shop_users did not resolve to any tables
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.374 s
[INFO] Finished at: 2019-11-05T15:40:07+08:00
[INFO] ------------------------------------------------------------------------

能够看到执行成功,虽然这里执行成功,可是当咱们打开文件的时候会发现:spring

package com.liferunner.pojo;

import java.util.Date;
import javax.persistence.*;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@ToString
@Table(name = "Carousel")
public class Carousel {
    /**
     * ����id �û�id
     */
    @Id
    private String id;

    /**
     * �û��� �û���
     */
    private String imageUrl;
    ...
}

这里出现了乱码问题,这又是怎么回事呢? 不要紧,let's bing... 传送门,能够看到有265000条结果,那就说明咱们的问题已经有太多的人遇到了,随便点开一个: bug1 能够看到红框里面的内容咱们缺失了,在\expensive-shop\mybatis-generator-tool\src\main\resources\generator\generatorConfig.xml中添加上 <property name="javaFileEncoding" value="UTF-8" />,从新执行生成命令,能够看到咱们的乱码就没有了。sql

@Getter
@Setter
@ToString
@Table(name = "`carousel`")
public class Carousel {
    /**
     * 主键
     */
    @Id
    @Column(name = "`id`")
    private String id;

    /**
     * 图片 图片地址
     */
    @Column(name = "`image_url`")
    private String imageUrl;
    ...

> Tips: > 在这一环节先剧透一个bug,不然我担忧在后续你们遇到的时候,由于它确实是和Common Mapper生成相关的。shell

咱们点开生成的Users.java,能够看到以下所示:数据库

@Getter
@Setter
@ToString
@Table(name = "users")
public class Users {
    @Column(name = "USER")
    private String user;

    @Column(name = "CURRENT_CONNECTIONS")
    private Long currentConnections;

    @Column(name = "TOTAL_CONNECTIONS")
    private Long totalConnections;
}

但是咱们的Users表不是这样的呀,这是怎么回事??? 让咱们分析分析: 1.既然没有用到咱们本身的Users表,可是又确实经过生成器生成了,那么很明显确定是Mysql数据库中表,这是确定的。 2.那么问题就来了,它从哪里冒出来的?找它,盘它。 3.究竟是哪一个数据库中的呢?sys?information_schema?performance_schema? 4.挨个查询,果真: bug2 能够看到,在performance_schema数据库中有一个users表,那么究竟是不是咱们生成出来的呢?执行SHOW CREATE TABLE users, 结果如上图,字段和生成出来的是一致的! 5.抓住它了,怎么盘它??? > 很简单,修改jdbc:mysql://localhost:3306/expensiveshop?nullCatalogMeansCurrent=true&characterEncoding=UTF-8&useSSL
=false&useUnicode=true&serverTimezone=UTC,新增上加粗部分就能够了。apache

nullCatalogMeansCurrent 字面意思很简单,就是说若是是null catalog,我就选择current.由于mysql不支持catalog,咱们须要告知mybatis这个特性,设置为true就好了。 > 按照SQL标准的解释,在SQL环境下Catalog和Schema都属于抽象概念,主要用来解决命名冲突问题。 从概念上说,一个数据库系统包含多个Catalog,每一个Catalog又包含多个Schema,而每一个Schema又包含多个数据库对象(表、视图、序列等),反过来说一个数据库对象必然属于一个Schema,而该Schema又必然属于一个Catalog,这样咱们就能够获得该数据库对象的彻底限定名称从而解决命名冲突的问题了 从实现的角度来看,各类数据库系统对Catalog和Schema的支持和实现方式千差万别,针对具体问题须要参考具体的产品说明书,比较简单而经常使用的实现方式是使用数据库名做为Catalog名,Oracle使用用户名做为Schema名.

bug2-1

可查阅Mysql官网说明:传送门

本节咱们讲解了如何生成咱们想要的,简单和重要又重复的工做咱们能够经过工具实现啦,下一次咱们将开始实际业务的编码实现. gogogo.

奔跑的人生 | 博客园 | segmentfault | spring4all | csdn | 掘金 | OSChina | 简书 | 头条 | 知乎 | 51CTO

相关文章
相关标签/搜索