MyBatis Plus中的代码生成器,让写代码变得如此简单

前言

进修者还清晰的记得,刚开始工作的时候,自己完全就是一个小白。在公司中总能听到前辈们互相吹嘘,说自己效率有多么的高。A前辈说:“我很会划水,一般闲聊30分钟,敲代码10分钟”。 B前辈也不甘示弱:“我一般先玩个40分钟,敲代码5分钟”。我当时心想:都这么牛批的吗?是真的牛批还是在吹牛皮。

自从使用了Mybatis Plus,我相信前辈们的话可能是真的。Mybatis Plus提供了代码生成的功能,让我们写代码变得如此简单!

正文

在开始分享前,进修者先给大家准备2道Mybatis的面试题,每天积累一点点面试经验。
1、Mybatis中#和$的区别?
2、Mybatis的原理是什么?
问题分析:面试官主要考察面试人员有没有实际开发经验,还有学习的深度。
答案:这里暂时不公布,大家先想想怎么回答。稍后会在评论区中给答案!
下面哦

一、MyBatis-Plus简介

MyBatis-Plus(简称 MP),它在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生,是一个 MyBatis的增强工具和最好的搭档。

二、 新建项目

新建项目,可以使用IDEA快速生成Spring Boot项目或使用MyEclipse创建。这里不做说明。创建好的项目目录如下图所示:
该项目为MyEclipse10创建

三、 添加相关依赖

在项目目录中找到pom.xml文件,打开文件并配置相关依赖,如:MyBatis-Plus、模板引擎、数据库等依赖。

添加Mybatis Plus相关依赖

Spring Boot整合MyBatis Plus,需要在配置文件中,添加上MyBatis Plus的依赖项。为使用MyBatis Plus的代码生成器功能,还要添加它的代码生成器的依赖。

    <dependency>
		<groupId>com.baomidou</groupId>
		<artifactId>mybatis-plus-boot-starter</artifactId>
		<version>2.3.1</version>
	</dependency>
	<dependency>
		<groupId>com.baomidou</groupId>
		<artifactId>mybatis-plus-generator</artifactId>
		<version>3.3.2</version>
	</dependency>
添加模板引擎依赖

MyBatis-Plus 支持 Velocity(默认)、Freemarker、Beetl模板引擎。如果都不满足您的要求,也可以采用自定义模板引擎。这里进修者采用Freemarker模板引擎。

	<!-- 添加模板引擎 -->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-freemarker</artifactId>
		<version>2.3.12.RELEASE</version>
	</dependency>
完整pom.xml配置

项目会包含其他框架的依赖,这里不做一一说明,直接给出完整的配置。

<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>
	<groupId>com.training</groupId>
	<artifactId>mybatisplus</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.22.RELEASE</version>
	</parent>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
		</dependency>
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<version>2.3.1</version>
		</dependency>
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-generator</artifactId>
			<version>3.3.2</version>
		</dependency>
		<!-- 添加模板引擎 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-freemarker</artifactId>
			<version>2.3.12.RELEASE</version>
		</dependency>
		<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid-spring-boot-starter</artifactId>
			<version>1.1.10</version>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.7</source>
					<target>1.7</target>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

四、 编写执行代码

实现代码也是我们代码生成器实现的重要部分,大家要认真阅读,进修者已经把整体拆开来方便大家学习。代码生成器主要包含:全局配置、数据源配置、包配置、自定义配置和策略配置。

全局配置

全局配置也是公有的配置,可以设置项目输出路径、作者、主键策略、是否开启Swagger2模式等。部分代码如下:

    // 全局配置
    GlobalConfig globalConfig = new GlobalConfig();
    final String projectPath = System.getProperty("user.dir");
    globalConfig.setOutputDir(projectPath + "/src/main/java");
    //System.out.println("项目路径:"+projectPath);
    globalConfig.setAuthor("training");
    globalConfig.setOpen(false);
    // gc.setSwagger2(true); // 实体属性 Swagger2 注解
    globalConfig.setServiceName("%sService");
    mpg.setGlobalConfig(globalConfig);
数据源配置

数据源配置是说明使用哪种数据库来存储数据的,根据自己目前的需要进行配置,并已经在数据库中创建了对应的表。部分代码如下:

    // 数据源配置
    DataSourceConfig dsc = new DataSourceConfig();
    dsc.setUrl("jdbc:mysql://localhost:3306/userssm?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=UTC");
    dsc.setDriverName("com.mysql.jdbc.Driver");
    dsc.setUsername("root");
    dsc.setPassword("root");
    mpg.setDataSource(dsc);
包配置

项目包配置用于生成业务类、控制器类、存储类、实体类等包。不进行设置包名称将会按照默认包名生成。部分代码如下:

   // 包配置
   PackageConfig pc = new PackageConfig();
   pc.setModuleName(null);
   pc.setParent("com.training");
   mpg.setPackageInfo(pc);
