MybatisPlus逆向生成实体类等

面试中遇到的一道机操题,so simple。

这是里SpringBoot项目,注意你的数据表中只有一个id字段是会生成失败的!

添加maven依赖

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.1.1</version>
</dependency>
<!--添加 代码生成器 依赖-->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.1.1</version>
</dependency><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.1</version>
</dependency><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.28</version>
</dependency>

逆向生成数据库表对应的实体类等代码,注意,默认生成的实体类等,要手动添加到Spring中。

package com.example.demo.demos.web;import com.baomidou.mybatisplus.annotation.DbType;
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.converts.MySqlTypeConvert;
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.*;public class CodeGenerator {/*** 读取控制台内容*/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.isNotEmpty(ipt)) {return ipt;}}throw new MybatisPlusException("请输入正确的" + tip + "!");}public static void main(String[] args) {/*** 代码生成器*/AutoGenerator mpg = new AutoGenerator();/*** 全局配置*/GlobalConfig globalConfig = new GlobalConfig();//生成文件的输出目录String projectPath = System.getProperty("user.dir");globalConfig.setOutputDir(projectPath + "/src/main/java");//Author设置作者globalConfig.setAuthor("李义新");//是否覆盖文件globalConfig.setFileOverride(true);//生成后打开文件globalConfig.setOpen(false);mpg.setGlobalConfig(globalConfig);/*** 数据源配置*/DataSourceConfig dataSourceConfig = new DataSourceConfig();// 数据库类型,默认MYSQLdataSourceConfig.setDbType(DbType.MYSQL);//自定义数据类型转换dataSourceConfig.setTypeConvert(new MySqlTypeConvert());dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8&useSSL=false&serverTimezone=UTC");dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");dataSourceConfig.setUsername("root");dataSourceConfig.setPassword("Li123456.");mpg.setDataSource(dataSourceConfig);/*** 包配置*/PackageConfig pc = new PackageConfig();pc.setModuleName(scanner("模块名"));//父包名。如果为空,将下面子包名必须写全部, 否则就只需写子包名pc.setParent("com.example.demo");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.setFileOutConfigList(focList);mpg.setCfg(cfg);/*** 配置模板*/TemplateConfig templateConfig = new TemplateConfig();// 配置自定义输出模板//指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别// templateConfig.setEntity("templates/entity2.java");// templateConfig.setService();// templateConfig.setController();templateConfig.setXml(null);mpg.setTemplate(templateConfig);/*** 策略配置*/StrategyConfig strategy = new StrategyConfig();//设置命名格式strategy.setNaming(NamingStrategy.underline_to_camel);strategy.setColumnNaming(NamingStrategy.underline_to_camel);strategy.setInclude(scanner("AA,BB,CC,DD").split(","));//实体是否为lombok模型(默认 false)strategy.setEntityLombokModel(true);//生成 @RestController 控制器strategy.setRestControllerStyle(true);//设置自定义继承的Entity类全称,带包名//strategy.setSuperEntityClass("com.jiangfeixiang.mpdemo.BaseEntity");//设置自定义继承的Controller类全称,带包名//strategy.setSuperControllerClass("com.jiangfeixiang.mpdemo.BaseController");//设置自定义基础的Entity类,公共字段strategy.setSuperEntityColumns("id");//驼峰转连字符strategy.setControllerMappingHyphenStyle(true);//表名前缀strategy.setTablePrefix(pc.getModuleName() + "_");mpg.setStrategy(strategy);mpg.setTemplateEngine(new FreemarkerTemplateEngine());mpg.execute();}
}

 

 

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

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

相关文章

DataFun:数据基础架构

翼支付 数据向量化 经营范围是否相同 背景特征提取器 质量过滤通用背景过滤预制场景标记 虚假地址风险分析 CCKS地址解析标签体系 FaissMilvus余弦相似度 Zilliz 大模型幻觉问题 极限科技

STM32——MCU简单介绍

