增强MybatisPlus拓展新功能 实战MybatisPlus大合集
mybatis-plus-max简介
MybatisPlusMax是MybatisPlus的增强包,秉承只拓展不修改的理念,对MybatisPlus做增强。
正如MybatisPlus是对MyBatis的增强,MybatisPlusMax是对MybatisPlus的增强,拓展理念一脉相承。
显而易见,MybatisPlus依然进入软件成熟期,对其进行微小的修改会慎之又慎,向其提交修改PR周期较长,基于此考虑,为了更好的使用MybatisPlus,作者决定拓展第三方功能包。
当MybatisPlusMax代码逐步成熟后,作者愿意一次性捐献给MybatisPlus官方团队,以方便用户更好的使用MybatisPlus。
与MybatisPlus的渊源
MyBatis粉
早期的作者也是MyBatis粉,如果你是从拼接SQL时代过来的,受够了在Java代码中拼接SQL字符串,那么MyBatis绝对让你爱不释手。
随着MyBatis的重度使用,也暴露出一些问题:访问数据库极其啰嗦,单表CURD兜兜转转需要写一大堆代码,每个项目有很多张表,每个开发会做很多项目,此时的MyBatis从开发端来讲需要完善。
MybatisPlus初版
MybatisPlus敏锐的发现MyBatis的痛点,着手对MyBatis重复业务代码进行封装,于是便形成了早期版本MybatisPlus。
早期的MyBatisPlus字段名等魔法值充斥着Java代码里,并且为了构建查询条件,需要编写及其啰嗦的代码,很多MyBatis使用者对此嗤之以鼻。被喷的原因如下:大量的字段名魔法值充斥在Java代码里,与早期的拼接SQL字符串有何区别;非常简单的查询条件,在XML文件中很容易完成,使用MybatisPlus构造查询条件啰啰嗦嗦,不知所云。
早期的MybatisPlus为了改进MyBatis的使用的想法是好的,可是在落地实践过程中带来了更大的问题,因此处于不温不火的状态。
MybatisPlus新生
Java 8带来了Lambda表达式,为MybatisPlus重构代码带来了新的基础能力。MybatisPlus基于Java 8新特性进行代码重构,为其带来了新生,使用Lambda语法,干掉了Java代码里的字段名等魔法值,此时的MybatisPlus真正展示出吸引力。
作者粉的是Lambda表达式版本的MybatisPlus,不管是查询条件的构建,还是字段的选取,均使用Lambda表达式(方法引用)来完成,Java代码变得清爽。
方法引用性能
使用方法引用来替换字段名,是否会产生性能问题呢?会也不会。会是因为经过一层包装,性能确实有损耗,不会是因为MybatisPlus在使用反射的地方使用了缓存,有效的解决了中间过程耗时操作,因此可以认为Lambda版的MybatisPlus的性能略有下降。用略微下降一点性能的代价置换开发的灵活性,这一点是值得的。
况且现代服务器硬件逐年提高,从系统总体而言考虑,利大于弊。
基于方法引用实现编码,在遇到代码重构是有多爽就不用多说了。小步快跑、敏捷开发等,造成的屎山代码不胜枚举,代码重构的地位变得愈发重要。
作者的努力
作者是MybatisPlus粉,因此在系统组件选择态度更为积极。
零SQL函数式编程时代
在Lambda表达式加持下的MybatisPlus,零SQL函数式编程成为了可能。零SQL是只尽量少显示的编写SQL语句,能不写就不写,对于疑难杂症,退回使用MyBatis XML更为方便,此时也不能一条道走到黑。
MybatisPlusMax
MybatisPlusMax不是新内容新,是从common包中抽离出来的代码,方便用户更好的使用和解藕。
DAO缓存
给DAO层透明化的增加缓存,能够极大的提高接口的响应效率,透明化意味着不知不觉间具备了缓存的能力,业务代码零感知。这里使用的是Redis分布式缓存,Redis是继Mysql之后必备的组件,因此默认缓存使用Redis分布式缓存。
有关DAO更多内容,请查看视频教程增强MybatisPlus!一行代码整合Redis分布式缓存!
多表连接查询
在我们使用Lambda风格搞定单表查询之后,因业务需要,多表连接查询必不可少!为此作者在此方面也做了不少努力,既然选择零SQL编程,那么便坚持到底。
在这里需要说明几点,有不少声音认为,单表使用MybatisPlus,多表使用MyBatis,有这种想法的朋友可以更近一步,不然便是自欺欺人,挂着MybatisPlus之名干MyBatis之实。
实际上,MyBatis使用join来完成连表查询,本身是有性能缺陷的,数据库数据量膨胀越来越快,join连表查询的弊端愈发明显。《阿里巴巴开发者手册》明令禁止使用join查询,你还在坚持什么呢?
以Lambda版MybatisPlus单表查询为基础,通过Java内存拼装,完成多表连接查询是全新的选择。视频教程如下:
- MybatisPlus多表连接查询
- MybatisPlus多表连接查询合集说明
- MybatisPlus多表连接查询一对一单条记录查询
- MybatisPlus多表连接查询一对一查询列表数据
- MybatisPlus多表连接查询一对一分页查询数据
- MybatisPlus多表连接查询一对多查询列表数据
- MybatisPlus多表连接查询一对多分页查询数据
- MybatisPlus多表连接查询结语总结
- 用代码生成器自动化实现MybatisPlus多表连接查询
- MybatisPlus多表连接查询过滤敏感字段属性
- MyBatis多表连接查询开启二级缓存脏数据案例分析
- MybatisPlus多表连接查询之二级缓存
Java代码生成器
只要你想偷懒,那么Java代码生成器便是偷懒的利器,Java代码生成器以MybatisPlus为基础,通过在全局yml文件中复用数据库,读取数据库元数据信息,一件生成domain、mapper、service、controller等Spring MVC风格代码,以单表查询为主,兼顾多表连接查询,是你的开发好帮手。
文字教程MybatisPlus代码生成器
视频教程
后记
作者叫赛泰先生,主要技术分享平台在B站,是一位MybatisPlus粉,基于MybatisPlus做实战技术分享,希望能对喜欢MybatisPlus的你有所帮助。
另外有MybatisPlus技术学习群,添加UP微信dream4s付费进群(个位数),请注明来意。
增强MybatisPlus拓展新功能 实战MybatisPlus大合集的更多相关文章
- DevExpress v15.2新功能介绍视频(25集全)
DevExpress v15.2新功能介绍视频(25集全) http://www.devexpresscn.com/Resources/Documentation-508.html DevExpres ...
- Lucene搜索方式大合集
package junit; import java.io.File; import java.io.IOException; import java.text.ParseException; imp ...
- python字符串操作实方法大合集
python字符串操作实方法大合集,包括了几乎所有常用的python字符串操作,如字符串的替换.删除.截取.复制.连接.比较.查找.分割等,需要的朋友可以参考下: #1.去空格及特殊符号 s.st ...
- 【Oracle教程资源大合集】Oracle数据库免费学习资源汇总
Oracle的产品非常丰富,各类学习资源也五花八门,本文将介绍Oracle官方的免费教程与风哥整理的Oracle视频教程: 1.Oracle帮助中心 Oracle帮助中心也称为Oracle文档中心,这 ...
- ubuntu 18.04 搭建flask服务器(大合集,个人实操)
ubuntu 18.04 搭建flask服务器(大合集) Ubuntu python flask 服务器 本次使用的Ubuntu版本为:Ubuntu 18.04.5 LTS (GNU/Linux 4. ...
- 【收藏】Java多线程/并发编程大合集
(一).[Java并发编程]并发编程大合集-兰亭风雨 [Java并发编程]实现多线程的两种方法 [Java并发编程]线程的中断 [Java并发编程]正确挂起.恢复.终止线程 [ ...
- 直接拿来用!Facebook移动开源项目大合集
直接拿来用!Facebook移动开源项目大合集 时间:2014-04-22 15:37 作者:唐小引 随着iOS依赖管理工具CocoaPods和大量第三方开源库成熟起来,业界积累了大量的优秀开源项目. ...
- [题解+总结]动态规划大合集II
1.前言 大合集总共14道题,出自江哥之手(这就没什么好戏了),做得让人花枝乱颤.虽说大部分是NOIP难度,也有简单的几道题目,但是还是做的很辛苦,有几道题几乎没思路,下面一道道边看边分析一下. 2. ...
- [题解+总结]NOIP动态规划大合集
1.前言 NOIP2003-2014动态规划题目大合集,有简单的也有难的(对于我这种动态规划盲当然存在难的),今天就把这些东西归纳一下,做一个比较全面的总结,方便对动态规划有一个更深的理解. 2.NO ...
- 从零开始学数据分析,什么程度可以找到工作?( 内附20G、5000分钟数据分析工具教程大合集 )
从零开始学数据分析,什么程度可以找到工作?( 内附20G.5000分钟数据分析工具教程大合集 ) 我现在在Coursera上面学data science 中的R programming,过去很少接 ...
随机推荐
- CompareTest
一.说明:Java中的对象,正常情况下,只能进行比较:== 或 != .不能使用 > 或 < 的 但是在开发场景中,我们需要对多个对象进行排序,言外之意,就需要比较对象的大小. 如何实现? ...
- 算法设计(动态规划实验报告) 基于动态规划的背包问题、Warshall算法和Floyd算法
一.名称 动态规划法应用 二.目的 1.掌握动态规划法的基本思想: 2.学会运用动态规划法解决实际设计应用中碰到的问题. 三.要求 1.基于动态规划法思想解决背包问题(递归或自底向上的实现均可): 2 ...
- 分享个好东西两行前端代码搞定bilibili链接转视频!
只需要在您的要解析B站视频的页面的</body>前面加上下面两行代码即可,脚本会在客户端浏览器里解析container所匹配到的容器里的B站超链接 (如果不是外围有a标签的超链接只是纯粹的 ...
- Redis 01: 非关系型数据库 + 配置Redis
数据库应用的发展历程 单机数据库时代:一个应用,一个数据库实例 缓存时代:对某些表中的数据访问频繁,则对这些数据设置缓存(此时数据库中总的数据量不是很大) 水平切分时代:将数据库中的表存放到不同数据库 ...
- Ajax(下)
跨域 跨域的概念:非同源请求,均为跨域.如果两个页面拥有相同的协议(protocol),端口(port)和主机(host),那么这两个页面就属于同一个源(origin). 例如:主机:http://w ...
- perl遍历哈希的所有健和值
my %h=("001",{name,"李白",age,"18",height,"185",weight,"6 ...
- 2022春每日一题:Day 28
题目:最大上升子序列和 就是最长上升子序列的改版,贡献由1改为a[i]其他全部不变 代码: #include <cstdio> #include <cstdlib> #incl ...
- Go语言核心36讲11
至今为止,我们讲过的集合类的高级数据类型都属于针对单一元素的容器. 它们或用连续存储,或用互存指针的方式收纳元素,这里的每个元素都代表了一个从属某一类型的独立值. 我们今天要讲的字典(map)却不同, ...
- 第2-4-5章 规则引擎Drools高级语法-业务规则管理系统-组件化-中台
目录 6. Drools高级语法 6.1 global全局变量 6.2 query查询 6.3 function函数 6.4 LHS加强 6.4.1 复合值限制in/not in 6.4.2 条件元素 ...
- .NET 6 实现滑动验证码(二)、基本数据
上一节,介绍了滑动验证码的基本情况,也创建了一个.NET 6的工程.本节内容是创建一些基础类. 目录 CaptchaData.cs CaptchaValidateData.cs ImageCaptch ...