MyBatis-Plus代码生成器(新)使用

article/2025/9/29 3:18:18

目录

一,MyBatis-Plus基本简介。

二,特性

三,实现代码自动生成工具

3.1,准备一个初始项目,数据表,连接好数据库

 3.2,导入Mybatis-Plus相关依赖

3.3,配置数据库配置文件application.yml

3.4,构建代码自动生成工具类,其他更多的配置可参考官网=》苞米豆

 四,新旧代码生成器简单分析及补充

4.1,源码上的简单分析

4.2,模板配置TemplateConfig说明。

4.3,注入配置(InjectionConfig)说明


一,MyBatis-Plus基本简介。

MyBatis-Plus,又简称为“MP”,是一个MyBatis的增强工具,在MyBatis原有的使用功能基础上只做增强,不做改变。纯粹为了简化开发,提高效率而生。

为什么需要这样的工具呢?

因为最简单的一点,相比于同类型的数据库框架JPA而言,原生的MyBatis框架在处理JDBC和SQL语句上无疑更为繁琐,因为需要独立编写SQL语句,虽然更加灵活,性能较高,并且易于维护与阅读,但是相较于JPA直接集成jpaRepository省去大部分sql语句而言,开发效率明显不如jpa。所以,产生了MyBatis-plus,在Mybatis的基础上进一步增强了他的功能(理由并不唯一)。

详情可参考MyBatis-plus官方文档

二,特性

  • 无侵入:Mybatis-Plus 在 Mybatis 的基础上进行扩展,只做增强不做改变,引入 Mybatis-Plus 不会对现有的 Mybatis 构架产生任何影响,而且 MP 支持所有 Mybatis 原生的特性
  • 依赖少:仅仅依赖 Mybatis 以及 Mybatis-Spring
  • 损耗小:启动即会自动注入基本CURD,性能基本无损耗,直接面向对象操作
  • 预防Sql注入:内置Sql注入剥离器,有效预防Sql注入攻击
  • 通用CRUD操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 多种主键策略:支持多达4种主键策略(内含分布式唯一ID生成器),可自由配置,完美解决主键问题
  • 支持ActiveRecord:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可实现基本 CRUD 操作
  • 支持代码生成:采用代码或者 Maven 插件可快速生成 Mapper 、 Entity、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用(P.S. 比 Mybatis 官方的 Generator 更加强大!)
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 支持关键词自动转义:支持数据库关键词(order、key……)自动转义,还可自定义关键词
  • 内置分页插件:基于Mybatis物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通List查询
  • 内置性能分析插件:可输出Sql语句以及其执行时间,建议开发测试时启用该功能,能有效解决慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,预防误操作
     

三,实现代码自动生成工具

虽然IDEA中一些类似于easycode,RestfulToolkitX Code等插件也能实现代码自动生成,但是他们并不全面,而且缺乏灵活度。而MyBatis-Plus比他们更全面,虽然需要我们自己编写一些配置代码,但是在构建Springboot项目中,通过代码自动生成,直接构建出项目全面的基本结构。例如常用的POJO,DAO,Service,Service实现类,Controller层以及mapper.xml文件 ,并且在service中继承了封装好的IService类,一般的sql和实现类基本不用书写就能在controller中调用,并且我们还可以自己编辑自己的业务SQL语句,可谓相当灵活!话不多,直接上过程:

3.1,准备一个初始项目,数据表,连接好数据库

 3.2,导入Mybatis-Plus相关依赖

<!--        mybatis-plus依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version></dependency>
<!--        MP代码生成器依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.1</version></dependency>
<!--        模板引擎依赖--><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.3</version></dependency>

由于项目依赖于springboot,还需要数据库,数据表。因次,需要使用到的相关注解依赖也要一并引入,如果没有用到,可自行添减。

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></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>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency><!--        swagger依赖--><dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version></dependency>

3.3,配置数据库配置文件application.yml

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverpassword: 123456username: rooturl: jdbc:mysql://localhost:3306?test_user&useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTCserver:port: 8086

