1.概念介绍
MyBatis-Plus 是一个 MyBatis 的增强工具,旨在简化开发、提高效率。它在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis-Plus 提供了代码生成器功能,可以快速地根据数据库表结构生成 Entity(实体类)、Mapper(映射器接口)、Service(服务层接口及其实现)、Controller(控制层)等代码文件。
2.代码生成器原理
MyBatis-Plus 的代码生成器是基于 Java 的反射机制和模板引擎来实现的。它通过读取数据库中的表结构信息,然后根据预设的模板生成对应的 Java 代码文件。用户可以根据需要自定义模板,以便生成符合项目规范的代码。
3.配置Demo工程步骤
3.1 设置JDK,Maven等关联信息,示例Demo已上传到我个人主页。
我选择openjdk17,保证jdk8以上就行
3.2 重新加载maven项目
以上操作做完,基本是不会报错了,可以正常编译源代码。
3.基础配置
要使用 MyBatis-Plus 的代码生成器,首先需要引入 MyBatis-Plus 的依赖,并进行相应的配置。以下是使用 MyBatis-Plus 代码生成器的基础步骤:
-
添加依赖: 在 Maven 或 Gradle 项目的构建配置中添加 MyBatis-Plus 相关依赖。
-
数据库连接配置: 配置好数据源,确保能够正确连接到数据库。
-
创建代码生成器配置: 创建一个
AutoGenerator
对象,并设置其属性,如数据源配置、全局配置、包配置、策略配置等。 -
AutoGenerator源码:
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by FernFlower decompiler) // package com.baomidou.mybatisplus.generator; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.Version; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.activerecord.Model; import com.baomidou.mybatisplus.generator.config.DataSourceConfig; 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.builder.ConfigBuilder; import com.baomidou.mybatisplus.generator.config.po.TableInfo; import com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine; import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine; import java.io.Serializable; import java.util.Iterator; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class AutoGenerator { private static final Logger logger = LoggerFactory.getLogger(AutoGenerator.class); protected ConfigBuilder config; protected InjectionConfig injectionConfig; private DataSourceConfig dataSource; private StrategyConfig strategy; private PackageConfig packageInfo; private TemplateConfig template; private GlobalConfig globalConfig; private AbstractTemplateEngine templateEngine; public void execute() { logger.debug("==========================准备生成文件...=========================="); if (null == this.config) { this.config = new ConfigBuilder(this.packageInfo, this.dataSource, this.strategy, this.template, this.globalConfig); if (null != this.injectionConfig) { this.injectionConfig.setConfig(this.config); } } if (null == this.templateEngine) { this.templateEngine = new VelocityTemplateEngine(); } this.templateEngine.init(this.pretreatmentConfigBuilder(this.config)).mkdirs().batchOutput().open(); logger.debug("==========================文件生成完成!!!=========================="); } protected List<TableInfo> getAllTableInfoList(ConfigBuilder config) { return config.getTableInfoList(); } protected ConfigBuilder pretreatmentConfigBuilder(ConfigBuilder config) { if (null != this.injectionConfig) { thi