文章目录 一、单片机基础简介1.MCU简介&#xff08;1&#xff09;MCU的组成&#xff08;2&#xff09;常见的MCU 2.STM32简介&#xff08;1&#xff09;STM32&STM8产品型号--各个字母的含义 3.如何查手册&#xff08;1&#xff09;数据手册芯片信息总线框图时钟树内存映射 …

网络安全如何6个月成功上岸?

学前感言: 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了. 2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发. 3.有时多 google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答. 4.遇到实在搞不懂的,可以先放放,以后再来解…

华为OD计算工时python脚本

前言 刚入职不知道工时要平均每天满8小时&#xff0c;并且看不到每天的实际工时&#xff0c;一气之下花了一个中午写了个脚本计算每天的工时&#xff0c;分享一下&#xff0c;不同地区的兄弟需要修改一下午休和晚饭时间才能使用。 文件位置 把welink上 上下班时间输入work.c…

使用GTK创建简易计算器

使用GTK创建简易计算器 本文将介绍如何使用GTK&#xff08;GIMP Toolkit&#xff09;创建一个简单的计算器应用程序。通过这个例子&#xff0c;你将学习如何构建基本的图形用户界面&#xff0c;并了解GTK的一些常用组件和回调函数的使用。 准备工作 首先&#xff0c;确保你已…

redis如何实现持久化

RDB快照 RDB是一种快照存储持久化方式&#xff0c;具体就是将Redis某一时刻的内存数据保存到硬盘的文件当中&#xff0c;默认保存的文件名为dump.rdb&#xff0c;而在Redis服务器启动时&#xff0c;会重新加载dump.rdb文件的数据到内存当中恢复数据。 开启RDB持久化方式 开启…

【CEEMDAN-WOA-LSTM】完备集合经验模态分解-鲸鱼优化-长短时记忆神经网络研究(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

MATLAB 之 可视化图形用户界面设计

这里写目录标题 一、可视化图形用户界面设计1. 图形用户界面设计窗口1.1 图形用户界面设计模板1.2 图形用户界面设计窗口 2. 可视化图形用户界面设计工具1.1 对象属性检查器2.2 菜单编辑器2.3 工具栏编辑器2.4 对齐对象工具2.5 对象浏览器2.6 Tab 键顺序编辑器 3. 可视化图形用…

[毕业设计baseline]tkinter+flask的毕业设计开发baseline

一.前言 最近开发了一个结合了tkinter和flask框架的GUI页面服务器。目前可以想到的开发方向有。 1.基于python的局域网聊天系统。 2.服务器管理系统。 3.网络安全防御系统。 接下来就来介绍一下这个框架以及开发方向的详细思路。如果计算机专业的本科毕业生感兴趣可以用pyt…

基于单片机的蓝牙音乐喷泉的设计与实现

功能介绍 以51单片机作为主控系统&#xff1b;通过HM-18蓝牙音频模块进行无线传输&#xff1b; 通过LM386功放模块对音频信号进行放大&#xff1b;手机端可以直接控制音频播放&#xff0c;并且最远距离可达20米&#xff1b;手机端可以进行任意音乐切换&#xff0c;播报、暂停&a…

记一次阿里云被挖矿处理记录

摘要 莫名其妙的服务器就被攻击了&#xff0c;又被薅了羊毛&#xff0c;当做免费的挖矿劳动力了。 一、起因 上班&#xff08;摸鱼&#xff09;好好的&#xff0c;突然收到一条阿里云的推送短信&#xff0c;不看不知道&#xff0c;两台服务器被拉去作为苦力&#xff0c;挖矿去…

具备捕获 Web2 用户能力的 PoseiSwap,治理通证$POSE再度涨超 360%

Nautilus Chain 是行业内首个模块化 Layer3 架构链&#xff0c;开发者能够基于模块化进行定制化开发&#xff0c;并有望进一步推动 Web3 应用向隐私、合规等方向发展。当然&#xff0c;Nautilus Chain 的特殊之处还在于为生态用户带来丰厚的空投预期&#xff0c;据悉上线 Nauti…