mybatis plus自动生成器解析(及遇到的坑)

下面我会详细介绍一下如何使用 MyBatis-Plus 自动生成器,以及在使用过程中可能会遇到哪些坑。

一、MyBatis-Plus 自动生成器概述

MyBatis-Plus 自动生成器是一种通过模板自动生成代码的快速开发工具。它可以根据定义的实体类和模板,自动生成增删改查的 Dao 文件、实体类文件、服务接口文件以及部分控制器文件等。

二、如何使用 Mybatis-Plus 自动生成器

  1. 配置自动生成器

在 pom.xml 文件中引入 MyBatis-Plus 自动生成器的依赖:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.0.6</version>
</dependency>

在 resources 文件夹下创建generator.properties配置文件,指定生成配置。具体配置项可以参考官方文档:MyBatis-Plus 自动生成器配置项

  1. 编写 Entity

在项目中编写对应的Entity:java文件即可。Entity类中应当包含对应表的字段以及getter、setter方法。同时在 Entity 类中添加 @TableName 注解,指定对应数据库表名。

@Data
@TableName("user")
public class User {
    @TableId(value = "id",type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
}
  1. 编写模板

在项目中创建对应的模板文件,例如 Mapper.xml.ftl 文件用于生成 Mapper 类文件。模板里面可以包含对应增删改查的 sql 语句。

模板文件示例 mapper.xml.ftl:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="${mapperPackage}.${entityName}Mapper">
\t<resultMap id="BaseResultMap" type="${entityPackage}.${entityName}">
\t\t<id column="id" property="id" />
\t\t<result column="name" property="name" />
\t\t<result column="age" property="age" />
\t</resultMap>

\t<sql id="Base_Column_List">
\t\tid, name, age
\t</sql>

\t<select id="selectById" resultMap="BaseResultMap" parameterType="java.lang.Long">
\t\tselect * from user where id = #{id}
\t</select>

</mapper>
  1. 运行 MyBatis-Plus 自动生成器

在项目中运行 MyBatis-Plus 自动生成器指令即可快速生成对应的代码文件:

public static void main(String[] args) {
    AutoGenerator mpg = new AutoGenerator();
    //全局配置
    GlobalConfig gc = new GlobalConfig();
    gc.setOutputDir(outputDir);
    gc.setAuthor(author);
    gc.setOpen(false);
    gc.setSwagger2(true);
    gc.setBaseResultMap(true);
    gc.setBaseColumnList(true);

    mpg.setGlobalConfig(gc);
    mpg.setDataSource(dataSourceConfig);
    mpg.setPackageInfo(pkgConfig);

    // 配置自动生成器
    mpg.setCfg(injectionConfig);
    // 配置模板
    TemplateConfig tc = new TemplateConfig();
    tc.setXml(null);
    mpg.setTemplate(tc);
    // 配置策略
    StrategyConfig strategy = new StrategyConfig();
    // 表名下划线转驼峰命名
    strategy.setNaming(NamingStrategy.underline_to_camel);
    strategy.setColumnNaming(NamingStrategy.underline_to_camel);

    strategy.setEntityLombokModel(true);
    strategy.setRestControllerStyle(true);
    // 公共父实体
    strategy.setSuperEntityColumns("id");
    strategy.setSuperControllerClass("com.example.demo.controller.base.BaseController");//父类controller
    strategy.setSuperEntityClass("com.example.demo.entity.base.BaseEntity");//父类entity
    strategy.setInclude("user");//需要生成的表名
    mpg.setStrategy(strategy);

    mpg.execute();
}

这样就可以快速生成对应的 Dao、Service、Controller、Entity 等基础代码文件。

三、可能遇到的坑

1. 数据库表名与实体类名不匹配

如果数据表名和实体类名不一致,需要在 Entity 类上通过 @TableName 注解指定对应的数据表名。若不指定,则会按照默认的驼峰命名规则自动匹配。

2. 数据库字段名与实体类属性名不匹配

如果数据库表字段名与实体类属性名不一致,需要在 Entity 类上通过 @TableField 注解 指定对应的数据库字段名,若不指定,则会按照默认的驼峰命名规则自动匹配。

3. 复杂查询的sql语句自动生成会存在问题

Mybatis-plus 自动生成器只能生成简单的增删改查的 sql 语句,一些复杂的查询语句需要手写。

四、示例

示例一

例如以下代码可以生成对应的user表的增删改查操作代码:

public class AutoGeneratorApplication {
    public static void main(String[] args) {
        AutoGenerator mpg = new AutoGenerator();
        //全局配置
        GlobalConfig gc = new GlobalConfig();
        gc.setOutputDir("/Users/baiyyang/Documents/pri/daily-practice/mybatis-plus-example/src/main/java");
        gc.setAuthor("byYang");
        gc.setOpen(false);
        gc.setSwagger2(true);
        gc.setBaseResultMap(true);
        gc.setBaseColumnList(true);
        mpg.setGlobalConfig(gc);

        //数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/mybatis-plus-example?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8");
        // dsc.setSchemaName("public");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("root");
        mpg.setDataSource(dsc);

        //包配置
        PackageConfig pc = new PackageConfig();
        pc.setParent("com.yangbai");
        mpg.setPackageInfo(pc);

        // 配置自动生成器
        mpg.setCfg(getInjectionConfig());
        // 配置模板
        TemplateConfig tc = new TemplateConfig();
        tc.setXml(null);
        mpg.setTemplate(tc);
        // 配置策略
        StrategyConfig strategy = new StrategyConfig();
        // 表名下划线转驼峰命名
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);

