从零开始搭建springboot项目(四)、自动生成代码(model、mapper、service、serviceimpl、controller)

本次创建项目分成下面几个步骤介绍
(1)创建springboot项目;
(2)整合mybatis,搭建数据访问层框架
(3)整合shiro搭建权限验证框架;
(4)自动生成代码;
(5)整合logger搭建日志框架
上一篇我们介绍了如何整合shiro,搭建权限验证框架,这一篇我们介绍如何根据数据库表结构自动创建数据访问层、业务层和控制层代码。

准备工作:我们先建一张表作为用例
DROP TABLE IF EXISTS `sys_log`;
CREATE TABLE `sys_log` (
  `id` int(11) NOT NULL,
  `invoke_method` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '调用的方法',
  `invoke_return_resp` text COLLATE utf8_unicode_ci COMMENT '返回的数据',
  `invoke_sql` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '执行的sql',
  `sql_start_time` datetime DEFAULT NULL COMMENT 'sql执行起始时间',
  `sql_end_time` datetime DEFAULT NULL COMMENT 'sql执行结束时间',
  `sql_time` datetime DEFAULT NULL COMMENT 'sql执行时间',
  `invoke_param` text COLLATE utf8_unicode_ci COMMENT '方法传入的参数',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

SET FOREIGN_KEY_CHECKS = 1;
第一步:pom文件引入相关jar包,配置maven插件;
<!-- 我们需要在pom.xml里面配置一些属性,这些属性我们将在generatorConfig.xml里面用到-->
<properties>
		<java.version>1.8</java.version>
        <!-- 模块包名 -->
        <modulePackage>com.itwopqq.booting.system</modulePackage>
        <!-- 生成代码目录 -->
        <targetProject>src/main/java</targetProject>
        <targetMapperProject>src/main/resources</targetMapperProject>
        <targetMapperPackage>mybatis.system.mapping</targetMapperPackage>
        <targetServicePackage>com.itwopqq.booting.system.service</targetServicePackage>
        <targetServiceImplPackage>com.itwopqq.booting.system.serviceimpl</targetServiceImplPackage>
        <targetControllerPackage>com.itwopqq.booting.system.controller</targetControllerPackage>
        <hsqldb.version>2.2.8</hsqldb.version>
        <cobertura.version>1.9.4.1</cobertura.version>
        <freemarker.version>2.3.23</freemarker.version>
        <hsqldb.version>2.2.8</hsqldb.version>
	</properties>

<!-- mybatis代码生成器 -->
   <dependency>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-core</artifactId>
        <version>1.3.7</version>
    </dependency>
	<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>
                    <!--配置文件的路径-->
                    <configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile>
                    <overwrite>true</overwrite>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.41</version>
                        <type>jar</type>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>
第二步:建立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>

    <!-- 数据库驱动:可选择我们本地硬盘上面的数据库驱动包,在这里我们已经在pom文件中build里面配置了 -->
    <!--    <classPathEntry location="D:\workProjects\springBootMybatis\src\main\resources\lib\mysql-connector-java-5.1.9.jar"/>-->
    <context id="MysqlTables" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <!-- 注释生成器 -->
        <commentGenerator>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="false" />
        </commentGenerator>

        <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://127.0.0.1:3306/booting?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=true"
                        userId="root" password="123456">
        </jdbcConnection>

        <!-- 类型转换器或者加类型解析器 -->
        <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer, true,把JDBC DECIMAL 和
            NUMERIC 类型解析为java.math.BigDecimal -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!-- java模型生成器 -->
        <!-- targetProject:自动生成代码的位置 -->
        <javaModelGenerator targetPackage="${modulePackage}.model"
                            targetProject="src/main/java">
            <!-- TODO enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="true" />
            <!-- 从数据库返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <!-- map xml 生成器 -->
        <!-- targetPackage 是 指targetProject下的包-->
        <sqlMapGenerator targetPackage="${targetMapperPackage}"
                         targetProject="src/main/resources">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>

        <!-- mapper 或者就是dao接口生成器 -->
        <javaClientGenerator targetPackage="${modulePackage}.mapper"
                             targetProject="src/main/java"
                             type="XMLMAPPER">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>

        <!-- pojo 实体生成器 -->
        <!-- tableName:用于自动生成代码的数据库表;domainObjectName:对应于数据库表的javaBean类名 -->
        <!-- schema为数据库名 可不写 -->
        <table  tableName="sys_log" domainObjectName="SysLog"
                enableInsert="true" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"
                enableSelectByExample="false" selectByExampleQueryId="false">
            <!-- 忽略字段 可选的(0 or 1) -->
            <!-- <ignoreColumn column="is_use" /> -->
            <!--//无论字段是什么类型,生成的类属性都是varchar。 可选的(0 or 1) 测试无效 -->
            <!-- <columnOverride column="city_code" jdbcType="VARCHAR" /> -->
        </table>
    </context>
</generatorConfiguration>
第三步:在generatorConfig.xml里面填写我们需要生成的数据库名和需要生成的类名,并打开maven的plugins操作栏,执行代码生成命令;

在这里插入图片描述
在这里插入图片描述
我们可以看到,我们双击generator命令之后,插件自动为我们生成了代码

SysLog.java
package com.itwopqq.booting.system.model;

import java.util.Date;

public class SysLog {
    /**
     *
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column sys_log.id
     *
     * @mbg.generated Sun Apr 19 15:41:26 CST 2020
     */
    private Integer id;

    /**
     *
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column sys_log.invoke_method
     *
     * @mbg.generated Sun Apr 19 15:41:26 CST 2020
     */
    private String invokeMethod;

    /**
     *
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column sys_log.invoke_sql
     *
     * @mbg.generated Sun Apr 19 15:41:26 CST 2020
     */
    private String invokeSql;

    /**
     *
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column sys_log.sql_start_time
     *
     * @mbg.generated Sun Apr 19 15:41:26 CST 2020
     */
    private Date sqlStartTime;

    /**
     *
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column sys_log.sql_end_time
     *
     * @mbg.generated Sun Apr 19 15:41:26 CST 2020
     */
    private Date sqlEndTime;

    /**
     *
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column sys_log.sql_time
     *
     * @mbg.generated Sun Apr 19 15:41:26 CST 2020
     */
    private Date sqlTime;

    /**
     *
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column sys_log.invoke_return_resp
     *
     * @mbg.generated Sun Apr 19 15:41:26 CST 2020
     */
    private String invokeReturnResp;

    /**
     *
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column sys_log.invoke_param
     *
     * @mbg.generated Sun Apr 19 15:41:26 CST 2020
     */
    private String invokeParam;

    /**
     * This method was generated by MyBatis Generator.
     * This method returns the value of the database column sys_log.id
     *
     * @return the value of sys_log.id
     *
     * @mbg.generated Sun Apr 19 15:41:26 CST 2020
     */
    public Integer getId() {
        return id;
    }

    /**
     * This method was generated by MyBatis Generator.
     * This method sets the value of the database column sys_log.id
     *
     * @param id the value for sys_log.id
     *
     * @mbg.generated Sun Apr 19 15:41:26 CST 2020
     */
    public void setId(Integer id) {
        this.id = id;
    }

    /**
     * This method was generated by MyBatis Generator.
     * This method returns the value of the database column sys_log.invoke_method
     *
     * @return the value of sys_log.invoke_method
     *
     * @mbg.generated Sun Apr 19 15:41:26 CST 2020
     */
    public String getInvokeMethod() {
        return invokeMethod;
    }

    /**
     * This method was generated by MyBatis Generator.
     * This method sets the value of the database column sys_log.invoke_method
     *
     * @param invokeMethod the value for sys_log.invoke_method
     *
     * @mbg.generated Sun Apr 19 15:41:26 CST 2020
     */
    public void setInvokeMethod(String invokeMethod) {
        this.invokeMethod = invokeMethod == null ? null : invokeMethod.trim();
    }

    /**
     * This method was generated by MyBatis Generator.
     * This method returns the value of the database column sys_log.invoke_sql
     *
     * @return the value of sys_log.invoke_sql
     *
     * @mbg.generated Sun Apr 19 15:41:26 CST 2020
     */
    public String getInvokeSql() {
        return invokeSql;
    }

    /**
     * This method was generated by MyBatis Generator.
     * This method sets the value of the database column sys_log.invoke_sql
     *
     * @param invokeSql the value for sys_log.invoke_sql
     *
     * @mbg.generated Sun Apr 19 15:41:26 CST 2020
     */
    public void setInvokeSql(String invokeSql) {
        this.invokeSql = invokeSql == null ? null : invokeSql.trim();
    }

    /**
     * This method was generated by MyBatis Generator.
     * This method returns the value of the database column sys_log.sql_start_time
     *
     * @return the value of sys_log.sql_start_time
     *
     * @mbg.generated Sun Apr 19 15:41:26 CST 2020
     */
    public Date getSqlStartTime() {
        return sqlStartTime;
    }

    /**
     * This method was generated by MyBatis Generator.
     * This method sets the value of the database column sys_log.sql_start_time
     *
     * @param sqlStartTime the value for sys_log.sql_start_time
     *
     * @mbg.generated Sun Apr 19 15:41:26 CST 2020
     */
    public void setSqlStartTime(Date sqlStartTime) {
        this.sqlStartTime = sqlStartTime;
    }

    /**
     * This method was generated by MyBatis Generator.
     * This method returns the value of the database column sys_log.sql_end_time
     *
     * @return the value of sys_log.sql_end_time
     *
     * @mbg.generated Sun Apr 19 15:41:26 CST 2020
     */
    public Date getSqlEndTime() {
        return sqlEndTime;
    }

    /**
     * This method was generated by MyBatis Generator.
     * This method sets the value of the database column sys_log.sql_end_time
     *
     * @param sqlEndTime the value for sys_log.sql_end_time
     *
     * @mbg.generated Sun Apr 19 15:41:26 CST 2020
     */
    public void setSqlEndTime(Date sqlEndTime) {
        this.sqlEndTime = sqlEndTime;
    }

    /**
     * This method was generated by MyBatis Generator.
     * This method returns the value of the database column sys_log.sql_time
     *
     * @return the value of sys_log.sql_time
     *
     * @mbg.generated Sun Apr 19 15:41:26 CST 2020
     */
    public Date getSqlTime() {
        return sqlTime;
    }

    /**
     * This method was generated by MyBatis Generator.
     * This method sets the value of the database column sys_log.sql_time
     *
     * @param sqlTime the value for sys_log.sql_time
     *
     * @mbg.generated Sun Apr 19 15:41:26 CST 2020
     */
    public void setSqlTime(Date sqlTime) {
        this.sqlTime = sqlTime;
    }

    /**
     * This method was generated by MyBatis Generator.
     * This method returns the value of the database column sys_log.invoke_return_resp
     *
     * @return the value of sys_log.invoke_return_resp
     *
     * @mbg.generated Sun Apr 19 15:41:26 CST 2020
     */
    public String getInvokeReturnResp() {
        return invokeReturnResp;
    }

    /**
     * This method was generated by MyBatis Generator.
     * This method sets the value of the database column sys_log.invoke_return_resp
     *
     * @param invokeReturnResp the value for sys_log.invoke_return_resp
     *
     * @mbg.generated Sun Apr 19 15:41:26 CST 2020
     */
    public void setInvokeReturnResp(String invokeReturnResp) {
        this.invokeReturnResp = invokeReturnResp == null ? null : invokeReturnResp.trim();
    }

    /**
     * This method was generated by MyBatis Generator.
     * This method returns the value of the database column sys_log.invoke_param
     *
     * @return the value of sys_log.invoke_param
     *
     * @mbg.generated Sun Apr 19 15:41:26 CST 2020
     */
    public String getInvokeParam() {
        return invokeParam;
    }

    /**
     * This method was generated by MyBatis Generator.
     * This method sets the value of the database column sys_log.invoke_param
     *
     * @param invokeParam the value for sys_log.invoke_param
     *
     * @mbg.generated Sun Apr 19 15:41:26 CST 2020
     */
    public void setInvokeParam(String invokeParam) {
        this.invokeParam = invokeParam == null ? null : invokeParam.trim();
    }
}
SysLogMapper.java
package com.itwopqq.booting.system.mapper;

import com.itwopqq.booting.system.model.SysLog;
import java.util.List;

public interface SysLogMapper {
    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table sys_log
     *
     * @mbg.generated Sun Apr 19 15:41:26 CST 2020
     */
    int deleteByPrimaryKey(Integer id);

    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table sys_log
     *
     * @mbg.generated Sun Apr 19 15:41:26 CST 2020
     */
    int insert(SysLog record);

    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table sys_log
     *
     * @mbg.generated Sun Apr 19 15:41:26 CST 2020
     */
    SysLog selectByPrimaryKey(Integer id);

    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table sys_log
     *
     * @mbg.generated Sun Apr 19 15:41:26 CST 2020
     */
    List<SysLog> selectAll();

    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table sys_log
     *
     * @mbg.generated Sun Apr 19 15:41:26 CST 2020
     */
    int updateByPrimaryKey(SysLog record);
}
SysLogMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itwopqq.booting.system.mapper.SysLogMapper">
  <resultMap id="BaseResultMap" type="com.itwopqq.booting.system.model.SysLog">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
      This element was generated on Sun Apr 19 15:41:26 CST 2020.
    -->
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="invoke_method" jdbcType="VARCHAR" property="invokeMethod" />
    <result column="invoke_sql" jdbcType="VARCHAR" property="invokeSql" />
    <result column="sql_start_time" jdbcType="TIMESTAMP" property="sqlStartTime" />
    <result column="sql_end_time" jdbcType="TIMESTAMP" property="sqlEndTime" />
    <result column="sql_time" jdbcType="TIMESTAMP" property="sqlTime" />
    <result column="invoke_return_resp" jdbcType="LONGVARCHAR" property="invokeReturnResp" />
    <result column="invoke_param" jdbcType="LONGVARCHAR" property="invokeParam" />
  </resultMap>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
      This element was generated on Sun Apr 19 15:41:26 CST 2020.
    -->
    delete from sys_log
    where id = #{id,jdbcType=INTEGER}
  </delete>
  <insert id="insert" parameterType="com.itwopqq.booting.system.model.SysLog">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
      This element was generated on Sun Apr 19 15:41:26 CST 2020.
    -->
    insert into sys_log (id, invoke_method, invoke_sql, 
      sql_start_time, sql_end_time, sql_time, 
      invoke_return_resp, invoke_param)
    values (#{id,jdbcType=INTEGER}, #{invokeMethod,jdbcType=VARCHAR}, #{invokeSql,jdbcType=VARCHAR}, 
      #{sqlStartTime,jdbcType=TIMESTAMP}, #{sqlEndTime,jdbcType=TIMESTAMP}, #{sqlTime,jdbcType=TIMESTAMP}, 
      #{invokeReturnResp,jdbcType=LONGVARCHAR}, #{invokeParam,jdbcType=LONGVARCHAR})
  </insert>
  <update id="updateByPrimaryKey" parameterType="com.itwopqq.booting.system.model.SysLog">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
      This element was generated on Sun Apr 19 15:41:26 CST 2020.
    -->
    update sys_log
    set invoke_method = #{invokeMethod,jdbcType=VARCHAR},
      invoke_sql = #{invokeSql,jdbcType=VARCHAR},
      sql_start_time = #{sqlStartTime,jdbcType=TIMESTAMP},
      sql_end_time = #{sqlEndTime,jdbcType=TIMESTAMP},
      sql_time = #{sqlTime,jdbcType=TIMESTAMP},
      invoke_return_resp = #{invokeReturnResp,jdbcType=LONGVARCHAR},
      invoke_param = #{invokeParam,jdbcType=LONGVARCHAR}
    where id = #{id,jdbcType=INTEGER}
  </update>
  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
      This element was generated on Sun Apr 19 15:41:26 CST 2020.
    -->
    select id, invoke_method, invoke_sql, sql_start_time, sql_end_time, sql_time, invoke_return_resp, 
    invoke_param
    from sys_log
    where id = #{id,jdbcType=INTEGER}
  </select>
  <select id="selectAll" resultMap="BaseResultMap">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
      This element was generated on Sun Apr 19 15:41:26 CST 2020.
    -->
    select id, invoke_method, invoke_sql, sql_start_time, sql_end_time, sql_time, invoke_return_resp, 
    invoke_param
    from sys_log
  </select>
</mapper>

根据上面生成的代码,我们可以看到插件还自动给我们生成了一些默认的代码,但是生成的代码的注释全都是因为的,不够友好,对此我们引进了tk.mybatis.mapper,用它来帮助我们规范我们生成代码的友好度;具体操作如下:

第一步:修改pom文件,加入tk.mybatis.mapper的依赖,并在build里面加入该依赖:
		<dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.0.2</version>
        </dependency>
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper</artifactId>
            <version>4.1.5</version>
        </dependency>
		<plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.7</version>
                <configuration>
                    <!--配置文件的路径-->
                    <configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile>
                    <overwrite>true</overwrite>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.41</version>
                        <type>jar</type>
                    </dependency>
                    <dependency>
                        <groupId>tk.mybatis</groupId>
                        <artifactId>mapper</artifactId>
                        <version>4.1.5</version>
                    </dependency>
                </dependencies>
            </plugin>
第二步:在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>

    <!-- 数据库驱动:可选择我们本地硬盘上面的数据库驱动包,在这里我们已经在pom文件中build里面配置了 -->
    <!--    <classPathEntry location="D:\workProjects\springBootMybatis\src\main\resources\lib\mysql-connector-java-5.1.9.jar"/>-->
    <context id="MysqlTables" targetRuntime="MyBatis3Simple" defaultModelType="flat">

        <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
            <property name="mappers" value="com.itwopqq.booting.code.generator.MyMapper"/>
        </plugin>

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

        <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://127.0.0.1:3306/booting?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=true"
                        userId="root" password="123456">
        </jdbcConnection>

        <!-- 类型转换器或者加类型解析器 -->
        <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer, true,把JDBC DECIMAL 和
            NUMERIC 类型解析为java.math.BigDecimal -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!-- java模型生成器 -->
        <!-- targetProject:自动生成代码的位置 -->
        <javaModelGenerator targetPackage="${modulePackage}.model"
                            targetProject="src/main/java">
            <!-- TODO enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="true" />
            <!-- 从数据库返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <!-- map xml 生成器 -->
        <!-- targetPackage 是 指targetProject下的包-->
        <sqlMapGenerator targetPackage="${targetMapperPackage}"
                         targetProject="src/main/resources">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>

        <!-- mapper 或者就是dao接口生成器 -->
        <javaClientGenerator targetPackage="${modulePackage}.mapper"
                             targetProject="src/main/java"
                             type="XMLMAPPER">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>

        <!-- pojo 实体生成器 -->
        <!-- tableName:用于自动生成代码的数据库表;domainObjectName:对应于数据库表的javaBean类名 -->
        <!-- schema为数据库名 可不写 -->
        <table  tableName="sys_log" domainObjectName="SysLog"
                enableInsert="true" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"
                enableSelectByExample="false" selectByExampleQueryId="false">
            <!-- 忽略字段 可选的(0 or 1) -->
            <!-- <ignoreColumn column="is_use" /> -->
            <!--//无论字段是什么类型,生成的类属性都是varchar。 可选的(0 or 1) 测试无效 -->
            <!-- <columnOverride column="city_code" jdbcType="VARCHAR" /> -->
        </table>
    </context>
</generatorConfiguration>
第三步:编写tk.mybatis.mapper.generator.MapperPlugin的mappers属性接口,该属性接口继承了tk包下的Mapper和MySqlMapper接口,让我们生成出来的代码无需编写SQL就可以通过java代码执行sql语句;代码如下:
package com.itwopqq.booting.code.generator;

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

/**
 * @author fanzhen
 * @desx
 * @date 2020-04-11
 */
public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T> {
}
第四步:删除我们前面生成的SysLog.java、SysLogMapper.java、SysLogMapper.xml,重新执行generator命令:
/Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home/bin/java -Dmaven.multiModuleProjectDirectory=/Users/fanzhen/Documents/ideaworkspaces/booting -Dmaven.home=/Users/fanzhen/Documents/apache-maven-3.6.1 -Dclassworlds.conf=/Users/fanzhen/Documents/apache-maven-3.6.1/bin/m2.conf "-javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=52166:/Applications/IntelliJ IDEA.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath /Users/fanzhen/Documents/apache-maven-3.6.1/boot/plexus-classworlds-2.6.0.jar org.codehaus.classworlds.Launcher -Didea.version2019.1 -s /Users/fanzhen/Documents/apache-maven-3.6.1/conf/settings.xml org.mybatis.generator:mybatis-generator-maven-plugin:1.3.7:generate
[INFO] Scanning for projects...
[WARNING] 
[WARNING] Some problems were encountered while building the effective model for com.itwopqq:booting:jar:0.0.1-SNAPSHOT
[WARNING] 'dependencies.dependency.(groupId:artifactId:type:classifier)' must be unique: org.mybatis.spring.boot:mybatis-spring-boot-starter:jar -> version 2.1.2 vs 1.3.3 @ line 73, column 21
[WARNING] 'dependencies.dependency.(groupId:artifactId:type:classifier)' must be unique: org.springframework.boot:spring-boot-starter-test:jar -> duplicate declaration of version (?) @ line 93, column 21
[WARNING] 
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING] 
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING] 
[INFO] 
[INFO] ------------------------< com.itwopqq:booting >-------------------------
[INFO] Building booting 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- mybatis-generator-maven-plugin:1.3.7:generate (default-cli) @ booting ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.874 s
[INFO] Finished at: 2020-04-19T15:58:21+08:00
[INFO] ------------------------------------------------------------------------

