增强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,过去很少接 ...
随机推荐
- k8s机器群扩容问题
今天遇到了一个很奇葩的问题.公司新人吧k8s集权扩容完后,发现服务器上的磁盘没有做分区2T磁盘没有做任何动作 把两台slave节点扩容上去的节点弄到了/目录.由于是生产环境情况比较特殊并没通过kube ...
- 七、Ajax请求
七.Ajax请求 客户端(浏览器)向服务端发起请求的形式: 地址栏:GET 超链接标签:GET form表单:GET或POST Ajax(重要):GET或POST或PUT或DELETE AJAX(As ...
- Java开发学习(三十九)----SpringBoot整合mybatis
一.回顾Spring整合Mybatis Spring 整合 Mybatis 需要定义很多配置类 SpringConfig 配置类 导入 JdbcConfig 配置类 导入 MybatisConfig ...
- linux重置密码
方法一: 进入grub菜单界面 按e键 在linux开头的行按ctrl+e 或者end跳到行尾,输入rd.break 按ctrl+x mount -o remount,rw /sysroot chro ...
- node 学习笔记 模块和包的管理与使用
1.前言 对于各种编程语言,代码组织是很重要的.而模块是node中的代码组织机制,node中的很多功能都以模块划分,而模块中又封装了许多方法,而且不会改变全局作用域,极大的方便了各开发者的需求. 2. ...
- Jekyll于windows中使用
安装 安装Ruby http://rubyinstaller.org/downloads/ 于其中选择最新的带dev套件的. 在安装时,安装目录不能有空格,检查是否已经安装成功 ruby -v gem ...
- 真正“搞”懂HTTP协议03之时间穿梭
上一篇我们简单的介绍了一下DoD模型和OSI模型,还着重的讲解了TCP的三次握手和四次挥手,让我们在空间层面,稍稍宏观的了解了HTTP所依赖的底层模型,那么这一篇,我们来追溯一下HTTP的历史,看一看 ...
- Python学习之实例2
一.根据输入的各科成绩统计学生成绩是否达标 1 (背景:输入学生数量,以及各个学生语文.数学.英语.历史四科的成绩,如果总成绩小于 240,则成绩不达标,否则成绩合格) 2 3 #coding=utf ...
- 棋盘覆盖(java实现)
棋盘覆盖 问题描述 在一个2k×2k 个方格组成的棋盘中,恰有一个方格与其它方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘.在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘 ...
- Day17:稀疏数组的超细详解
稀疏数组的超细详解 一个含有大量重复元素的二维数组,我们可以提取其有效元素,压缩空间,整合为一个稀疏数组. 例如一个五子棋棋盘,我们将棋盘看作为一个二维数组,没有棋子的位置为0:黑棋为1:白棋为2: ...