Mybatisplus自动生成代码

news/2025/2/23 4:12:30/文章来源:https://www.cnblogs.com/qiixunlu/p/18725066

第一Maven中添加依赖

点击查看代码
<!-- MyBatis-Plus 扩展库 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-extension</artifactId><version>3.5.7</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.4.1</version></dependency><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.30</version></dependency><dependency><groupId>com.spring4all</groupId><artifactId>spring-boot-starter-swagger</artifactId><version>1.5.1.RELEASE</version></dependency>
详细信息请查看:https://baomidou.com/introduce/

第二添加代码生成器代码
文件格式:
具体代码如下

点击查看代码
package com.example.demo.common;import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class CodeGenerator {/*** <p>*读取控制台内容* </p>*/public static String scanner(String tip) {Scanner scanner = new Scanner(System.in);StringBuilder help = new StringBuilder();help.append("请输⼊" + tip + ":");System.out.println(help.toString());if (scanner.hasNext()) {String ipt = scanner.next();if (StringUtils.isNotBlank(ipt)) {return ipt;}}throw new MybatisPlusException("请输⼊正确的" + tip + "!");}/***操作步骤:*  1.修改数据源包括地址密码信息,对应代码标记:⼀、 下同*  2.模块配置,可以修改包名*  3.修改模板(这步可忽略)* @param args*/public static void main(String[] args) {//代码⽣成器AutoGenerator mpg = new AutoGenerator();//全局配置GlobalConfig gc = new GlobalConfig();String projectPath = System.getProperty("user.dir");gc.setOutputDir(projectPath + "/src/main/java");gc.setAuthor("wms");//作者名称gc.setOpen(false);gc.setSwagger2(true); //实体属性 Swagger2 注解gc.setBaseResultMap(true);// XML ResultMapgc.setBaseColumnList(true);// XML columList//去掉service接⼝⾸字⺟的I, 如DO为User则叫UserServicegc.setServiceName("%sService");mpg.setGlobalConfig(gc);//数据源配置//⼀、修改数据源DataSourceConfig dsc = new DataSourceConfig();//dsc.setUrl("jdbc:mysql://localhost:3306/wns?useUnicode=true&characterEncoding=UTF8&useSSL=false");// dsc.setSchemaName("public");dsc.setDriverName("com.mysql.cj.jdbc.Driver");dsc.setUsername("root");dsc.setPassword("1234");mpg.setDataSource(dsc);//包配置PackageConfig pc = new PackageConfig();//pc.setModuleName(scanner("模块名"));//⼆、模块配置pc.setParent("com.example.demo").setEntity("entity").setMapper("mapper").setService("service").setServiceImpl("service.impl").setController("controller");mpg.setPackageInfo(pc);//⾃定义配置InjectionConfig cfg = new InjectionConfig() {@Overridepublic void initMap() {// to do nothing}};//如果模板引擎是 freemarkerString templatePath = "templates/mapper.xml.ftl";//如果模板引擎是 velocity// String templatePath = "/templates/mapper.xml.vm";//⾃定义输出配置List<FileOutConfig> focList = new ArrayList<>();//⾃定义配置会被优先输出focList.add(new FileOutConfig(templatePath) {@Overridepublic String outputFile(TableInfo tableInfo) {//⾃定义输出⽂件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发⽣变化!!return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()+ "/" + tableInfo.getEntityName() + "Mapper" +StringPool.DOT_XML;}});/*cfg.setFileCreate(new IFileCreate() {@Overridepublic boolean isCreate(ConfigBuilder configBuilder, FileType fileType,
String filePath) {//
判断⾃定义⽂件夹是否需要创建checkDir("调⽤默认⽅法创建的⽬录,⾃定义⽬录⽤");if (fileType == FileType.MAPPER) {//
已经⽣成 mapper ⽂件判断存在,不想重新⽣成返回 falsereturn !new File(filePath).exists();}//
允许⽣成模板⽂件return true;}});*/cfg.setFileOutConfigList(focList);mpg.setCfg(cfg);//配置模板TemplateConfig templateConfig = new TemplateConfig();//三、修改模板配置⾃定义输出模板//指定⾃定义模板路径,注意不要带上.ftl/.vm, 会根据使⽤的模板引擎⾃动识别///*templateConfig.setEntity("templates/entity2.java");templateConfig.setService("templates/service2.java");templateConfig.setController("templates/controller2.java");templateConfig.setMapper("templates/mapper2.java");templateConfig.setServiceImpl("templates/serviceimpl2.java");*/templateConfig.setXml(null);mpg.setTemplate(templateConfig);//策略配置StrategyConfig strategy = new StrategyConfig();strategy.setNaming(NamingStrategy.underline_to_camel);strategy.setColumnNaming(NamingStrategy.underline_to_camel);// strategy.setSuperEntityClass("你⾃⼰的⽗类实体,没有就不⽤设置!");//strategy.setSuperEntityClass("BaseEntity");strategy.setEntityLombokModel(true);strategy.setRestControllerStyle(true);//公共⽗类//strategy.setSuperControllerClass("BaseController");// strategy.setSuperControllerClass("你⾃⼰的⽗类控制器,没有就不⽤设置!");//写于⽗类中的公共字段// strategy.setSuperEntityColumns("id");strategy.setInclude(scanner("表名,多个英⽂逗号分割").split(","));strategy.setControllerMappingHyphenStyle(true);//strategy.setTablePrefix(pc.getModuleName() + "_");//忽略表前缀tb_,⽐如说tb_user,直接映射成user对象//四、注意是否要去掉表前缀//strategy.setTablePrefix("tb_");mpg.setStrategy(strategy);mpg.setTemplateEngine(new FreemarkerTemplateEngine());mpg.execute();}
}
Ps:其中父类的使用以及注释,如要使用请结合https://baomidou.com/introduce/修改

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/886829.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LinkedBlockingQueue的poll方法底层原理