Process finished with exit code 0

查看我们项目的目录,可以看到我们的代码已经被生成了;

一、SysLog.java
package com.itwopqq.booting.system.model;

import java.util.Date;
import javax.persistence.*;

@Table(name = "sys_log")
public class SysLog {
    @Id
    private Integer id;

    /**
     * 调用的方法
     */
    @Column(name = "invoke_method")
    private String invokeMethod;

    /**
     * 执行的sql
     */
    @Column(name = "invoke_sql")
    private String invokeSql;

    /**
     * sql执行起始时间
     */
    @Column(name = "sql_start_time")
    private Date sqlStartTime;

    /**
     * sql执行结束时间
     */
    @Column(name = "sql_end_time")
    private Date sqlEndTime;

    /**
     * sql执行时间
     */
    @Column(name = "sql_time")
    private Date sqlTime;

    /**
     * 返回的数据
     */
    @Column(name = "invoke_return_resp")
    private String invokeReturnResp;

    /**
     * 方法传入的参数
     */
    @Column(name = "invoke_param")
    private String invokeParam;

    /**
     * @return id
     */
    public Integer getId() {
        return id;
    }

    /**
     * @param id
     */
    public void setId(Integer id) {
        this.id = id;
    }

    /**
     * 获取调用的方法
     *
     * @return invoke_method - 调用的方法
     */
    public String getInvokeMethod() {
        return invokeMethod;
    }

