开发工具:Mybatis.Plus.插件三种方式的逆向工程
本文源码:GitHub·点这里 || GitEE·点这里
一、逆向工程简介
在Java开发中,持久层最常用的框架就是mybatis,该框架需要编写sql语句,mybatis官方提供逆向工程,可以把数据表自动生成执行所需要的基础代码,例如:mapper接口,sql映射文件,pojo实体类等,避免基础代码维护的繁杂过程。

在实际的使用中,常用的逆向工程方式如上,mybatis框架,mybatis-plus框架,插件方式。
二、Mybatis方式
1、基础描述
基于xml配置的方式,生成mybatis基础代码,包括mapper接口,Mapper映射文件,pojo实体类,PojoExample条件工具类。
2、配置文件
注意这里的targetProject需要配置自定义路径位置。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<context id="testTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true"/>
<property name="suppressDate" value="false"/>
<!-- 是否添加数据表中字段的注释 true:是 : false:否 -->
<property name="addRemarkComments" value="true"/>
</commentGenerator>
<!--数据库的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/defined-log?tinyInt1isBit=false"
userId="root" password="123456">
</jdbcConnection>
<!--
默认false,把JDBC decimal 和 numeric 类型解析为 Integer
设置true时把JDBC decimal 和 numeric 类型解析为BigDecimal
-->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 生成POJO类的位置 -->
<javaModelGenerator targetPackage="com.generator.mybatis.pojo"
targetProject="存放路径">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- 生成Mapper映射文件的位置 -->
<sqlMapGenerator targetPackage="com.generator.mybatis.xml"
targetProject="存放路径">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- 生成Mapper接口的位置 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.generator.mybatis.mapper"
targetProject="存放路径">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 指定数据库表 -->
<table schema="" tableName="dt_defined_log" domainObjectName="DefinedLog"/>
</context>
</generatorConfiguration>
3、启动类
读取配置文件,并执行。
public class GeneratorMybatis {
public void generator() throws Exception {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
File configFile = Resources.getResourceAsFile("generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,callback, warnings);
myBatisGenerator.generate(null);
}
public static void main(String[] args) throws Exception {
try {
GeneratorMybatis generatorMybatis = new GeneratorMybatis();
generatorMybatis.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}
三、MybatisPlus方式
1、基础描述
MybatisPlus相比Mybatis提供更多增强的能力,单表操作基本都封装好了,所以生成的mapper映射文件简洁很多,需要注意ServiceImpl关键类和BaseMapper接口。
2、核心启动类
这里的配置可以基于很多自定义的策略,案例生成的代码已经传到仓库,可以自行下载查看。
public class GeneratorMybatisPlus {
public static void main(String[] args) {
// 代码生成器
AutoGenerator autoGenerator = new AutoGenerator();
// 全局配置
GlobalConfig globalConfig = new GlobalConfig();
//生成文件的输出目录
String path="存放路径";
globalConfig.setOutputDir(path);
// Author设置作者
globalConfig.setAuthor("mybatis-plus");
// 文件覆盖
globalConfig.setFileOverride(true);
// 生成后打开文件
globalConfig.setOpen(false);
// 自定义文件名风格,%s自动填充表实体属性
globalConfig.setMapperName("%sMapper");
globalConfig.setXmlName("%sMapper");
globalConfig.setServiceName("%sDao");
globalConfig.setServiceImplName("%sDaoImpl");
globalConfig.setEntityName("%s");
globalConfig.setControllerName("%sController");
autoGenerator.setGlobalConfig(globalConfig);
// 数据源配置
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setDbType(DbType.MYSQL);
dataSourceConfig.setTypeConvert(new MySqlTypeConvert());
dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/defined-log?tinyInt1isBit=false");
dataSourceConfig.setDriverName("com.mysql.jdbc.Driver");
dataSourceConfig.setUsername("root");
dataSourceConfig.setPassword("123456");
autoGenerator.setDataSource(dataSourceConfig);
// 包名配置
PackageConfig packageConfig = new PackageConfig();
// 父包和子包名分开处理
packageConfig.setParent("com.generator.mybatis.plus");
packageConfig.setController("web");
packageConfig.setEntity("pojo");
packageConfig.setMapper("mapper");
packageConfig.setService("dao");
packageConfig.setServiceImpl("dao.impl");
autoGenerator.setPackageInfo(packageConfig);
// 生成策略配置
StrategyConfig strategy = new StrategyConfig();
//设置命名格式
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
// 实体是否为lombok模型,默认 false
strategy.setEntityLombokModel(true);
//生成 @RestController 控制器
strategy.setRestControllerStyle(true);
// 驼峰转连字符
strategy.setControllerMappingHyphenStyle(true);
//表和前缀处理
strategy.setInclude("dt_defined_log".split(","));
String[] tablePre = new String[]{"dt_"};
strategy.setTablePrefix(tablePre);
autoGenerator.setStrategy(strategy);
// 执行,以上相关参数可以基于动态输入获取
autoGenerator.execute();
}
}
该方式是当前mybatis框架最流行的开发方式,代码会简洁很多。
四、插件工具
1、配置数据库
这里选择MySQL数据源,后续根据提示需要下载驱动配置。

2、连接配置

Url地址,账号,密码,获取连接。
3、插件使用
这里选择的是安装EasyCode插件。

根据配置,生成逆向工程文件,整体思路和上述两种方式一致。
五、源代码地址
GitHub·地址
https://github.com/cicadasmile/data-manage-parent
GitEE·地址
https://gitee.com/cicadasmile/data-manage-parent
推荐阅读:编程体系整理
| 序号 | 项目名称 | GitHub地址 | GitEE地址 | 推荐指数 |
|---|---|---|---|---|
| 01 | Java描述设计模式,算法,数据结构 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
| 02 | Java基础、并发、面向对象、Web开发 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆ |
| 03 | SpringCloud微服务基础组件案例详解 | GitHub·点这里 | GitEE·点这里 | ☆☆☆ |
| 04 | SpringCloud微服务架构实战综合案例 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
| 05 | SpringBoot框架基础应用入门到进阶 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆ |
| 06 | SpringBoot框架整合开发常用中间件 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
| 07 | 数据管理、分布式、架构设计基础案例 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
| 08 | 大数据系列、存储、组件、计算等框架 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
开发工具:Mybatis.Plus.插件三种方式的逆向工程的更多相关文章
- iOS开发 跳转场景的三种方式
iOS开发 跳转场景的三种方式 2012年10月17日, 15:32 假设A跳转到B,三种方法:1.按住ctrl键,拖动A上的控件(比如说UIButton)到B上,弹出菜单,选择Modal.不需要写任 ...
- Java项目开发中实现分页的三种方式一篇包会
前言 Java项目开发中经常要用到分页功能,现在普遍使用SpringBoot进行快速开发,而数据层主要整合SpringDataJPA和MyBatis两种框架,这两种框架都提供了相应的分页工具,使用 ...
- mybatis查询的三种方式
查询最需要关注的问题:①resultType自动映射,②方法返回值: interface EmpSelectMapper: package com.atguigu.mapper; import ja ...
- Eclipse引入jar包的三种方式
引用自 http://chenxu.wo.blog.163.com/blog/static/50239687201162310620634/ 使用Eclipse开发应用程序,少不了使用第三方jar包, ...
- 头像截图上传三种方式之一(一个简单易用的flash插件)(asp.net版本)
flash中有版权声明,不适合商业开发.这是官网地址:http://www.hdfu.net/ 本文参考了http://blog.csdn.net/yafei450225664/article/det ...
- python 全栈开发,Day94(Promise,箭头函数,Django REST framework,生成json数据三种方式,serializers,Postman使用,外部python脚本调用django)
昨日内容回顾 1. 内容回顾 1. VueX VueX分三部分 1. state 2. mutations 3. actions 存放数据 修改数据的唯一方式 异步操作 修改state中数据的步骤: ...
- GitHub 多人协作开发 三种方式:
GitHub 多人协作开发 三种方式: 一.Fork 方式 网上介绍比较多的方式(比较大型的开源项目,比如cocos2d-x) 开发者 fork 自己生成一个独立的分支,跟主分支完全独立,pull代码 ...
- uni-app&H5&Android混合开发三 || uni-app调用Android原生方法的三种方式
前言: 关于H5的调用Android原生方法的方式有很多,在该片文章中我主要简单介绍三种与Android原生方法交互的方式. 一.H5+方法调用android原生方法 H5+ Android开发规范官 ...
- Solon 开发,四、Bean 扫描的三种方式
Solon 开发 一.注入或手动获取配置 二.注入或手动获取Bean 三.构建一个Bean的三种方式 四.Bean 扫描的三种方式 五.切面与环绕拦截 六.提取Bean的函数进行定制开发 七.自定义注 ...
随机推荐
- 基础篇:深入JMM内存模型解析volatile、synchronized的内存语义
目录 1 java内存模型,JMM(JAVA Memory Model) 2 CPU高速缓存.MESI协议 3 指令重排序和内存屏障指令 4 happen-before原则 5 synchronize ...
- 时间轮算法在Netty和Kafka中的应用,为什么不用Timer、延时线程池?
大家好,我是yes. 最近看 Kafka 看到了时间轮算法,记得以前看 Netty 也看到过这玩意,没太过关注.今天就来看看时间轮到底是什么东西. 为什么要用时间轮算法来实现延迟操作? 延时操作 Ja ...
- C语言普通写法实现:针对多次同步失败的节能处理机制
程序不美, 不来一一整理了. 以后有时间可以把这个功能封装为一个类的对象来操作.即使不封装为类,至少也该封装为一个独立的函数吧... 关键代码摘要如下: 无线同步信号发射端,每分钟发一次,每次发射的时 ...
- 基于springboot工程浅谈整合rabbitmq怎么样防止消息发送mq不丢失和消费mq的消息防止丢失
本文只针对springboot整合rabbitmq的消息防丢失,话不多说,上干货.... 设置发送mq消息不丢失实现思路 执行的方案: 第一步,要对队列,消息以及交换机进行持久化操作(保存到物理磁盘中 ...
- 039 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 01 循环结构概述
039 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 01 循环结构概述 本文知识点:循环结构概述 循环结构主要内容 while 循环 do-whiile ...
- C语言中 malloc
参考:https://blog.csdn.net/kokodudu/article/details/11760863 一.malloc()和free()的基本概念以及基本用法: 1.函数原型及说明: ...
- 【题解】[APIO2010]特别行动队
Link 题目大意:一段区间的贡献是\(ax^2+bx+c,x=\sum v\),求一个划分让总区间的价值最大.分段必须连续. \(\text{Solution:}\) 设计\(dp[i]\)表示前\ ...
- Gearman实战第一弹:异步处理结算单
昨天梦回jm,醒来之后看着窗外万里晴空,想大声喊一句:爷青回! 我想起之前使用gearman的岁月.不知不觉也过了快5年,想总结一篇关于gearman的技术文章算是一种对青春的祭奠,再不写的话更少有p ...
- bash 在指定目录查找包含特定关键字的文件
比如我们要在目录/usr/local/nginx/conf/vhost/下查找baidu.com这个关键字的文件 方法1: find /usr/local/nginx/conf/vhost/ -exe ...
- CV学习日志:CV开发常用库及其头文件
CV开发过程中,通常会涉及以下库:(1)语言/视觉:C.CPP.QT.OpenCV(2)通信/模拟:ROS2.Gazebo.Webots(3)日志/数学:Eigen3.Gflags.Glog.Cere ...