一、LinkedBlockingQueue的poll方法底层原理 LinkedBlockingQueue 的 poll 方法用于从队列头部移除并返回元素。如果队列为空,poll 方法会立即返回 null,而不会阻塞线程 1、poll 方法的作用从队列头部移除并返回元素。如果队列为空,立即返回 null。该方法是非阻塞的,适用于…

【R3 RootKit 病毒】基础知识研究

# 恶意样本 # RootKit RootKit简介 RootKit是一种特殊的恶意软件,它的功能是在安装目标上隐藏自身及指定的文件、进程和网络连接等信息,比较多见到的是Rootkit一般都和木马、后门等恶意程序结合使用。 技术研究入门 一般的恶意程序使用RootKit技术,主要功能分为下面两类: (…

vscode配置免密登录

Host 192.168.233.130HostName 192.168.233.130User rootPort 22IdentityFile C:\\Users\\username\\.ssh\\id_rsa

Camstar设置textbox只允许扫码

😘宝子:除非不再醒来,除非太阳不再升起,不然都请你好好生活,挣扎着前进,开心的笑。(●◡●)

虚幻GameAbilitySystem源码与设计解析-GameEffectComponent的实现

// 版权所有(c)Epic Games, Inc. 保留所有权利。#pragma once#include "CoreMinimal.h" #include "GameplayEffectComponent.generated.h"struct FActiveGameplayEffect; struct FActiveGameplayEffectsContainer; struct FGameplayEffectSpec; struct F…

建筑遗产的保护与活化利用:历史与现代的和谐交响

在时间的长河中,建筑遗产是凝固的记忆,承载着历史的厚重与文化的底蕴。如何在尊重与保护的前提下,让这些古老建筑焕发新生,融入现代生活,成为富有功能性和时代感的场所,是当代建筑设计面临的一大挑战。 1. 尊重历史,理解遗产价值一切活化利用的出发点,首先是深入研究与…

使用crewai创建属于你自己的AI团队

crewai介绍 CrewAI 是一个用于协调自主 AI 代理的前沿框架。 CrewAI 允许你创建 AI 团队,其中每个代理都有特定的角色、工具和目标,协同工作以完成复杂任务。 把它想象成组建你的梦之队——每个成员(代理)都带来独特的技能和专业知识,无缝协作以实现你的目标。 最近使用了…

解决 element-ui table表格内容上下垂直居中的解决方法

没处理的时候是不是看着很丑只需要在需要处理的 el-table-column 标签中添加 className 然后设置样式为 vertical-align: top; 完整代码 : 然后增加对应的样式<style>.el-table .my-store-management-cell {vertical-align: top;} </style>然后就可以了

老年人19

老年人项目大概情况效果展示

Vulnhub-kioptix2014靶机getshell及提权

靶机搭建 点击扫描虚拟机然后扫描文件夹即可信息收集 扫描ip nmap扫描得到目标靶机ip nmap -sn 192.168.108.0/24故 攻击机:192.168.108.130 目标靶机:192.168.108.140扫端口和服务信息 扫描开放端口信息 nmap -p 1-65535 192.168.108.140可用信息 22/tcp closed ssh …

自然资源数据促进数字化治理能力提升

在数字化时代,自然资源数据作为国家治理体系和治理能力现代化的重要支撑,其开发利用对于推动经济社会高质量发展具有重要意义。本文将从测绘地理信息与遥感专业的角度,探讨如何推动自然资源数据要素的开发利用,以促进数字化治理能力的提升。 一、自然资源数据要素的重要性自…

老年人11

编写日常评估表的servlet层代码