3.4,构建代码自动生成工具类,其他更多的配置可参考官网=》苞米豆

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;import java.util.Collections;/*** @author young* Date 2023/2/16 17:56* Description: store-cloud*/
public class CodeGeneration {public static void main(String[] args) {/*** 先配置数据源*/MySqlQuery mySqlQuery = new MySqlQuery() {@Overridepublic String[] fieldCustom() {return new String[]{"Default"};}};DataSourceConfig dsc = new DataSourceConfig.Builder("jdbc:mysql://localhost:3306/flowerpotnet?&useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai","root","123456").dbQuery(mySqlQuery).build();//通过datasourceConfig创建AutoGeneratorAutoGenerator generator = new AutoGenerator(dsc);/*** 全局配置*/String projectPath = System.getProperty("user.dir"); //获取项目路径String filePath = projectPath + "/src/main/java";  //java下的文件路径GlobalConfig global = new GlobalConfig.Builder().outputDir(filePath)//生成的输出路径.author("young")//生成的作者名字//.enableSwagger()开启swagger,需要添加swagger依赖并配置.dateType(DateType.TIME_PACK)//时间策略.commentDate("yyyy年MM月dd日")//格式化时间格式.disableOpenDir()//禁止打开输出目录,默认false.fileOverride()//覆盖生成文件.build();/*** 包配置*/PackageConfig packages = new PackageConfig.Builder().entity("entity")//实体类包名.parent("com.yy")//父包名。如果为空,将下面子包名必须写全部, 否则就只需写子包名.controller("controller")//控制层包名.mapper("dao")//mapper层包名.xml("mapper.xml")//数据访问层xml包名.service("service")//service层包名.serviceImpl("service.impl")//service实现类包名.other("output")//输出自定义文件时的包名.pathInfo(Collections.singletonMap(OutputFile.mapperXml, projectPath + "/src/main/resources/mapper")) //路径配置信息,就是配置各个文件模板的路径信息,这里以mapper.xml为例.build();/*** 模板配置*/// 如果模板引擎是 freemarker
//        String templatePath = "/templates/mapper.xml.ftl";
//         如果模板引擎是 velocity// String templatePath = "/templates/mapper.xml.vm";TemplateConfig template = new TemplateConfig.Builder()
//            .disable()//禁用所有模板//.disable(TemplateType.ENTITY)禁用指定模板
//                .service(filePath + "/service.java")//service模板路径
//                .serviceImpl(filePath + "/service/impl/serviceImpl.java")//实现类模板路径
//                .mapper(filePath + "/mapper.java")//mapper模板路径
//                .mapperXml("/templates/mapper.xml")//xml文件模板路路径
//                .controller(filePath + "/controller")//controller层模板路径.build();/*** 注入配置,自定义配置一个Map对象*/
//    Map<String,Object> map = new HashMap<>();
//        map.put("name","young");
//        map.put("age","22");
//        map.put("sex","男");
//        map.put("description","深情不及黎治跃");
//
//    InjectionConfig injectionConfig = new InjectionConfig.Builder()
//            .customMap(map)
//            .build();/*** 策略配置开始*/StrategyConfig strategyConfig = new StrategyConfig.Builder().enableCapitalMode()//开启全局大写命名//.likeTable()模糊表匹配.addInclude()//添加表匹配,指定要生成的数据表名,不写默认选定数据库所有表//.disableSqlFilter()禁用sql过滤:默认(不使用该方法)true//.enableSchema()启用schema:默认false.entityBuilder() //实体策略配置//.disableSerialVersionUID()禁用生成SerialVersionUID:默认true.enableChainModel()//开启链式模型.enableLombok()//开启lombok.enableRemoveIsPrefix()//开启 Boolean 类型字段移除 is 前缀.enableTableFieldAnnotation()//开启生成实体时生成字段注解//.addTableFills()添加表字段填充.naming(NamingStrategy.underline_to_camel)//数据表映射实体命名策略:默认下划线转驼峰underline_to_camel.columnNaming(NamingStrategy.underline_to_camel)//表字段映射实体属性命名规则:默认null,不指定按照naming执行.idType(IdType.AUTO)//添加全局主键类型.formatFileName("%s")//格式化实体名称,%s取消首字母I.build().mapperBuilder()//mapper文件策略.enableMapperAnnotation()//开启mapper注解.enableBaseResultMap()//启用xml文件中的BaseResultMap 生成.enableBaseColumnList()//启用xml文件中的BaseColumnList//.cache(缓存类.class)设置缓存实现类.formatMapperFileName("%sMapper")//格式化Dao类名称.formatXmlFileName("%sMapper")//格式化xml文件名称.build().serviceBuilder()//service文件策略.formatServiceFileName("%sService")//格式化 service 接口文件名称.formatServiceImplFileName("%sServiceImpl")//格式化 service 接口文件名称.build().controllerBuilder()//控制层策略//.enableHyphenStyle()开启驼峰转连字符,默认:false.enableRestStyle()//开启生成@RestController.formatFileName("%sController")//格式化文件名称.build();/*至此,策略配置才算基本完成!*//*** 将所有配置项整合到AutoGenerator中进行执行*/generator.global(global).template(template)
//                .injection(injectionConfig).packageInfo(packages).strategy(strategyConfig).execute();}
}

执行完成后即可看到我们相关的文件已经全部生成,并且注解,介绍已经基本到位。这样就能为我们的开发节省很多时间。 