    /**
     * 设置调用的方法
     *
     * @param invokeMethod 调用的方法
     */
    public void setInvokeMethod(String invokeMethod) {
        this.invokeMethod = invokeMethod == null ? null : invokeMethod.trim();
    }

    /**
     * 获取执行的sql
     *
     * @return invoke_sql - 执行的sql
     */
    public String getInvokeSql() {
        return invokeSql;
    }

    /**
     * 设置执行的sql
     *
     * @param invokeSql 执行的sql
     */
    public void setInvokeSql(String invokeSql) {
        this.invokeSql = invokeSql == null ? null : invokeSql.trim();
    }

    /**
     * 获取sql执行起始时间
     *
     * @return sql_start_time - sql执行起始时间
     */
    public Date getSqlStartTime() {
        return sqlStartTime;
    }

    /**
     * 设置sql执行起始时间
     *
     * @param sqlStartTime sql执行起始时间
     */
    public void setSqlStartTime(Date sqlStartTime) {
        this.sqlStartTime = sqlStartTime;
    }

    /**
     * 获取sql执行结束时间
     *
     * @return sql_end_time - sql执行结束时间
     */
    public Date getSqlEndTime() {
        return sqlEndTime;
    }

    /**
     * 设置sql执行结束时间
     *
     * @param sqlEndTime sql执行结束时间
     */
    public void setSqlEndTime(Date sqlEndTime) {
        this.sqlEndTime = sqlEndTime;
    }