自定义模板

自定义模板可以将Mapper.xml文件生成到我们指定的地方。如果我们想要将其放到resources目录下面就可以通过自定义模板来完成。部分代码如下:

        // 自定义配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                // blank
            }
        };

        // 如果模板引擎是 freemarker
        String templatePath = "/templates/mapper.xml.ftl";
        // 如果模板引擎是 velocity
        // String templatePath = "/templates/mapper.xml.vm";

        // 自定义输出配置
        List<FileOutConfig> focList = new ArrayList<>();
        // 自定义配置会被优先输出
        focList.add(new FileOutConfig(templatePath) {
			@Override
			public String outputFile(TableInfo tableInfo) {
				// TODO Auto-generated method stub
				return projectPath + "/src/main/resources/mapper/"
                + "/" + tableInfo.getEntityName() + "Mapper" + ConstVal.XML_SUFFIX;
			}
        });
策略配置

策略配置主要用来对实体类和相关类的生成规则进行设置,部分代码如下:

      // 策略配置
      StrategyConfig strategy = new StrategyConfig();
      strategy.setNaming(NamingStrategy.underline_to_camel);
      strategy.setColumnNaming(NamingStrategy.underline_to_camel);
      strategy.setEntityLombokModel(true);
      strategy.setRestControllerStyle(true);
      strategy.setInclude(setTables().split(","));
      strategy.setControllerMappingHyphenStyle(true);
      strategy.setTablePrefix("m_");
完整代码

这里是整个项目的所有代码,整合了上面的所有功能代码片段。完整代码如下:

package com.training.generator;

import java.util.ArrayList;
import java.util.List;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.ConstVal;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.FileOutConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.TemplateConfig;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

/**
 * 代码生成器
 * <p>Copyright: training</p>
 * @author 进修者
 * @version 1.0 create time:2023-4-4
 */
public class CodeGenerator {

	// 设置表名称,多个表用逗号隔开
    public static String setTables() {
        return "user";
    }

    public static void main(String[] args) {
        // 代码生成器
        AutoGenerator mpg = new AutoGenerator();

        // 全局配置
        GlobalConfig globalConfig = new GlobalConfig();
        final String projectPath = System.getProperty("user.dir");
        globalConfig.setOutputDir(projectPath + "/src/main/java");
        //System.out.println("项目路径:"+projectPath);
        globalConfig.setAuthor("training");
        globalConfig.setOpen(false);
        // gc.setSwagger2(true); // 实体属性 Swagger2 注解
        globalConfig.setServiceName("%sService");
        mpg.setGlobalConfig(globalConfig);

        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/userssm?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=UTC");
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("root");
        mpg.setDataSource(dsc);

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

        // 自定义配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                // blank
            }
        };

        // 如果模板引擎是 freemarker
        String templatePath = "/templates/mapper.xml.ftl";
        // 如果模板引擎是 velocity
        // String templatePath = "/templates/mapper.xml.vm";

        // 自定义输出配置
        List<FileOutConfig> focList = new ArrayList<>();
        // 自定义配置会被优先输出
        focList.add(new FileOutConfig(templatePath) {
			@Override
			public String outputFile(TableInfo tableInfo) {
				// TODO Auto-generated method stub
				return projectPath + "/src/main/resources/mapper/"
                + "/" + tableInfo.getEntityName() + "Mapper" + ConstVal.XML_SUFFIX;
			}
        });

        cfg.setFileOutConfigList(focList);
        mpg.setCfg(cfg);

        // 配置模板
        TemplateConfig templateConfig = new TemplateConfig();

        templateConfig.setXml(null);
        mpg.setTemplate(templateConfig);

        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        strategy.setEntityLombokModel(true);
        strategy.setRestControllerStyle(true);
        strategy.setInclude(setTables().split(","));
        strategy.setControllerMappingHyphenStyle(true);
        strategy.setTablePrefix("m_");
        mpg.setStrategy(strategy);
        mpg.setTemplateEngine(new FreemarkerTemplateEngine());
        mpg.execute();
    }
}

五、 结果展示

执行代码,然后查看项目目录,就会有相应包和代码生成。如下图所示:
执行结果图

小结

Spring Boot整合MyBatis-Plus非常简单。使用它的代码生成器功能,能够快速生成代码,提高了我们的工作效率。现在进修者也可以像当时的前辈那样吹嘘:“我也变得牛批了!哈哈哈,我可用不了5分钟哦”!

感谢您读完了进修者的内容分享,欢迎留言区一起聊聊天,聊聊关于您对MyBatis-Plus代码生成有什么更好的想法!

我是进修者,期待与您肩并肩,一起进化成长!
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进修者之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值