        strategy.setEntityLombokModel(true);
        strategy.setRestControllerStyle(true);
        // 公共父实体
        strategy.setSuperEntityColumns("id");
        strategy.setSuperControllerClass("com.yangbai.controller.base.BaseController");//父类controller
        strategy.setSuperEntityClass("com.yangbai.entity.base.BaseEntity");//父类entity
        strategy.setInclude("user");//需要生成的表名
        mpg.setStrategy(strategy);

        mpg.execute();
        System.out.println("finish");
    }

    /**
     * 自定义配置
     * @return
     */
    private static InjectionConfig getInjectionConfig(){
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                Map<String, Object> map = new HashMap<>();
                this.setMap(map);
            }
        };
        String templatePath = "/templates/mapper.xml.ftl";
        List<FileOutConfig> focList = new ArrayList<>();
        focList.add(new FileOutConfig(templatePath) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定义输出文件名, 如果Entity设置了前后缀、此处注意xml的名称会跟着发生变化
                System.out.println(tableInfo.getEntityName());
                return "/Users/baiyyang/Documents/pri/daily-practice/mybatis-plus-example/src/main/resources/mapper/" + tableInfo.getEntityName() + "Mapper.xml";
            }
        });

        cfg.setFileOutConfigList(focList);
        return cfg;
    }
}

示例二

下面是generator.properties的配置示例:

# 全局配置
config.author=byy表示作者
config.outputDir=/Users/baiyyang/Documents/pri/daily-practice/mybatis-plus-example/src/main/java
config.fileOverride=false

# 数据源配置
dataSource.dbName=mybatis-plus-example
dataSource.type=com.alibaba.druid.pool.DruidDataSource
dataSource.driverName=com.mysql.cj.jdbc.Driver
dataSource.url=jdbc:mysql://localhost:3306/mybatis-plus-example?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
dataSource.username=root
dataSource.password=root