    /**
     * 获取sql执行时间
     *
     * @return sql_time - sql执行时间
     */
    public Date getSqlTime() {
        return sqlTime;
    }

    /**
     * 设置sql执行时间
     *
     * @param sqlTime sql执行时间
     */
    public void setSqlTime(Date sqlTime) {
        this.sqlTime = sqlTime;
    }

    /**
     * 获取返回的数据
     *
     * @return invoke_return_resp - 返回的数据
     */
    public String getInvokeReturnResp() {
        return invokeReturnResp;
    }

    /**
     * 设置返回的数据
     *
     * @param invokeReturnResp 返回的数据
     */
    public void setInvokeReturnResp(String invokeReturnResp) {
        this.invokeReturnResp = invokeReturnResp == null ? null : invokeReturnResp.trim();
    }

    /**
     * 获取方法传入的参数
     *
     * @return invoke_param - 方法传入的参数
     */
    public String getInvokeParam() {
        return invokeParam;
    }

    /**
     * 设置方法传入的参数
     *
     * @param invokeParam 方法传入的参数
     */
    public void setInvokeParam(String invokeParam) {
        this.invokeParam = invokeParam == null ? null : invokeParam.trim();
    }
}
二、SysLogMapper.java
package com.itwopqq.booting.system.mapper;

