MybatisPlus逆向工程入门指南:让你的开发更高效、更简洁、更优雅

学会了,可以看看这篇文章:更新中~

正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的。

逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下资源:

Java实体类

Mapper接口

Mapper配置文件

Service接口及ServiceImpl实现类

Controller类

MybatisPlus是一个强大的持久层框架,它可以让你的数据库操作更加方便、高效和优雅。但是,如果你要手动编写实体类、Mapper接口和配置文件,那么你可能会觉得很繁琐、重复和容易出错。有没有一种方法可以让你自动地生成这些代码呢?答案是肯定的,那就是MybatisPlus的逆向工程功能。

MybatisPlus的逆向工程可以根据你的数据库表结构,自动生成对应的实体类、Mapper接口和配置文件,从而节省你的时间和精力,提高你的开发效率。你只需要简单地配置一些参数,就可以轻松地完成这个过程。而且,MybatisPlus的逆向工程还支持多种数据库类型,如MySQL、Oracle、SQL Server等,以及多种代码风格,如Lombok、ActiveRecord等,让你可以根据自己的需求进行定制。

在这篇博客中,我将通过一个完整的示例教程,带你一步步地掌握这个强大的功能。无论你是MybatisPlus的初学者还是老手,我相信你都能从中受益。如果你对这个主题感兴趣,请继续阅读吧!

目录

步骤一:在Pom.xml文件中添加依赖

步骤二:在application.yml文件中编写数据库信息

步骤三:编写handler处理器类

步骤四:编写mybatisPlusconfig配置文件

步骤五:编写代码生成器类


步骤一:在Pom.xml文件中添加依赖

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| <!-- 数据库驱动 --> <dependency > <groupId >mysql</groupId > <artifactId >mysql-connector-java</artifactId > </dependency > <!-- lombok --> <dependency > <groupId >org.projectlombok</groupId > <artifactId >lombok</artifactId > </dependency > <!-- mybatis-plus --> <!-- mybatis-plus 是自己开发,并非官方的! --> <dependency > <groupId >com.baomidou</groupId > <artifactId >mybatis-plus-boot-starter</artifactId > <version >3.0.5</version > </dependency > <!-- MyBatis-Plus 从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖并添加 模板引擎 依赖 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.0.5</version> </dependency> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.0</version> </dependency> |

步骤二:在application.yml文件中编写数据库信息

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| spring : datasource : driver-class-name : com.mysql.cj.jdbc.Driver url : jdbc:mysql://localhost:3306/else?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF8 username : root password : 123 profiles : active : dev mybatis-plus : configuration : log-impl : org.apache.ibatis.logging.stdout.StdOutImpl map-underscore-to-camel-case : true mapper-locations : classpath:com/example/demo/mapper/xml/*.xml # 配置逻辑删除 global-config : db-config : logic-delete-value : 1 logic-not-delete-value : 0 |

