• 阿里巴巴前高级研发工程师
• 三家千万级互联网企业技术顾问
• MBTI/盖洛普技术专家
• 厦门某高校外聘教师
• 51CTO特约合作讲师
• 网易云课堂签约讲师
•《深入理解设计模式》作者
一转眼马上要过年了,回首2023年,感觉自己无所事事、碌碌无为、一脸茫然,但总的还是有些事情可以记录一下…
2023年的工作是在厦门的一家做医疗短视频的公司,去这家公司也算是一种机缘。之所以有面试的机会是公司碰到了高并发以及多端并发退款的问题,在公司之前的架构师此时的能力有限,无法解决这些问题,所以我就顺利的面试通过并且轻松了这些问题。但最后的最后在23年年底,公司由于资金困难,团队解散了,庆幸的是公司结清了工资,不然…
回首23年,有这么几个事情以及感悟:
(1)书成功出版:《深入理解设计模式》(原本取名是《大话设计模式之爱你一万年》,但由于出版社要求比较严格,未通过)终于是成功出版,并且销售成果还算客观。京东地址:https://item.jd.com/13860042.html。
(2)羽毛球:羽毛球还是坚持去打,不仅仅是一项运动,也是一种社交方式,认识了一群喜欢打羽毛球的朋友,打完球一起烧烤啤酒,此时的烦恼烟消云散。
(3)坚持写博客:今年写博客,没有那么积极了,但好歹也算是坚持下来了。总的还是要关注自己的成长以及赚钱的能力。对于赚钱的能力,大家要把这个放在心上,这是生存之本,提高生活品质的基础。
(4)习惯养成到舍弃:以前有好多的习惯,比如每天微信读书、早起、学习等,但回到厦门之后这些习惯就突然随着自己的惰性以及乱七八糟的生活,统统没了。养成习惯要比很久还很久,但是要舍弃,只要3天就够了。
一、Spring Boot历史系列集合
《国内最全的Spring Boot系列之一》
《国内最全的Spring Boot系列之二》
《国内最全的Spring Boot系列之三》
《国内最全的Spring Boot系列之四》
《国内最全的Spring Boot系列之五》
《国内最全的Spring Boot系列之六》
二、深入理解设计模式书籍
设计模式包含了大量的编程思想,真正掌握并不容易。设计模式的书籍并不少,大多讲解的比较晦涩,没有真实的应用场景和框架源码支撑,学习后,只知其形,不知其神,就会造成这样的结果: 知道各种设计模式,但是不知道怎么使用到真实项目中。本书籍针对上述问题,有针对性的进行了升级:讲解方式采用有趣的故事,以及配合框架源码分析的方式,让文章内容生动有趣好理解。
本书共23章,主要内容如下:
l 介绍设计模式的分类、六大原则以及23种设计模式的总体介绍,让读者在学习之前对设计模式有整体的认识。
l 第2~23章,通过有趣的场景案例讲解设计模式的概念、使用场景以及使用方法,比如我的女朋友只有一个讲解了单例模式,我想让你坐在宝马里笑讲解了工厂模式,女友在手说走就走讲解了策略了模式,结婚发消息不是一件简单的事情讲解了桥接模式。
💪值得每位IT人把玩的一本书:https://item.jd.com/13860042.html (长按链接“复制”到浏览器购买,内附详细信息)
如果您更青睐视频学习方式,不妨来此:https://dwz.cn/wqO0MAy7 (长按链接“复制”到浏览器购买,内附详细信息)
一顿饭钱就拿走我十年心血💔,哈哈,苦BB的IT人(互联网行业形式严峻,希望各位仔都成为金字塔尖的人物)
三、文章集合
3.1 ES系列
ElasticSearch(简称ES)是一个开源的分布式搜索和数据分析引擎,是用Java开发并且是当前最流行的开源的企业级搜索引擎,能够达到近实时搜索,它专门设计用于处理大规模的文本数据和实现高性能的全文检索。
官方网站:
https://www.elastic.co/
下载地址:
https://www.elastic.co/cn/downloads/past-releases#elasticsearch
全文检索[ES系列] - 第495篇
ElasticSearch应用场景以及技术选型[ES系列] - 第496篇
ElasticSearch详细搭建以及常见错误high disk watermark [ES系列] - 第497篇
Elasticsearch可视化平台Kibana [ES系列] - 第498篇
Elasticsearch安装分词插件[ES系列] - 第499篇
ElasticSearch扫盲概念篇[ES系列] - 第500篇
3.2 15篇MyBatis-Plus系列集合篇
在当今的软件开发世界中,MyBatis-Plus 已经成为了一个不可或缺的工具。作为 MyBatis 的增强版,它不仅保留了 MyBatis 的全部功能,还通过一系列创新性的设计和改进,极大提升了开发效率,使开发者能够以更少的代码实现更多的功能。
MyBatis-Plus的出现,解决了 MyBatis 在使用过程中可能遇到的痛点。它以一种更加简洁、直观和高效的方式,帮助开发者处理数据库操作。更重要的是,MyBatis-Plus 还提供了许多高级功能,如热加载、ActiveRecord 支持、代码生成等,这些都是开发者在实际开发中非常需要的。
这里汇集了MyBatis-Plus基本的使用以及日常会碰到的一些业务场景的文章,有需要的可以收藏学习。
第一章 基础入门
1.1 MyBatis-Plus是什么以及特性[MyBatis-Plus系列]
MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
https://mp.weixin.qq.com/s/FsyThhgUwGLi_8PeTLUFIg
1.2 MyBatis-Plus快速开始[MyBatis-Plus系列]
这一节将通过一个简单的Demo 来阐述 MyBatis-Plus 的强大功能
https://mp.weixin.qq.com/s/15IeyrZpfMh9u2xRdvSnnQ
1.3 MyBatis-Plus快速实现增删改[MyBatis-Plus系列]
在前面的小节中,介绍了MyBatis-Plus的基本使用,需要添加什么依赖以及基本的注解配置就可以快速使用MyBatis-Plus的查询selectList。这一节来看一下常用的增删改如何操作呢 ?
https://mp.weixin.qq.com/s/HVy2N5U_xzK226KdTtqwyw
1.4 MyBatis-Plus实现普通查询/分页查询[MyBatis-Plus系列]
在实际的项目中,删除是最简单的,一般大部分的需求场景根据id删除;对于创建和修改可以认为是一个事情,当然如果是修改状态的话,那么就是单个字段的修改,大同小异。
因此在项目中最难的是查询操作,如果是单表查询,那到还好,但是如果是多表查询的话,那么复杂程度会增加;再者就是业务场景中常见的分页查询。
https://mp.weixin.qq.com/s/Z7UOelKpyzk-L469xnr2zQ
第二章MyBatis-Plus核心功能学习
2.1 使用LambdaQueryWrapper再也不担心字段拼写错误了 [MyBatis-Plus系列]
为了更方便的实现动态SQL,Mybatis Plus 在其基础上扩展了 LambdaQueryWrapper,LambdaQueryWrapper 提供了更加简便的查询语法,同时也避免了 SQL 注入的风险。
https://mp.weixin.qq.com/s/9BeTg_tSlh3hD_4MeoGS4g
2.2 表名注解/主键注解/字段注解/乐观锁注解[MyBatis-Plus系列]
在前面的小节中,对于MyBatis-Plus的使用已经有了一个基本的了解了,本文将介绍MybatisPlus 注解包相关类详解。
https://mp.weixin.qq.com/s/RzA5fBOuK0E9rP2cH2b4GQ
2.3 MyBatis-Plus通用Service快速实现增删改查[MyBatis-Plus系列]
在前面学习了BaseMapper封装了常见的数据库增删改查操作,在实际的项目中,控制层并不会直接操作数据层,中间还有一层服务层,所以对于服务层的增删改查操作,MyBatis-Plus进行了封装:通用Service CRUD 封装IService接口。
https://mp.weixin.qq.com/s/Crw5dTDi48698xucD3bYUQ
2.4 SpringBoot集成MyBatis-Plus + MyBatis-Plus(3.5.3版本)代码生成器[MyBatis-Plus系列]
平时在开发的过程中,对于新建的一张表难免会有对其进行增删改查的操作,而且还要写Controller、service、Mapper、Mapper.xml、PO、VO等等。如果每次都要去写这些跟业务毫不相干但是却又耗时耗力的重复代码这不仅是让开发人员不能专注于业务逻辑甚至可能由于不注意导致字段大小写或者某个字母写错而出现bug。所以我们可以利用代码生成器来生成这些固有的代码,这样不仅正确性高,毕竟代码是不会骗人的。而且还节省了时间。
https://blog.csdn.net/linxingliang/category_12491506.html
2.5 MyBatis-Plus主键生成策略[MyBatis-Plus系列]
Mybatis Plus为我们提供了三种设置主键生成策略的方式。它们的优先级顺序是:局部注解 > 全局 > 默认(雪花算法),下面我们来一一介绍。
https://blog.csdn.net/linxingliang/category_12491506.html
第三章MyBatis-Plus扩展学习
3.1 MyBatis-Plus实现逻辑删除[MyBatis-Plus系列]
在实际的项目中,在删除数据的时候,我们并不想真正的把数据删除掉,而是修改一个状态中,不查询出来而已,这个就是逻辑删除。
在MP中要实现逻辑删除,非常easy,只需要简单的配置即可。接下来就带大家实践一下。
https://blog.csdn.net/linxingliang/category_12491506.html
3.2 Mybatis-Plus通用枚举功能 [MyBatis-Plus系列]
通常在开发中,有这样的需求:枚举类型存入数据库存的是编码code,然而返回给前端的时候是名称name,我们每次入库的时候都要getCode()以及返回给前端的时候要getName(),很繁琐,并且字段属于那种枚举类型的可读性也不高
基于以上问题:我们会尝试着定制一些逻辑专门去处理,一般是自定义枚举转换器实现,然而mybatis-plus提供了优雅的实现方式。
https://blog.csdn.net/linxingliang/category_12491506.html
3.3 Mybatis-Plus自动填充功能配置和使用 [MyBatis-Plus系列]
在数据入库的时候,不管新增或者修改数据,都要手动来设置添加时间和修改时间。每个插入都需要设置,而且数据库还设置不能为空,就很烦恼。
虽然可以在数据库设置默认值,但若没有数据库表修改权限,那就从技术上来解决这个问题吧。(如果有数据库表修改权限,可直接设置相应字段属性)。
需要自动填充的字段:
l插入数据时自动填充:create_time
l更新数据时自动填充:update_time
可以数据库设置默认值,也可以通过代码的方式进行自动填充。
本节来看一下如何使用MP的自动填充功能。
https://blog.csdn.net/linxingliang/category_12491506.html
3.4 Mybatis-Plus 自定义SQL注入器,实现真正的批量插入![MyBatis-Plus系列]
在使用MyBatis-Plus时,dao层都会去继承BaseMapper接口,这样就可以用BaseMapper接口所有的方法CRUD。
在Mybatis-Plus中调用updateById方法进行数据更新默认情况下是不能更新空值字段的。
而在实际开发过程中,往往会遇到需要将字段值更新为空值的情况。
那如何让Mybatis-Plus支持空值更新呢?
https://blog.csdn.net/linxingliang/category_12491506.html
3.5 完美的输出打印 SQL 及执行时长[MyBatis-Plus系列]
在我们日常开发工作当中,避免不了查看当前程序所执行的SQL语句,以及了解它的执行时间,方便分析是否出现了慢SQL问题。
MyBatis-Plus提供了两种SQL分析打印的方式,用于输出每条SQL语句及其执行时间,针对执行较长时间的SQL可以停止运行,有助于发现问题。
https://blog.csdn.net/linxingliang/category_12491506.html
3.7 MyBatisX快速开发插件 [MyBatis-Plus系列]
MyBatis-Plus为我们提供了强大的mapper和service模板,能够大大的提高开发效率。但是在真正开发过程中,MyBatis-Plus并不能为我们解决所有问题,例如一些复杂的SQL,多表联查,我们就需要自己去编写代码和SQL语句,我们该如何快速的解决这个问题呢,这个时候可以使用MyBatisX插件。
https://blog.csdn.net/linxingliang/category_12491506.html
3.3 EasyPoi实战系列集合
01.《【EasyPoi实战系列】Spring Boot集成EasyPoi - 第467篇》
在项目的开发工程中,经常有导入导出数据的常见功能场景,Apache的POI是处理导入导出中最常用的,但是其原生的用法太复杂,很繁琐,总是在Copy… ,无意间发现一款简单粗暴的神器EasyPoi,EasyPoi也是基于POI的,在Spring Boot中也是做了很好的封装,让我们能够在Spring Boot 快速地使用EasyPoi 进行开发,很方便,而且支持多种格式的导入导出。
对于EasyPoi基本的使用的话,可以查看这一篇进行学习。
02.《【EasyPoi实战系列】Spring Boot使用EasyPoi的注解让表格更漂亮以及图片的导出 - 第468篇》
注解@Excel的基本使用以及如何导出图片的相关操作。
(1)@Excel属性width:设置列宽。
(2)@Excel属性format:设置日期格式。
(3)@Excel属性replace:类型转换。
(4)@Excel属性type和imageType:图片导出的设置。
03.《【EasyPoi实战系列】Spring Boot使用EasyPoi实现一对多的导出 - 第469篇》
在数据的项目中,导出的表格的要求是复杂多样化的,有各式各样的复杂的导出格式要满足,比如要导出如下的数据:
观察下,这里的导出结果是有合并单元格的了:课程名称和老师名称。
如果从数据结构来看的话,就是1对多的数据结构如何进行表格的导出。
04.《【EasyPoi实战系列】Spring Boot使用EasyPoi实现多Sheet导出 - 第470篇》
在前面的几个小节中,介绍的都是单个Sheet的导出,在实际的项目中,希望导出多个Sheet的数据,实现的效果实际上就是将前面讲到的两个数据表,原先导出的是两个Excel,然后这里导出了一个Excel多个Sheet的方式。
05.《【EasyPoi实战系列】Spring Boot使用EasyPoi动态控制导出的列 - 第471篇》
注解的导出,规定我们必须把model写好,并且注解写好,每次导出的Excel都是固定的,无法动态控制导出的列,虽然可以通过id来处理一个案例,但是自由度远远不够,本节介绍另外一种导出的方式,自由度十足。
要实现动态导出的列,需要将前面注解的部分,通过代码的方式进行实现,这里使用的是ExcelExportEntity,对于ExcelExportEntity最重要的两个配置,是name和key;其中name是列显示的名称,key是在map中对应的key。
06.《100万数据导出,居然爆炸了OutOfMemoryError?【EasyPoi实战系列】- 第472篇》
大数据导出是当我们的导出数量在几万,到上百万的数据时,一次从数据库查询这么多数据加载到内存然后写入会对我们的内存和CPU都产生压力,这个时候需要我们像分页一样处理导出分段写入Excel缓解Excel的压力。
07.《导出下拉列表的两种小技巧【EasyPoi实战系列】- 第473篇》
在实际的excel中,会有下拉的一个选项,供用户进行下拉修改下拉的选项。
对于这样的需求如何实现呢?
@Excel加入 addressList 是否生成下拉的选项,默认false
目前下拉只支持replace和dict两个取值地方生成。
08.《数据脱敏/换行/枚举的处理【EasyPoi实战系列】- 第474篇》
数据脱敏分为两种方法,一种是简单的,在注解或者ExcelExportEntity设置属性既可以,规则如下:
(1)规则1:采用保留头和尾的方式,中间数据加星号
如:身份证6_4 则保留 370101********1234
手机号3_4 则保留 131****1234
(2)规则2:采用确定隐藏字段的进行隐藏,优先保留头
如:姓名1,3 表示最大隐藏3位,最小一位
09.《模板文件导出Excel【EasyPoi实战系列】- 第478篇》
模板是处理复杂Excel的简单方法,复杂的Excel样式,可以用Excel直接编辑,完美的避开了代码编写样式的雷区,同时指令的支持,也提了模板的有效性。
10.《Excel的Html预览和html转Excel【EasyPoi实战系列】》
当你要导出一个比较复杂的Excel的时候,无论是使用模板还是注解都是比较难实现的,这个时候,我们应该怎么办呢?
要导出一个比较复杂的Excel,无论用模板还是注解都比较难实现,这里就可以使用到html转Excel,使用方法如下:
自己搞个html,然后用模板引擎,beetl,freemark等生成html,然后调用easypoi提供的方法转换成Excel,因为html的标签以及规则大家比Excel要熟悉的多,更容易编写复杂的table,然后easypoi转换成Excel再导出,麻烦了点,但是可以处理一些特定的情况,也同样生成两个版本的Excel都支持
11.《导入Excel数据【EasyPoi实战系列】》
看下导入整体要解决的问题:
(1)在SpringBoot中如何接收文件流:
使用MultipartFile就可以接收到前端传送到后端的文件流。
(2)如何读取Exel文件流,并且解析每一行的数据:
使用EasyPoi提供的类ExcelImportUtil的importExcel(InputStream inputstream, Class<?> pojoClass, ImportParams params)。
(3)实体类和Excel表格的单元格是如何对应的:
只需要在实体类上添加注解@Excel(name = "姓名")。
3.4 AI相关
AI部分就是ChatGPT和Midjourney的基本使用了。
1分钟快速制作思维导图「ChatGPT+XMind」—— 跟上时代的脚步,这辈子就起飞了 - 第5篇
用Midjourney画个美女,AI绘画也太强大了!!!- 第8篇
文心一言PK ChatGPT,二者究竟谁更胜一筹 - 第7篇
用Midjourney画个美女,AI绘画也太强大了!!!- 第8篇
推荐一款idea神级代码插件【Bito-ChatGPT】而且免费!- 第9篇
66个ChatGPT副业赚钱技巧 - 第3篇
ChatGPT+剪映·副业赚钱技巧实战教程·《制作阿凡达解说视频》- 第4篇
3.5 Spring Boot相关
Idea启动多个SpringBoot项目的3种方案
SpringBoot版的低代码开发平台,关联无 SQL - 第462篇
SpringBoot项目打成jar后加载外部配置文件 - 第463篇
SpringBoot版的低代码开发平台,关联无 SQL - 第462篇
SpringBoot项目打成jar后加载外部配置文件 - 第463篇
线上环境无法读取classpath下的txt文件?- 第464篇
为什么ClassPathResource可以读取到流?- 第465篇
SpringBoot配置文件拆分 - 第466篇
转眼马上要过年了,最后祝大家龙年新年快乐,祝新的年一帆风顺,二龙腾飞,三羊开泰,四季平安,五福临门,六六大顺,七星高照,八方来财,九九同心,十全十美。
我就是我,是颜色不一样的烟火。
我就是我,是与众不同的小苹果。
à悟纤学院:https://t.cn/Rg3fKJD
学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!
SpringBoot视频:http://t.cn/A6ZagYTi
SpringBoot交流平台:https://t.cn/R3QDhU0
SpringSecurity5.0视频:http://t.cn/A6ZadMBe
ShardingJDBC分库分表:http://t.cn/A6ZarrqS
分布式事务解决方案:http://t.cn/A6ZaBnIr
JVM内存模型调优实战:http://t.cn/A6wWMVqG
Spring入门到精通:https://t.cn/A6bFcDh4
大话设计模式之爱你:https://dwz.cn/wqO0MAy7