import com.itwopqq.booting.code.generator.MyMapper;
import com.itwopqq.booting.system.model.SysLog;

public interface SysLogMapper extends MyMapper<SysLog> {
}
三、SysLogMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itwopqq.booting.system.mapper.SysLogMapper">
  <resultMap id="BaseResultMap" type="com.itwopqq.booting.system.model.SysLog">
    <!--
      WARNING - @mbg.generated
    -->
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="invoke_method" jdbcType="VARCHAR" property="invokeMethod" />
    <result column="invoke_sql" jdbcType="VARCHAR" property="invokeSql" />
    <result column="sql_start_time" jdbcType="TIMESTAMP" property="sqlStartTime" />
    <result column="sql_end_time" jdbcType="TIMESTAMP" property="sqlEndTime" />
    <result column="sql_time" jdbcType="TIMESTAMP" property="sqlTime" />
    <result column="invoke_return_resp" jdbcType="LONGVARCHAR" property="invokeReturnResp" />
    <result column="invoke_param" jdbcType="LONGVARCHAR" property="invokeParam" />
  </resultMap>
</mapper>

综上所述:我们代码已经生成完毕了,但是我们生成的代码只有model和Mapper下面的代码类,我们其他包下面的代码未生成,比如说:service、serviceimpl、controller、dto。我们该插件可以自动生成的值包括model和Mapper下面的内容,下面我们将介绍 结合其他插件生成service、serviceimpl、controller以及dto包下的代码;

