分类 后端 中的文章

Mybatis源码分析:映射体系之懒加载实现细节

懒加载是为了改善在映射结果集解析对象属性时,大量的嵌套子查询的并发效率问题,当设置懒加载后,只有在使用指定属性时才会触发子查询,从而实现分散SQL请求的目的。 按照惯例,依然是先来看一个基础的使用示例: public interface User2Mapper { User findWithLazyById(Integer id); } <resultMap id="lazyResultMap" type="com.wuwenze.mybatis.example.User"> <id property="id" column="id"/> <result property="name" column="name"/> <result property="age" column="age"/> <!-- 通过fetchType="la……

阅读全文

Mybatis源码分析:映射体系之ResultMap原理

在Mybatis中,映射是指返回查询结果的ResultSet列与JavaBean属性之间的对应关系,通过ResultMapping进行映射描述,再用ResultMap封装成一个整体。 按照惯例,先来看一个基本的使用例子: <resultMap id="fullResultMap" type="com.wuwenze.mybatis.example.User"> <!--主键字段--> <id property="id" column="id"/> <!--普……

阅读全文

Mybatis源码分析:一级&二级缓存原理

通过分析Executor的源码,发现Mybatis的缓存逻辑都在执行器中实现,本文将继续探讨多级缓存命中场景以及其实现原理。 先来回顾一下Executor的结构: 如果你还没有看过Executor执行器的源码分析,可以通过下面的链接阅读更多: Mybatis源码分析:深入认识Execu……

阅读全文

Mybatis源码分析:深入认识Executor执行器

本文的目的是疏通Mybatis的整体执行流程,并重点理解Executor在其中扮演的重要作用。 JDBC执行过程 在开始了解mybatis之前,有必要先回顾一下JDBC的整体流程,因为mybatis的底层实际上就是JDBC。 final List<User> result = new ArrayList<>(); final String jdbcUrl = "jdbc:mysql://127.0.0.1:3306/test"; // 获取连接 & 预编译SQL try (final Connection conn = DriverManager.getConnection(jdbcUrl, "root",……

阅读全文

利用策略模式来重构可以预见的if else代码

相信大家一定见过自己项目中的满屏if else魔鬼代码,对于可以预见的逻辑分支增长,在前期代码设计阶段是有必要精心设计一番的。 案例 假设有一个需求如下,A系统的某个业务操作完成后,会发送一个webhook通知给B系统,webhook消息格式如下: { "type": "type1", // 目前已知的type为type1……

阅读全文

神了,SpringBoot启动仅需0.068s!

GraalVM是Oracle搞出来的一种高性能的虚拟机,可以显著的提高程序的性能和运行效率,非常适合微服务。 最近比较火的Quarkus框架默认支持,SpringBoot当前也开始跟上了步伐,在Spring Initializr网站可以看到,基于GraalVM的Spring Nativ……

阅读全文

杀鸡焉用牛刀?谈谈如何自己实现Api接口鉴权

现在前后端分离的趋势越来越明显了,后端正在逐渐开始做纯RESTful性质的服务,关于接口鉴权这个问题就是老生常谈了,目前常用的Spring Security + Jwt, Shiro + Jwt等极其繁琐的配置,仅仅为了实现一个小小的登陆功能,显得过于笨重繁杂了,本文来探讨一下如何自己实现一个简单优雅的JWT鉴权……

阅读全文