 四,新旧代码生成器简单分析及补充

4.1,源码上的简单分析

通过源码可以看到旧版本是通过实现不同配置类的实现类,实列化后的配置对象陆续设置我们所需要的配置后,最后通过AutoGenerator 执行execute方法实现。

 但是新版本的代码生成器明显有了结构上的变化。

 很多配置类采用单例模式的方法,用pricate修饰了构造器,主要用于执行代码生成器的AutoGenerator类必须通过将配置好的DataSourceConfig类传给它才能实现实列化,也就是说优先处理数据源配置。至于其他策略,全局配置则采用了建造者模式,通过Bulider().Build()来进行配置类实例化。这样在一些ture or false的配置上省了很多功夫,用户需要使用时就调用其方法即可,不用设置true or false。发挥了单例模式和建造者模式的优势,值得我们学习参考。

4.2,模板配置TemplateConfig说明。

模板配置决定了代码生成的代码模板,一般情况下导入了模板引擎,然后执行模板配置即可,不需要我们额外自己配置。当然,该类也可以让我们自定义模板配置,可以 copy 源码 mybatis-plus/src/main/resources/template 下面内容修改, 放置到自己的项目src/main/resources/template 目录下。当然这个笔者没有过多研究,大家去自行参考学习。

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

4.3,注入配置(InjectionConfig)说明

新版的代码生成器并未有过多说明,但是不配置并不会影响代码生成的正常执行,官方旧版上有一定的使用说明,可供大家学习参考。

如有不足之处欢迎指出~

补充

有小伙伴反馈mapper.xml文件一直在java下的目录生成,放在资源目录下需要Ctrl+X,V比较麻烦,不做修改就得在pom中配置build,导出src/main/java下的mapper.xml文件,上面我已作出修改了,在包配置下自定义xml文件生成路径即可。
pathInfo(Collections.singletonMap(OutputFile.mapperXml, projectPath + "/src/main/resources/mapper"))
最后给出一个通用的生成代码到这给大家使用,基于指定数据库,表名生成基本结构。但是其余基本的信息还是要根据个人配置。比之前那个更为简洁
public class CodeGeneration {/*** 根据表名生成相应结构代码* @param databaseName 数据库名* @param tableName 表名*/public static void Generation(String databaseName,String... tableName){FastAutoGenerator.create("jdbc:mysql://localhost:3306/"+databaseName+"?&useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai","root","123456").globalConfig(builder -> {builder.author("young")//启用swagger//.enableSwagger()//指定输出目录.outputDir(System.getProperty("user.dir")+"/src/main/java");}).packageConfig(builder -> {builder.entity("entity")//实体类包名.parent("com.yy")//父包名。如果为空,将下面子包名必须写全部, 否则就只需写子包名.controller("controller")//控制层包名.mapper("dao")//mapper层包名//.other("dto")//生成dto目录 可不用 .service("service")//service层包名.serviceImpl("service.impl")//service实现类包名//自定义mapper.xml文件输出目录.pathInfo(Collections.singletonMap(OutputFile.mapperXml,System.getProperty("user.dir")+"/src/main/resources/mapper"));}).strategyConfig(builder -> {//设置要生成的表名builder.addInclude(tableName).addTablePrefix("sys_")//设置表前缀过滤.entityBuilder().enableLombok().enableChainModel().naming(NamingStrategy.underline_to_camel)//数据表映射实体命名策略:默认下划线转驼峰underline_to_camel.columnNaming(NamingStrategy.underline_to_camel)//表字段映射实体属性命名规则:默认null,不指定按照naming执行.idType(IdType.AUTO)//添加全局主键类型.formatFileName("%s")//格式化实体名称,%s取消首字母I,.mapperBuilder().enableMapperAnnotation()//开启mapper注解.enableBaseResultMap()//启用xml文件中的BaseResultMap 生成.enableBaseColumnList()//启用xml文件中的BaseColumnList.formatMapperFileName("%sMapper")//格式化Dao类名称.formatXmlFileName("%sMapper")//格式化xml文件名称.serviceBuilder().formatServiceFileName("%sService")//格式化 service 接口文件名称.formatServiceImplFileName("%sServiceImpl")//格式化 service 接口文件名称.controllerBuilder().enableRestStyle();})
//                .injectionConfig(consumer -> {
//            Map<String, String> customFile = new HashMap<>();
//            // 配置DTO(需要的话)但是需要有能配置Dto的模板引擎,比如freemarker,但是这里我们用的VelocityEngine,因此不多作介绍
//            customFile.put("DTO.java", "/templates/entityDTO.java.ftl");
//            consumer.customFile(customFile);
//           }).execute();}
}

 


http://chatgpt.dhexx.cn/article/HJTquLZW.shtml

相关文章

快速上手若依代码生成器(2022)

文章目录 前言一、启动若依框架二、使用代码生成器1 导入示例表2 使用自带的代码生成 生成zip文件2.1 Illegal mix of collations报错解决 三 把zip文件的内容粘贴到对应的模块中3.1 粘贴后台代码3.2 粘贴前台代码3.3 运行菜单sql语句 四 重新启动前端后端总结 前言 快速上手使…

若依代码生成器的使用

一、代码生成器的使用 1.新建maven模块 原则上&#xff0c;我们的业务代码和若依系统本身的系统代码是要做隔离的&#xff0c;一方面是易于之后随着若依系统升级而升级&#xff0c;另一方面则是纯粹的合理性考虑。 这里新建一个ruoyi-business模块作为业务代码模块&#xff0c;…

Java代码生成器

项目说明 本项目基于是基于 renren-generator 定制的代码生成器 文章目录 **项目说明**不同点&#xff1a;效果原理分析如何定制开发&#xff1f;更多可能存在的坑代码地址 不同点&#xff1a; 因为本人的公司使用的是 tkmyabtis swagger 构建 rest api,而 renren-generator…

手把手带你实现一个代码生成器

前言 不知各位看官在工作之中有没有陷入过疯狂CV代码、看着密密麻麻的类不想动手&#xff0c;或者把大把的时间花费在底层的情况。以笔者为例&#xff0c;会经常遇到以下两个问题&#xff1a; 隔一段时间就需要构建一个新应用&#xff0c;需要各种复制粘贴&#xff08;缺乏定…

代码生成器 ----一个独立的代码生成器

这里我就没有过多发废话了&#xff0c;直接给正文。下面是代码生成器的一些简单介绍。操作简单没啥难度。 下面是生成器的地址&#xff0c;谢谢您的使用↓ 代码生成器点这儿。 一、基于简单的数据库属性连接 二、浏览器缓存连接历史 1、可以选择历史连接 2、可以清空所有浏…

如何自定义代码生成器(上)

1 概述 1.1 介绍 ​ 在项目开发过程中&#xff0c;有很多业务模块的代码是具有一定规律性的&#xff0c;例如controller控制器、service接口、service实现类、mapper接口、model实体类等等&#xff0c;这部分代码可以使用代码生成器生成&#xff0c;我们就可以将更多的时间放…

Java快速开发之代码生成器

1、代码生成器原理分析 观察我们之前写的代码&#xff0c;会发现其中也会有很多重复内容&#xff0c;比如: 那我们就想&#xff0c;如果我想做一个Book模块的开发&#xff0c;是不是只需要将红色部分的内容全部更换成Book即可&#xff0c;如&#xff1a; 所以我们会发现&#…

代码生成器

目录 引言 1 第一种 1.0 pom依赖 1.1 第一步&#xff1a;配置文件 1.2 第二步&#xff1a;代码生成器 1.3 执行生成 引言 代码生成器&#xff0c;遇到过也使用过很多了&#xff0c;用的时候觉得很简单&#xff0c;但是这个玩意不是开个新项目几乎很少碰到&#xff0c;所…

推荐几个代码自动生成器,神器!!!

20个代码生成框架 老的代码生成器的地址&#xff1a;https://www.cnblogs.com/skyme/archive/2011/12/22/2297592.html 以下是大家推荐的最近很火爆的代码生成器神器。如果有更好的希望大家多多留言&#xff0c;我会及时补充上去。 -------------------------更新补充------…

代码生成器AutoGenerator

简介&#xff1a;AutoGenerator 是 MyBatis-Plus 的代码生成器&#xff0c;通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码&#xff0c;极大的提升了开发效率。 简介 | MyBatis-Plus 一、如何使用&#xff1a; 1&#x…

代码生成器-mybatis-plus-generator

我们平时在开发的过程中&#xff0c;对于新建的一张表难免会有对其进行增删改查的操作&#xff0c;而且还要写Controller、service、Mapper、Mapper.xml、PO、VO等等。如果每次都要去写这些跟业务毫不相干但是却又耗时耗力的重复代码这不仅是让开发人员不能专注于业务逻辑甚至可…

HM2022ssm-mp5【MP代码生成器】

1. 代码生成器原理分析 1.1 造句: 我们可以往空白内容进行填词造句&#xff0c;比如: 在比如: 再有&#xff1a; 1.2 观察我们之前写的代码&#xff0c;会发现其中也会有很多重复内容&#xff0c;比如: 那我们就想&#xff0c;如果我想做一个Book模块的开发&#xff0c;是不是只…

MyBatis-Plus——代码生成器的使用

MyBatis-Plus——代码生成器的使用 AutoGenerator 是 MyBatis-Plus 的代码生成器&#xff0c;通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码&#xff0c;极大的提升了开发效率。 导入依赖 <dependency><groupI…

推荐几个代码自动生成器,神器

20个代码生成框架 老的代码生成器的地址&#xff1a;https://www.cnblogs.com/skyme/archive/2011/12/22/2297592.html 以下是大家推荐的最近很火爆的代码生成器神器。如果有更好的希望大家多多留言&#xff0c;我会及时补充上去。 2.0 WebFirst .NET Core代码生成器 全新的.…

Mybatis-Plus自动生成代码,自定义Controller

MP网址&#xff1a;https://baomidou.com/pages/779a6e/#%E4%BD%BF%E7%94%A8 直接copy官网代码修改成自己的&#xff1a; private void generate() {FastAutoGenerator.create("jdbc:mysql://localhost:3306/test?serverTimezoneGMT%2b8", "root", "…

Oracle数据库的下载与安装教程详解

前言 由于新公司的开发需要用到Oracle数据库&#xff0c;但是自己之前很少接触Oracle&#xff0c;自然也就没有安装Oracle数据库&#xff0c;所以在自己亲自下载安装的时候&#xff0c;就顺便整理成一篇笔记。 一、Oracle的下载 首先&#xff0c;任何软件的下载都推荐自己去官…

【详细】Oracle数据库安装教程--Oracle DataBase 19c

目录 前言/背景1、下载Oracle 19c数据库1. Oracle官网下载2. 网盘下载3. 安装及使用 2、Oracle管理工具 前言/背景 Oracle Database 19c 是最新的长期版本&#xff0c;支持期限最长&#xff1b; 19.3 - 企业版&#xff08;也包括标准版 2&#xff09; 适用于WINDOWS X64位系统。…

Oracle数据库的学习

初始第一步&#xff1a;打开计算机管理---找到服务---打开Oracle实例和Oracle监听器。 1.在命令提示窗口中输入sqlplus&#xff0c;然后进入数据库设置页面大小&#xff1a; 2.切换用户&#xff1a; 3. run相当于/ &#xff0c;D:\999.sql 这是运行脚本的指令&#xff1b; 4. …

Oracle 高级教程

目录 一、Oracle体系结构的概览... 2 二、Oracle高级查询... 10 三、Oracle触发器... 18 四、Oracle存储过程... 26 五、Oracle事务... 30 六、Oracle锁... 37 七、Oracle包... 40 八、Oracle游标... 42 九、Oracle函数... 47 十、Oracle备份与恢复... 129 十一、Or…