mybatis-Plus 实践篇之逆向工程 --九五小庞
初次听说mybatis-plus感觉这东西取名字都很有意思,像极了现在的iPhone 到iPhone xplus;不得不说水果公司真的引领了很多的“潮流”啊;
最近公司的一个新的项目,用的也是mybatis-plus,但是用的感觉不是那么好,所有就有了这篇实践!其实了解了也就和JPA差不多,废话不多说我们开始吧!
概念
Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生.
其实要我说,最大的亮点就是它的逆向工程和去mapper.xml了,但是也仅是针对单表,多表还是需要mapper.xml的,后面我们都会给出示例。
官网:MyBatis-Plus
特性:
无侵入: 只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
损耗小: 启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
强大的 CRUD 操作: 内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求. 继承一个类就好了!
支持 Lambda 形式调用: 通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
支持主键自动生成: 支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配 置,完美解决主键问题
支持 ActiveRecord 模式: 支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大 的 CRUD 操作
支持自定义全局通用操作: 支持全局通用方法注入( Write once, use anywhere )
内置代码生成器 (pojo、dao、xml、service、.....):采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来 使用
内置分页插件: 基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同 于普通 List 查询
分页插件支持多种数据库: 支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、 Postgre、SQLServer 等多种数据库
内置性能分析插件: 可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢 查询
内置全局拦截插件: 提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误 操作
新建Spring项目,引入依赖
<!--导入 对应的依赖 这里用3.0.5 官网上最新的是一个临时版temp的-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- 模板引擎 记得加上不然后面自动生成代码会报错-->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>
<!--swagger 依赖 记得要加上,不然后面自动生成实体代码注解会爆红-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.6</version>
</dependency>
提一下:spring 2.0x都是配置的mysql8的驱动,8.0以上的驱动需要配置数据库时区!
另外,注意官网上的这句话:
yaml配置
spring:
application:
name: test-mbp
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mp_study?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
username: root
password: 123456
配完这些记得启动一下项目,看看是否有问题,及时处理掉报错!
配置代码生成器
package com.demo;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import java.util.ArrayList;
public class TestCodeGenerator {
public static void main(String[] args) {
// 模块名
String moduleName = "study";
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
// 获取当前项目根路径
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath+"/src/main/java");
gc.setAuthor("Echo");
gc.setOpen(false); //不打开生产的文件
gc.setFileOverride(false); //不覆盖之前生成的文件
gc.setServiceName("%Service");
gc.setIdType(IdType.AUTO);// 主键策略 自增 注意要和数据库中表实际情况对应
gc.setDateType(DateType.ONLY_DATE);
gc.setSwagger2(true);//自动开启swagger2的支持
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUrl("jdbc:mysql://localhost:3306/mp_study?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8");
dsc.setUsername("root");
dsc.setPassword("123456");
dsc.setDbType(DbType.MYSQL);
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setModuleName(moduleName);
pc.setParent("com.demo");
pc.setController("controller");
pc.setService("service");
pc.setEntity("entity");
pc.setMapper("mapper");
mpg.setPackageInfo(pc);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
// strategy.setInclude("t_user");
//可以用同配符号:表示生成t_开头的对应库下所有表
strategy.setInclude("t"+"_\\w*");
strategy.setNaming(NamingStrategy.underline_to_camel);// 下划线转驼峰
strategy.setTablePrefix("t_");//去掉t_这个前缀后生成类名
strategy.setEntityLombokModel(true);// 自动生成lombok注解 记住要有lombok依赖和对应的插件哈
strategy.setLogicDeleteFieldName("is_deleted");//设置逻辑删除字段 要和数据库中表对应哈
// 设置创建时间和更新时间自动填充策略
TableFill created_date = new TableFill("created_date", FieldFill.INSERT);
TableFill updated_date = new TableFill("updated_date", FieldFill.INSERT_UPDATE);
ArrayList<TableFill> tableFills = new ArrayList<>();
tableFills.add(created_date);
tableFills.add(updated_date);
strategy.setTableFillList(tableFills);
// 乐观锁策略
strategy.setVersionFieldName("version");
strategy.setRestControllerStyle(true);//采用restful 风格的api
strategy.setControllerMappingHyphenStyle(true); // controller 请求地址采用下划线代替驼峰
mpg.setStrategy(strategy);
// 执行
mpg.execute();
}
}
当然代码生成器中写死的东西我们可以封装下,便于后面项目多的时候调用!或者项目中可以集成这些配置项到ui中,所有的东西都有实施人员来配置,调用接口直接生成到对应的基础框架代码中就好了!
题外话:bootdo 之前有用过,基础框架搭好后就是前端选择表和创建菜单后,可以基于表生成对应的基础的前后端的代码!
运行验证
可以看到在我们的包下生成来对应的各种包,这里我只建了t_user这一张表来演示;注意代码生成器里的逻辑都是基于表的配置来写的,要保持一致不然会报错!
验证swagger
启动验证一下
呃呃呃,没扫描到mapper包,那我们去加一个包扫描即可!@MapperScan("com.demo.study.mapper")
我们去看对应的mapper 发现没有@Mapper注解,说明这东西还有点没完善哈,按理说其他的层的注解你都生成了,mapper注解没生成有点那啥了,哈哈!
注意加上@EnableSwagger2 上面写的逻辑中开启了Swagger的注解,它只是针对生成的代码的,启动类上还是得自己加!
另外记得加上咱们之前Swagger食用详解 中对应swagger的配置哈。其实mybatis-plus 如果再好使一点,这些东西都应该能帮我们处理好的!
mybatis-Plus 实践篇之逆向工程 --九五小庞的更多相关文章
- WinMTR 网络测试工具-九五小庞
WinMTR(建议优先使用) 百度下载工具 链接:https://pan.baidu.com/s/19ArKSTA2amsa4p6vHegDIQ 提取码:cy4y WinMTR是mtr工具在Windo ...
- Oracle 11G R2安装说明 -九五小庞
教程版本Oracle 11.2.0.1.0
- VMware安装Centos7 -九五小庞
VMware安装Centos7超详细过程(图文) https://blog.csdn.net/babyxue/article/details/80970526 安装centos7的时候 启动会提示Pl ...
- 什么是Nginx -九五小庞
- Oracle错误 ora-12514 解决方法-九五小庞
成功连到数据库上之后,查看listener状态:lsnrctl status status READY 状态,需要由非归档转为归档模式,故操作如下: 1.关闭数据库shutdown immediate ...
- oracle创建/删除 用户,表空间-九五小庞
以下红色标示的都是可以修改的字段 可以按照如下顺序来创建表空间,创建用户,以及删除表空间,删除用户 查看oracle数据库已有的表空间路径 select name from v$datafile; 1 ...
- ORA-01033错误解决方案-九五小庞
Microsoft Windows [版本 6.3.9600](c) 2013 Microsoft Corporation.保留所有权利. C:\Users\Administrator>sqlp ...
- oracle数据库备份 -九五小庞
oracle数据库备份
- oracle数据库创建数据库实例-九五小庞
oracle数据库创建数据库实例
- Oracle两个数据库互相访问-九五小庞
Oracle两个数据库互相访问
随机推荐
- SpringCloud动态更新(加载)nacos配置
nacos端 nacos中配置文件中增加属性 app: version: 1.0.0 SpringCloud端 增加读取配置的代码 @Service @RefreshScope public clas ...
- 通用的servlet
1 通用的servlet实现的原理 2 实例 2.1 目录结构 2.2 BaseServlet.java 2.3 ServletDemo.java 2.4 index.html 2.5 test.ht ...
- servlet 转发与重定向
目录 转发 重定向 重定向与转发本质都是跳转到新的URL 重定向与转发的本质区别在于:转发是一个服务端的行为,而重定向是一个浏览器的行为. 下面是图解: 转发 转发的作用在服务器端,将请求发送给服务器 ...
- Axure通用电商后台管理系高保真交互模板原型图附元件库4种后台模板风格
Axure通用电商后台管理交互模板原型图附元件库4种后台模板风格,原型中使用4种不同的布局框架,你可以根据自己的需求,去选中对应的菜单排版布局.另外,原型图中使用了较多的交互元件.母版.动态面板,基本 ...
- HarmonyOS NEXT开发实战教程:聊天交友App
一早醒来Mate70上热搜了,余承东发文宣布Mate70要在本月发布,史上最强手机终于要来了. 今天分享一个交友app实战教程,是幽蓝君用整整一个周末开发的,时间有限,只做了些皮毛,不是很完善,不过拿 ...
- TVM相关
TVM介绍 为解决深度学习框架和硬件后端适配问题,华盛顿大学的陈天奇等人提出了TVM. TVM是一个端到端的全栈编译器,包括统一的IR堆栈和自动代码生成方法,其主要功能是优化在CPU.GPU和其他定制 ...
- 知识蒸馏 -- 定位蒸馏LD
定位蒸馏 定位蒸馏:Localization Distillation,简称LD 论文地址: Localization Distillation for Dense Object Detection ...
- Delegate的Target,Method
在 C# 中,Delegate 是一种引用方法的类型,可以将方法视为对象进行传递和操作.Delegate 类型的实例可以用来引用一个或多个方法,然后可以将这些引用作为参数传递给其他方法,或者用来调用这 ...
- 又一版 A+B
Description 输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m <10)进制数. Input 输入格式:测试输入包含若干测试用 ...
- 在LLVM中的greedy Register Allocation pass代码详解
LLVM 贪婪寄存器分配器(RAGreedy)详细处理流程 日期: 2025年5月29日 摘要 本文深入分析 LLVM 贪婪寄存器分配器(RAGreedy)的处理流程,详细描述从优先级队列获取虚拟寄存 ...