步骤三:编写handler处理器类

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| @MapperScan("com.example.demo" ) @EnableTransactionManagement @Configuration public class MyBatisPlusConfig { // 注册乐观锁插件 @Bean public OptimisticLockerInterceptor optimisticLockerInterceptor() { return new OptimisticLockerInterceptor(); } // 逻辑删除组件! @Bean public ISqlInjector sqlInjector() { return new LogicSqlInjector(); } /** * SQL 执行效率插件 */ @Bean @Profile({"dev" ,"test" })// 设置 dev test 环境开启,保证我们的效率 public PerformanceInterceptor performanceInterceptor() { PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor(); performanceInterceptor.setMaxTime(1000); // ms 设置 sql 执行的最大时间,如果超过了则不执行 performanceInterceptor.setFormat(true ); // 是否格式化代码 return performanceInterceptor; } } |

步骤四:编写mybatisPlusconfig配置文件

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| @Slf4j @Component // 一定不要忘记把处理器加到 IOC 容器中! public class MyMetaObjectHandler implements MetaObjectHandler { // 插入时的填充策略 @Override public void insertFill(MetaObject metaObject) { // setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject this .setFieldValByName("gmtCreate" ,new Date(),metaObject); this .setFieldValByName("gmtModified" ,new Date(),metaObject); } // 更新时的填充策略 @Override public void updateFill(MetaObject metaObject) { this .setFieldValByName("gmtModified" ,new Date(),metaObject); } } |

步骤五:编写代码生成器类

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| public class AutoClass { public static void main(String[] args) { // 需要构建一个 代码自动生成器 对象 AutoGenerator mpg = new AutoGenerator(); // 配置策略 // 1 、全局配置 GlobalConfig gc = new GlobalConfig(); String projectPath = System.getProperty("user.dir" );// 不用改,表示获取当去用户 gc.setOutputDir(projectPath+"/src/main/java" );// 不用改,表示项目路径 gc.setAuthor(" 高垚淼 " ); // 作者名 gc.setOpen(false ); // 创建后是否打开目录,没必要 gc.setFileOverride(false ); // 重名文件是否覆盖 gc.setServiceName("%sService" ); // Service I 前缀 gc.setIdType(IdType.ID_WORKER ); // 表示 id 的生成策略,默认是雪花算法 gc.setDateType(DateType.ONLY_DATE ); // 表示时间默认采用 date 类型,秒级别以上转 datetime 不会存在精度丢失 gc.setSwagger2(true ); // 开启后自动添加相关注解,方便生成 API 文档 mpg.setGlobalConfig(gc); // 设置以上配置作用于全局 //2 、设置数据源 DataSourceConfig dsc = new DataSourceConfig(); dsc.setUrl("jdbc:mysql://localhost:3306/else?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8" ); dsc.setDriverName("com.mysql.cj.jdbc.Driver" ); dsc.setUsername("root" ); dsc.setPassword("123" ); dsc.setDbType(DbType.MYSQL ); // 根据不同数据库进行适配 mpg.setDataSource(dsc); //3 、包的配置 PackageConfig pc = new PackageConfig(); pc.setModuleName("demo" ); // 设置在哪个项目名 pc.setParent("com.example" ); // 设置在那个 com. 公司名 pc.setEntity("entity" ); pc.setMapper("mapper" ); pc.setService("service" ); pc.setController("controller" ); mpg.setPackageInfo(pc); //4 、策略配置 StrategyConfig strategy = new StrategyConfig(); strategy.setInclude("stu" ,"course" ,"score" ,"stu_course" ); // 设置要映射的表名 strategy.setNaming(NamingStrategy.underline_to_camel ); // 设置开启驼峰命名 , 将数据库中的表 _ 转为 java 驼峰命名 strategy.setColumnNaming(NamingStrategy.underline_to_camel ); // 设置开启驼峰命名,将数据库表中的属性 _ 转为 java 驼峰命名 strategy.setEntityLombokModel(true ); // 自动 lombok strategy.setLogicDeleteFieldName("deleted" ); // 在逻辑删除属性上加注解 // 自动填充配置 TableFill gmtCreate = new TableFill("gmt_create" , FieldFill.INSERT ); // 设置自动填充时的策略 TableFill gmtModified = new TableFill("gmt_modified" , FieldFill.INSERT_UPDATE ); ArrayList<TableFill> tableFills = new ArrayList<>(); tableFills.add(gmtCreate); tableFills.add(gmtModified); strategy.setTableFillList(tableFills); // 乐观锁 strategy.setVersionFieldName("version" ); // 在乐观锁属性上加注解 strategy.setRestControllerStyle(true ); // 设置返回实体,这里要注意,如果要后端返回 excel 表格,这里要 false strategy.setControllerMappingHyphenStyle(true ); // 设置 Controller 的请求路径开启驼峰命名 mpg.setStrategy(strategy); mpg.execute(); // 执行 } } |

到这步运行这个类,就能自动生成mapper、service、controller、entity包及对应类了,大大提高了开发 效率!

相关推荐
草原印象6 天前
Spring Boot Spring MVC MyBatis MyBatis Plus框架编写项目实战案例
spring boot·spring·mybatis·springmvc·mybatisplus
tgethe7 天前
MybatisPlus基础部分详解(中篇)
java·spring boot·mybatisplus
tgethe7 天前
MybatisPlus基础部分详解(上篇)
java·spring boot·mybatisplus
tgethe7 天前
MybatisPlus基础部分详解(下篇)
java·spring boot·mybatisplus
Eloudy1 个月前
一个逆向工具 Ghidra 在 Linux 上的安装和基本使用
逆向工程
小葱拌豆腐~2 个月前
ShardingJDBC整合MybatisPlus的动态数据源
mybatisplus·动态数据源·shardingjdbc
色空大师2 个月前
【mybatisPlus详解】
java·mybatis·mybatisplus
Roye_ack2 个月前
【黑马点评 - 实战篇01】Redis项目实战(Windows安装Redis6.2.6 + 发送验证码 + 短信验证码登录注册 + 拦截器链 - 登录校验)
数据库·spring boot·redis·缓存·mybatisplus·session·黑马点评
sniper_fandc2 个月前
MybatisPlus和pagehelper分页冲突—关于jsqlparser、pagehelper、MybatisPlus三者的版本兼容问题
mybatis·mybatisplus
sniper_fandc2 个月前
关于Mybatis-Plus的insertOrUpdate()方法使用时的问题与解决—数值精度转化问题
java·前端·数据库·mybatisplus·主键id