# 包配置
package.basePackage=com.yangbai
package.entityName=entity
package.mapperName=mapper
package.serviceName=service
package.controllerName=controller

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:mybatis plus自动生成器解析(及遇到的坑) - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • java 图片验证码的实现代码

    Java 图片验证码是一种难题,其主要目的是为了防止机器人通过自动化工具诈骗某种资源或服务。以下是一个详细的攻略,可以通过使用Java实现验证码图片来完成此过程: 设计验证码生成过程 首先,我们需要定义一些方法,以使用Java的java.awt.image包中的BufferedImage类来生成验证码图像。在创建图像之后,我们将应用特定的文本干扰和颜色干扰来…

    Java 2023年6月15日
    00
  • 详解Java中ArrayList类

    我们来详细讲解Java中ArrayList类的完整攻略。 1. ArrayList类简介 Java中的ArrayList类是一种可以动态增长和缩小大小的数组,是一种可重用的数据集合,ArrayList中的元素可以是任意类型的对象。 相对于传统的Java数组,ArrayList类可以自动扩容,同时可以动态增删元素,因此使用起来更加方便。 2. ArrayLis…

    Java 2023年5月26日
    00
  • 支持Java 14!Java开发工具IntelliJ IDEA 2020.1稳定版发布

    下面是关于“支持Java 14!Java开发工具IntelliJ IDEA 2020.1稳定版发布”的详细攻略: 什么是IntelliJ IDEA? IntelliJ IDEA是一款由JetBrains开发的Java和其他编程语言的集成开发环境(IDE)。它提供了强大的功能,如代码智能提示、错误检查、重构、版本控制等等,同时也支持许多其他开发技术和框架。In…

    Java 2023年5月19日
    00
  • SpringBoot深入理解之内置web容器及配置的总结

    Spring Boot深入理解之内置Web容器及配置的总结 什么是Spring Boot内置Web容器 Spring Boot是一种轻量级Java开发框架,它简化了Spring应用程序的构建和部署过程。它支持内置Web容器,如Tomcat、Jetty和Undertow。这意味着您可以直接使用可执行Jar文件启动Spring应用程序而无需外部Web服务器。 S…

    Java 2023年5月15日
    00
  • 利用Java实现文件锁定功能

    接下来我将为你详细讲解如何利用Java实现文件锁定功能。 什么是文件锁定 文件锁定是指在对文件进行读取、修改等操作时,防止其他程序或者线程对同一文件进行操作,从而避免文件被多个程序同步修改而产生数据不一致的情况。 文件锁定的实现原理 文件锁定的实现原理是通过创建文件锁的方式来阻止其他程序访问被锁定的文件。在Java中,可以通过FileChannel类创建文件…

    Java 2023年5月20日
    00
  • 详解Maven安装教程及是否安装成功

    下面是详细讲解“详解Maven安装教程及是否安装成功”的完整攻略。 1. 安装JDK 在安装Maven之前,需要先安装JDK,因为Maven是基于Java的,所以JDK必须先安装好。可以在Oracle官网下载JDK,安装过程中需要注意选择合适的版本。 2. 下载Maven 从Maven官网下载Maven,下载页面中有两个版本分别为源码版本和二进制版本。如果你…

    Java 2023年5月20日
    00
  • 通过Spring Security魔幻山谷讲解获取认证机制核心原理

    下面是通过Spring Security魔幻山谷讲解获取认证机制核心原理的完整攻略,包含了两条示例。 一、认证机制核心原理 Spring Security的认证机制是基于过滤器链来实现的,具体流程如下: 用户提交认证请求; 表单过滤器(FilterSecurityInterceptor)拦截请求,检查请求的路径是否需要进行身份认证; 如果需要认证,则由过滤器…

    Java 2023年5月20日
    00
  • jsp中自定义标签用法实例分析

    下面是关于“jsp中自定义标签用法实例分析”的攻略。 一、自定义标签的基本概念和使用 自定义标签是指用户可以自行设定标签名称,通过编写自定义标签类来达到自己想要的功能,或用既有的标签库来达到相应的目的。在使用自定义标签的过程中,首先需要在jsp页面上导入标签库,然后就可以使用标签库中的标签了。具体步骤如下: 在jsp页面中引入标签库,方式如下: jsp &l…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部