我们要生成其他的代码,我们就要基于mybatis-generator-maven-plugin插件做延伸,这里关于该插件延伸的具体实现不做具体介绍,后续博客中会在进行延伸讲解,
自定义插件百度网盘地址:
链接:https://pan.baidu.com/s/18Aw16VtoGrQWONxQlBB7tA 密码:vmvk,

我们将百度网盘里面下载下来的jar包放到我们当前电脑中,或者上传至maven私服上,这里我们是放到当前电脑中(位置:/Users/fanzhen/Documents/local-repository/business-generator-master/business-generator-1.1-jar-with-dependencies.jar)

pom文件的配置:

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 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.2.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.itwopqq</groupId>
    <artifactId>booting</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>booting</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <!-- 模块包名 -->
        <modulePackage>com.itwopqq.booting.system</modulePackage>
        <!-- 生成代码目录 -->
        <targetProject>src/main/java</targetProject>
        <targetMapperProject>src/main/resources</targetMapperProject>
        <targetMapperPackage>mybatis.system.mapping</targetMapperPackage>
        <targetServicePackage>com.itwopqq.booting.system.service</targetServicePackage>
        <targetServiceImplPackage>com.itwopqq.booting.system.serviceimpl</targetServiceImplPackage>
        <targetControllerPackage>com.itwopqq.booting.system.controller</targetControllerPackage>
        <hsqldb.version>2.2.8</hsqldb.version>
        <cobertura.version>1.9.4.1</cobertura.version>
        <freemarker.version>2.3.23</freemarker.version>
        <hsqldb.version>2.2.8</hsqldb.version>
    </properties>

    <dependencies>
        <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>2.1.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>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.3</version>
        </dependency>

        <!-- shiro start -->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring</artifactId>
            <version>1.3.2</version>
        </dependency>
        <!-- shiro end -->

        <!--添加junit环境的jar包-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

        <!-- mybatis代码生成器 -->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.7</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.20</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>net.sourceforge.cobertura</groupId>
            <artifactId>cobertura</artifactId>
            <version>${cobertura.version}</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>${freemarker.version}</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>23.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
            <version>4.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.7</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>org.apache.ant</groupId>
            <artifactId>ant</artifactId>
            <version>1.8.4</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
        </dependency>
        <dependency>
            <groupId>org.hsqldb</groupId>
            <artifactId>hsqldb</artifactId>
            <version>${hsqldb.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-plugin-api</artifactId>
            <version>3.0.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-project</artifactId>
            <version>3.0-alpha-2</version>
        </dependency>
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.0.2</version>
        </dependency>
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper</artifactId>
            <version>4.1.5</version>
        </dependency>

        <dependency>
            <groupId>com.fanzhen</groupId>
            <artifactId>business_generator_plugins</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>system</scope>
            <systemPath>/Users/fanzhen/Documents/local-repository/business-generator-master/business-generator-1.1-jar-with-dependencies.jar</systemPath>
        </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>
                    <!--配置文件的路径-->
                    <configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile>
                    <overwrite>true</overwrite>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.41</version>
                        <type>jar</type>
                    </dependency>
                    <dependency>
                        <groupId>tk.mybatis</groupId>
                        <artifactId>mapper</artifactId>
                        <version>4.1.5</version>
                    </dependency>
                    <dependency>
                        <groupId>com.fanzhen</groupId>
                        <artifactId>business_generator_plugins</artifactId>
                        <version>1.0-SNAPSHOT</version>
                        <scope>system</scope>
                        <systemPath>/Users/fanzhen/Documents/local-repository/business-generator-master/business-generator-1.1-jar-with-dependencies.jar</systemPath>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>

</project>
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>

    <!-- 数据库驱动:可选择我们本地硬盘上面的数据库驱动包,在这里我们已经在pom文件中build里面配置了 -->
    <!--    <classPathEntry location="D:\workProjects\springBootMybatis\src\main\resources\lib\mysql-connector-java-5.1.9.jar"/>-->
    <context id="MysqlTables" targetRuntime="MyBatis3Simple" defaultModelType="flat">

        <!-- 模块包名 -->
        <property name="modulePackage" value="com.itwopqq.booting.system"/>
        <!-- 生成项目 -->
        <property name="targetProject" value="src/main/java"/>

        <property name="targetMapperProject" value="src/main/resources"/>


        <property name="targetMapperPackage" value="mybatis.system.mapping"/>

        <property name="targetServicePackage" value="com.itwopqq.booting.system.service"/>

        <property name="targetServiceImplPackage" value="com.itwopqq.booting.system.serviceimpl"/>

        <property name="targetControllerPackage" value="com.itwopqq.booting.system.controller"/>

        <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
            <property name="mappers" value="com.itwopqq.booting.code.generator.MyMapper"/>
        </plugin>

        <!-- 自定义plugins插件 -->
        <plugin type="com.business.code.generator.ServiceTemplatePlugin">
        </plugin>
        <plugin type="com.business.code.generator.ServiceImplTemplatePlugin">
            <property name="isOverride" value="true"/>
        </plugin>
        <plugin type="com.business.code.generator.ControllerTemplatePlugin">
        </plugin>

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

        <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://47.100.254.99:3306/booting?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=true"
                        userId="root" password="123456">
        </jdbcConnection>

        <!-- 类型转换器或者加类型解析器 -->
        <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer, true,把JDBC DECIMAL 和
            NUMERIC 类型解析为java.math.BigDecimal -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!-- java模型生成器 -->
        <!-- targetProject:自动生成代码的位置 -->
        <javaModelGenerator targetPackage="${modulePackage}.model"
                            targetProject="src/main/java">
            <!-- TODO enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="true" />
            <!-- 从数据库返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <!-- map xml 生成器 -->
        <!-- targetPackage 是 指targetProject下的包-->
        <sqlMapGenerator targetPackage="${targetMapperPackage}"
                         targetProject="src/main/resources">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>

        <!-- mapper 或者就是dao接口生成器 -->
        <javaClientGenerator targetPackage="${modulePackage}.mapper"
                             targetProject="src/main/java"
                             type="XMLMAPPER">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>

        <!-- pojo 实体生成器 -->
        <!-- tableName:用于自动生成代码的数据库表;domainObjectName:对应于数据库表的javaBean类名 -->
        <!-- schema为数据库名 可不写 -->
        <table  tableName="sys_log" domainObjectName="SysLog"
                enableInsert="true" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"
                enableSelectByExample="false" selectByExampleQueryId="false">
            <!-- 忽略字段 可选的(0 or 1) -->
            <!-- <ignoreColumn column="is_use" /> -->
            <!--//无论字段是什么类型,生成的类属性都是varchar。 可选的(0 or 1) 测试无效 -->
            <!-- <columnOverride column="city_code" jdbcType="VARCHAR" /> -->
        </table>
    </context>
</generatorConfiguration>

执行maven的plugins命令,可以看到我们的service、serviceimpl和controller下面的代码已经生成了

SysLogController.java
package com.itwopqq.booting.system.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;
import com.itwopqq.booting.system.service.SysLogService;
import lombok.extern.slf4j.Slf4j;
/**
* 通用 Controller 代码生成器
* @description
* @author business.generator
*/
@Slf4j
@RestController
public class SysLogController {

    @Autowired
    private SysLogService  sysLogService;


}
SysLogService.java
package com.itwopqq.booting.system.service;

/**
* 通用 service 代码生成器
* @description
* @author business.generator
*/
public interface SysLogService  {

}
SysLogServiceImpl.java
package com.itwopqq.booting.system.serviceimpl;

import com.itwopqq.booting.system.service.SysLogService;
import org.springframework.stereotype.Service;
import lombok.extern.slf4j.Slf4j;
/**
* 通用 serviceImpl 代码生成器
* @description
* @author business.generator
*/
@Slf4j
@Service
public class SysLogServiceImpl  implements SysLogService{

}
SysLogMapper.java
package com.itwopqq.booting.system.mapper;

import com.itwopqq.booting.code.generator.MyMapper;
import com.itwopqq.booting.system.model.SysLog;

public interface SysLogMapper extends MyMapper<SysLog> {
}
SysLogMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itwopqq.booting.system.mapper.SysLogMapper">
  <resultMap id="BaseResultMap" type="com.itwopqq.booting.system.model.SysLog">
    <!--
      WARNING - @mbg.generated
    -->
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="invoke_method" jdbcType="VARCHAR" property="invokeMethod" />
    <result column="invoke_sql" jdbcType="VARCHAR" property="invokeSql" />
    <result column="sql_start_time" jdbcType="TIMESTAMP" property="sqlStartTime" />
    <result column="sql_end_time" jdbcType="TIMESTAMP" property="sqlEndTime" />
    <result column="sql_time" jdbcType="TIMESTAMP" property="sqlTime" />
    <result column="invoke_return_resp" jdbcType="LONGVARCHAR" property="invokeReturnResp" />
    <result column="invoke_param" jdbcType="LONGVARCHAR" property="invokeParam" />
  </resultMap>
</mapper>
SysLog.java
package com.itwopqq.booting.system.model;

import java.util.Date;
import javax.persistence.*;

@Table(name = "sys_log")
public class SysLog {
    @Id
    private Integer id;

    /**
     * 调用的方法
     */
    @Column(name = "invoke_method")
    private String invokeMethod;

    /**
     * 执行的sql
     */
    @Column(name = "invoke_sql")
    private String invokeSql;

    /**
     * sql执行起始时间
     */
    @Column(name = "sql_start_time")
    private Date sqlStartTime;

    /**
     * sql执行结束时间
     */
    @Column(name = "sql_end_time")
    private Date sqlEndTime;

    /**
     * sql执行时间
     */
    @Column(name = "sql_time")
    private Date sqlTime;

    /**
     * 返回的数据
     */
    @Column(name = "invoke_return_resp")
    private String invokeReturnResp;

    /**
     * 方法传入的参数
     */
    @Column(name = "invoke_param")
    private String invokeParam;

    /**
     * @return id
     */
    public Integer getId() {
        return id;
    }

    /**
     * @param id
     */
    public void setId(Integer id) {
        this.id = id;
    }

    /**
     * 获取调用的方法
     *
     * @return invoke_method - 调用的方法
     */
    public String getInvokeMethod() {
        return invokeMethod;
    }

    /**
     * 设置调用的方法
     *
     * @param invokeMethod 调用的方法
     */
    public void setInvokeMethod(String invokeMethod) {
        this.invokeMethod = invokeMethod == null ? null : invokeMethod.trim();
    }

    /**
     * 获取执行的sql
     *
     * @return invoke_sql - 执行的sql
     */
    public String getInvokeSql() {
        return invokeSql;
    }

    /**
     * 设置执行的sql
     *
     * @param invokeSql 执行的sql
     */
    public void setInvokeSql(String invokeSql) {
        this.invokeSql = invokeSql == null ? null : invokeSql.trim();
    }

    /**
     * 获取sql执行起始时间
     *
     * @return sql_start_time - sql执行起始时间
     */
    public Date getSqlStartTime() {
        return sqlStartTime;
    }

    /**
     * 设置sql执行起始时间
     *
     * @param sqlStartTime sql执行起始时间
     */
    public void setSqlStartTime(Date sqlStartTime) {
        this.sqlStartTime = sqlStartTime;
    }

    /**
     * 获取sql执行结束时间
     *
     * @return sql_end_time - sql执行结束时间
     */
    public Date getSqlEndTime() {
        return sqlEndTime;
    }

    /**
     * 设置sql执行结束时间
     *
     * @param sqlEndTime sql执行结束时间
     */
    public void setSqlEndTime(Date sqlEndTime) {
        this.sqlEndTime = sqlEndTime;
    }

    /**
     * 获取sql执行时间
     *
     * @return sql_time - sql执行时间
     */
    public Date getSqlTime() {
        return sqlTime;
    }

    /**
     * 设置sql执行时间
     *
     * @param sqlTime sql执行时间
     */
    public void setSqlTime(Date sqlTime) {
        this.sqlTime = sqlTime;
    }

    /**
     * 获取返回的数据
     *
     * @return invoke_return_resp - 返回的数据
     */
    public String getInvokeReturnResp() {
        return invokeReturnResp;
    }

    /**
     * 设置返回的数据
     *
     * @param invokeReturnResp 返回的数据
     */
    public void setInvokeReturnResp(String invokeReturnResp) {
        this.invokeReturnResp = invokeReturnResp == null ? null : invokeReturnResp.trim();
    }

    /**
     * 获取方法传入的参数
     *
     * @return invoke_param - 方法传入的参数
     */
    public String getInvokeParam() {
        return invokeParam;
    }

    /**
     * 设置方法传入的参数
     *
     * @param invokeParam 方法传入的参数
     */
    public void setInvokeParam(String invokeParam) {
        this.invokeParam = invokeParam == null ? null : invokeParam.trim();
    }
}

小结:
至此整个流程就结束了,代码生成的整个功能已经完结,我们后续开发业务代码的时候可以不用编写每一层的代码了,只需要写我们的业务逻辑即可,
下一章节将介绍整合logger搭建日志记录框架,并将上述涉及到的源码附上去。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
首先,你需要引入以下依赖: ```xml <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.3.0</version> </dependency> <dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId> <version>3.3.0</version> </dependency> ``` 然后,在mapper.xml中定义一个插入二维码图片信息的SQL语句: ```xml <insert id="insertQRCode" parameterType="string"> insert into qrcode (content, image) values (#{content}, #{image}) </insert> ``` 在mapper接口中定义该方法: ```java void insertQRCode(String content, byte[] image); ``` 在mapper对应的service接口中定义该方法: ```java void generateAndSaveQRCode(String content); ``` 在service实现类中实现该方法: ```java @Override public void generateAndSaveQRCode(String content) { try { // 生成二维码 BitMatrix bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, 200, 200); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); MatrixToImageWriter.writeToStream(bitMatrix, "png", byteArrayOutputStream); byte[] image = byteArrayOutputStream.toByteArray(); // 保存到数据库 mapper.insertQRCode(content, image); } catch (Exception e) { throw new RuntimeException("Failed to generate and save QR code.", e); } } ``` 最后,在controller中调用该方法即可: ```java @RestController @RequestMapping("/qrcode") public class QRCodeController { @Autowired private QRCodeService qrCodeService; @PostMapping public void generateAndSaveQRCode(@RequestParam String content) { qrCodeService.generateAndSaveQRCode(content); } } ``` 当你向 `/qrcode` 发送POST请求时,该接口将会生成并保存相应的二维码图片信息到数据库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值