动手写框架
文章平均质量分 84
通过手写 Hibernate 框架,加深对与 ORM 的理解
老马啸西风
Github: https://github.com/houbb
Email:houbinbin.echo@gmail.com
展开
-
从零手写 tomcat
mini-cat 是简易版本的 tomcat 实现。别称【嗅虎】(心有猛虎,轻嗅蔷薇。原创 2024-04-22 21:43:34 · 2310 阅读 · 0 评论 -
rate-limit 一款 java 开源渐进式分布式限流框架使用介绍
RateLimit限流注解放在方法上,指定对应的限制频率。也可以定义在类上,默认下面的所有方法生效。方法上的优先级高于类。属性说明默认值value方法访问一次消耗的令牌数1timeUnit时间单位interval时间间隔60count可调用次数1000enable是否启用true默认为 60S 内,可以调用 1000 次。} }这个例子中我们 2S 内最多调用 5 次。和上面使用类似,直接在方法上声明@RateLimit注解即可。} }原创 2022-12-13 17:41:47 · 894 阅读 · 0 评论 -
开源项目在线化 中文繁简体转换/敏感词/拼音/分词/汉字相似度/markdown 目录
以前在 github 上自己开源了一些项目。碍于技术与精力,大部分项目都是 java 实现的。这对于非 java 开发者而言很不友好,对于不会编程的用户更加不友好。为了让更多的人可以使用到这些简单的小工具,周末抽时间将几个开源项目添加了 web 服务实现。简介:支持中文繁简体的在线转换。在线地址:https://houbb.github.io/opensource/opencc4j/开源地址:https://github.com/houbb/opencc4j此处仅选择一个作为例子介绍,其他用法大同小异。【处原创 2022-11-06 21:49:26 · 603 阅读 · 0 评论 -
【mq】从零开始实现 mq-13-注册鉴权 auth
前景回顾【mq】从零开始实现 mq-01-生产者、消费者启动 【mq】从零开始实现 mq-02-如何实现生产者调用消费者?【mq】从零开始实现 mq-03-引入 broker 中间人【mq】从零开始实现 mq-04-启动检测与实现优化【mq】从零开始实现 mq-05-实现优雅停机【mq】从零开始实现 mq-06-消费者心跳检测 heartbeat【mq】从零开始实现 mq-07-负载均衡 load balance【mq】从零开始实现 mq-08-配置优化 fluent【mq】从零开始实现原创 2022-05-19 14:14:01 · 536 阅读 · 1 评论 -
【mq】从零开始实现 mq-12-消息的批量发送与回执
前景回顾【mq】从零开始实现 mq-01-生产者、消费者启动 【mq】从零开始实现 mq-02-如何实现生产者调用消费者?【mq】从零开始实现 mq-03-引入 broker 中间人【mq】从零开始实现 mq-04-启动检测与实现优化【mq】从零开始实现 mq-05-实现优雅停机【mq】从零开始实现 mq-06-消费者心跳检测 heartbeat【mq】从零开始实现 mq-07-负载均衡 load balance【mq】从零开始实现 mq-08-配置优化 fluent【mq】从零开始实现原创 2022-05-18 10:14:34 · 801 阅读 · 0 评论 -
【mq】从零开始实现 mq-11-消费者消息回执添加分组信息 pull message ack groupName
前景回顾【mq】从零开始实现 mq-01-生产者、消费者启动 【mq】从零开始实现 mq-02-如何实现生产者调用消费者?【mq】从零开始实现 mq-03-引入 broker 中间人【mq】从零开始实现 mq-04-启动检测与实现优化【mq】从零开始实现 mq-05-实现优雅停机【mq】从零开始实现 mq-06-消费者心跳检测 heartbeat【mq】从零开始实现 mq-07-负载均衡 load balance【mq】从零开始实现 mq-08-配置优化 fluent【mq】从零开始实现原创 2022-05-17 23:29:52 · 361 阅读 · 0 评论 -
【mq】从零开始实现 mq-10-消费者拉取消息回执 pull message ack
前景回顾【mq】从零开始实现 mq-01-生产者、消费者启动 【mq】从零开始实现 mq-02-如何实现生产者调用消费者?【mq】从零开始实现 mq-03-引入 broker 中间人【mq】从零开始实现 mq-04-启动检测与实现优化【mq】从零开始实现 mq-05-实现优雅停机【mq】从零开始实现 mq-06-消费者心跳检测 heartbeat【mq】从零开始实现 mq-07-负载均衡 load balance【mq】从零开始实现 mq-08-配置优化 fluent【mq】从零开始实现原创 2022-05-12 22:17:47 · 470 阅读 · 0 评论 -
【mq】从零开始实现 mq-09-消费者拉取消息 pull message
前景回顾【mq】从零开始实现 mq-01-生产者、消费者启动 【mq】从零开始实现 mq-02-如何实现生产者调用消费者?【mq】从零开始实现 mq-03-引入 broker 中间人【mq】从零开始实现 mq-04-启动检测与实现优化【mq】从零开始实现 mq-05-实现优雅停机【mq】从零开始实现 mq-06-消费者心跳检测 heartbeat【mq】从零开始实现 mq-07-负载均衡 load balance【mq】从零开始实现 mq-08-配置优化 fluent【mq】从零开始实现原创 2022-05-11 19:38:15 · 674 阅读 · 0 评论 -
【mq】从零开始实现 mq-08-配置优化 fluent
前景回顾【mq】从零开始实现 mq-01-生产者、消费者启动 【mq】从零开始实现 mq-02-如何实现生产者调用消费者?【mq】从零开始实现 mq-03-引入 broker 中间人【mq】从零开始实现 mq-04-启动检测与实现优化【mq】从零开始实现 mq-05-实现优雅停机【mq】从零开始实现 mq-06-消费者心跳检测 heartbeat【mq】从零开始实现 mq-07-负载均衡 load balance【mq】从零开始实现 mq-08-配置优化 fluentfluent大家好,原创 2022-05-10 22:12:24 · 410 阅读 · 0 评论 -
更好的 java 重试框架 sisyphus 的 3 种使用方式
回顾我们前面学习了更好的 java 重试框架 sisyphus 入门简介更好的 java 重试框架 sisyphus 配置的 2 种方式介绍更好的 java 重试框架 sisyphus 背后的故事java 重试框架 sisyphus 开源地址这一节让我们一起学习下 sisyphus 的 3 种使用方式。sisyphus 代理模板目的为了便于用户更加方便地使用注解,同时又不依赖 spring。提供基于代码模式+字节码增强实现的方式。使用案例maven 引入引入注解相关模块。&l原创 2021-10-23 11:28:47 · 269 阅读 · 0 评论 -
更好的 java 重试框架 sisyphus 配置的 2 种方式介绍
回顾我们前面学习了更好的 java 重试框架 sisyphus 入门简介更好的 java 重试框架 sisyphus 背后的故事这一节让我们一起学习下 sisyphus 基于函数式的配置和注解式的配置。函数式配置概览为了满足更加方便的配置,Retryer 类提供了许多可以配置的信息。默认配置/** * 默认配置测试 */public void defaultConfigTest() { Retryer.<String>newInstance()原创 2021-10-21 20:33:41 · 180 阅读 · 0 评论 -
更好的 java 重试框架 sisyphus 入门简介
What is Sisyphussisyphus 综合了 spring-retry 和 gauva-retrying 的优势,使用起来也非常灵活。为什么选择这个名字我觉得重试做的事情和西西弗斯很相似。一遍遍的重复,可能徒劳无功,但是乐此不疲。人一定要想象西西弗斯的快乐。——加缪其他原因以前看了 java retry 的相关框架,虽然觉得其中有很多不足之处。但是没有任何重复造轮子的冲动,觉得是徒劳无功的。当然这段时间也看了 Netty 的接口设计,和 Hibernate-Validator原创 2021-10-20 21:41:18 · 322 阅读 · 1 评论 -
更好的 java 重试框架 sisyphus 背后的故事
sisyphus 综合了 spring-retry 和 gauva-retrying 的优势,使用起来也非常灵活。今天,让我们一起看一下西西弗斯背后的故事。情景导入简单的需求产品经理:实现一个按条件,查询用户信息的服务。小明:好的。没问题。代码UserService.javapublic interface UserService { /** * 根据条件查询用户信息 * @param condition 条件 * @return User 信息原创 2021-10-19 21:26:40 · 212 阅读 · 0 评论 -
java 文档自动生成的神器 idoc
写文档作为一名开发者,每个人都要写代码。工作中,几乎每一位开发者都要写文档。因为工作是人和人的协作,产品要写需求文档,开发要写详细设计文档,接口文档。可是,作为一个懒人,平时最讨厌的一件事情就是写文档。写文档最令我不爽的地方是在于代码备注要改一遍,然后文档再改一遍。所有重复的劳作,都是对于我们宝贵摸鱼时间的最大浪费。于是,我就常常想,能不能只写一遍呢?i-doc 项目简介idoc 为 java 项目生成项目文档。基于原生的 java 注释,尽可能的生成简介的文档。用户可以自定义自己的模原创 2021-10-14 23:06:56 · 1930 阅读 · 0 评论 -
5 年,只为了一个更好的校验框架
天地初开五年前,科技大厦 1 层 B 座。小明的眼睛直勾勾地盯着屏幕,双手噼里啪啦的敲着键盘。思考是不存在的,思考只会让小明的速度降下来。优秀的程序员完全不需要思考,就像不需要写文档和注释一样。“真是简单的需求啊”,小明觉得有些无聊,“毫无挑战。”和无数个 web 开发者一样,小明今天做的是用户的注册功能。首先定义一下对应的用户注册对象:public class UserRegister { /** * 名称 */ private String name原创 2021-08-10 20:03:09 · 273 阅读 · 0 评论 -
一个提升英文单词拼写检测性能 1000 倍的算法?
序言小明同学上一次在产品经理的忽悠下,写好了一个中英文拼写纠正工具:https://github.com/houbb/word-checker。本来以为可以一劳永逸了,直到昨天闲来无事,发现了另一个开源项目,描述简要如下:Spelling correction & Fuzzy search: 1 million times faster through Symmetric Delete spelling correction algorithmThe Symmetric Delete sp原创 2021-07-25 12:04:10 · 733 阅读 · 8 评论 -
从代码生成说起,带你深入理解 mybatis generator 源码
枯燥的任务这一切都要从多年前说起。那时候刚入职一家新公司,项目经理给我分配了一个比较简单的工作,为所有的数据库字段整理一张元数据表。因为很多接手的项目文档都不全,所以需要统一整理一份基本的字典表。如果是你,你会怎么处理这个任务呢?重复的工作一开始我是直接准备人工把所有的字段整理一遍,然后整理出对应的 SQL 插入到元数据库管理表中。meta_table 元数据表信息meta_field 元数据字段信息一开始还有点激情,后来就是无尽的重复,感觉十分无聊。于是,我自己动手写了一个开源的小工具原创 2021-07-22 21:18:34 · 365 阅读 · 1 评论 -
java 实现中英文拼写检查和错误纠正?可我只会写 CRUD 啊!
简单的需求临近下班,小明忙完了今天的任务,正准备下班回家。一条消息闪烁了起来。“最近发现公众号的拼写检查功能不错,帮助用户发现错别字,体验不错。给我们系统也做一个。”看着这条消息,小明在内心默默问候了一句。“我 TND 的会做这个,就直接去人家总部上班了,在这受你的气。”“好的”,小明回复到,“我先看看”今天,天王老子来了我也得下班,耶稣也留不住。小明想着,就回家了。冷静分析说到这个拼写检查,小明其实是知道的。自己没吃过猪肉,还是见过猪跑的。平时看过一些公众号大佬分享,说是公众号推原创 2021-07-21 21:52:03 · 2691 阅读 · 7 评论 -
开源神器:自动生成随机 mock 数据测试对象
测试的痛点大家好,我是老马。每一位开发者大部分工作都是写代码、测试代码、修BUG。我们有很多测试代码,总是花费大量的实践去构建一个对象。于是就在想,能不能自动填充一个对象呢?于是去 github 查了一下,找到了一个测试神器 data-factory。https://github.com/houbb/data-factory/data-factory作用data-factory 项目用于根据对象,随机自动生成初始化信息。便于测试。特性8 大基本类型的支持数组、对象、枚举原创 2020-12-25 21:49:18 · 1850 阅读 · 1 评论 -
java 如何从零实现一个数据库差异对比工具?
对比数据的痛苦不知道你是否也像我一样,在快乐编写代码的时候,必须进行一些数据库的数据对比工作。诚然,一般的数据差异,比如是每一行的内容不同,市场上有比较成熟的 compare2 等对比工具。但是如果是对比数据的每一列是否相同,这个就会变得比较麻烦。v1.0 纯人工对比我们在做一些数据迁移等功能时,经常需要对比数据是否正确,最常见的方法就是人工一列一列的对比。一开始老马也是这么和同事对的,对了几天之后感觉效率实在是低,而且还容易看花眼。于是我就是琢磨,这个东西用程序对比应该会简单很多。v2.原创 2020-12-12 09:39:19 · 920 阅读 · 1 评论 -
java 手写并发框架(二)异步转同步框架封装锁策略
序言上一节我们学习了异步查询转同步的 7 种实现方式,今天我们就来学习一下,如何对其进行封装,使其成为一个更加便于使用的工具。思维导图如下:拓展阅读java 手写并发框架(1)异步查询转同步的 7 种实现方式异步转同步的便利性实现方式循环等待wait & notify使用条件锁使用 CountDownLatch使用 CyclicBarrierFutureSpring EventListener上一节我们已经对上面的 7 种实现方式进行了详原创 2020-10-12 21:51:04 · 601 阅读 · 0 评论 -
从零手写缓存框架(14)redis渐进式rehash详解
redis 的 rehash 设计本文思维导图如下:HashMap 的 rehash 回顾读过 HashMap 源码的同学,应该都知道 map 在扩容的时候,有一个 rehash 的过程。没有读过也没有关系,可以花时间阅读下 从零开始手写 redis(13) HashMap源码详解 简单了解下整个过程即可。HashMap 的扩容简介这里简单介绍下:扩容(resize)就是重新计算容量,向HashMap对象里不停的添加元素,而HashMap对象内部的数组无法装载更多的元素时,对象就需要扩大数组原创 2020-10-11 21:50:50 · 967 阅读 · 0 评论 -
从零开始手写缓存框架 redis(13)HashMap 源码原理详解
为什么学习 HashMap 源码?作为一名 java 开发,基本上最常用的数据结构就是 HashMap 和 List,jdk 的 HashMap 设计还是非常值得深入学习的。无论是在面试还是工作中,知道原理都对会我们有很大的帮助。本篇的内容较长,建议先收藏,再细细品味。不同于网上简单的源码分析,更多的是实现背后的设计思想。涉及的内容比较广泛,从统计学中的泊松分布,到计算机基础的位运算,经典的红黑树、链表、数组等数据结构,也谈到了 Hash 函数的相关介绍,文末也引入了美团对于 HashMap 的源原创 2020-10-10 21:39:03 · 1021 阅读 · 0 评论 -
java 手写并发框架(一)异步查询转同步的 7 种实现方式
序言本节将学习一下如何实现异步查询转同步的方式,共计介绍了 7 种常见的实现方式。思维导图如下:异步转同步业务需求有些接口查询反馈结果是异步返回的,无法立刻获取查询结果。比如业务开发中我们调用其他系统,但是结果的返回确实通知的。或者 rpc 实现中,client 调用 server 端,结果也是异步返回的,那么如何同步获取调用结果呢?正常处理逻辑触发异步操作,然后传递一个唯一标识。等到异步结果返回,根据传入的唯一标识,匹配此次结果。如何转换为同步正常的应用场景很多,但是有时原创 2020-10-09 21:12:08 · 1089 阅读 · 0 评论 -
从零开始手写缓存框架(12)redis expire 过期的随机特性详解及实现
前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(二)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器java从零手写实现redis(五)过期策略的另一种实现思路java从零手写实现redis(六)AOF 持久化原理详解及实现java从零开始手写redis(七)LRU 缓存淘汰策略详解java从零开始手写redis(八)朴素 LRU 淘汰算法性能优化第二原创 2020-10-08 14:32:56 · 806 阅读 · 0 评论 -
java 从零开始手写 redis(11)clock时钟淘汰算法详解及实现
前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器java从零手写实现redis(五)过期策略的另一种实现思路java从零手写实现redis(六)AOF 持久化原理详解及实现java从零开始手写 redis(七)LRU 缓存淘汰策略详解前面我们实现了 FIFO/LRU/LFU 等常见的淘汰策略,不过在操作原创 2020-10-07 19:20:42 · 2339 阅读 · 0 评论 -
java 从零开始手写 redis(十)缓存淘汰算法 LFU 最少使用频次
前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器java从零手写实现redis(五)过期策略的另一种实现思路java从零手写实现redis(六)AOF 持久化原理详解及实现java从零手写实现redis(七)LRU 缓存淘汰策略详解从零开始手写 redis(八)朴素 LRU 淘汰算法性能优化本节一起来原创 2020-10-06 21:56:18 · 1059 阅读 · 0 评论 -
从零开始手写 redis(八)朴素 LRU 淘汰算法性能优化
前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器java从零手写实现redis(五)过期策略的另一种实现思路java从零手写实现redis(六)AOF 持久化原理详解及实现我们前面简单实现了 redis 的几个特性,java从零手写实现redis(一)如何实现固定大小的缓存? 中实现了先进先出的驱除策略。原创 2020-10-04 18:12:36 · 973 阅读 · 0 评论 -
java 从零开始手写 redis(六)redis AOF 持久化原理详解及实现
前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器java从零手写实现redis(五)过期策略的另一种实现思路我们前面简单实现了 redis 的几个特性,java从零手写实现redis(三)内存数据如何重启不丢失? 中实现了类似 redis 的 RDB 模式。redis aof 基础Redis AOF 持原创 2020-10-02 12:59:32 · 997 阅读 · 0 评论 -
java 从零开始手写 redis(五)过期策略的另一种实现思路
前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器前面实现了 redis 的几个基本特性,其中在 expire 过期原理时,提到了另外一种实现方式。这里将其记录下来,可以拓展一下自己的思路。以前的实现方式核心思路原来的实现方式见:java从零手写实现redis(三)redis expire 过期原理原创 2020-10-01 22:18:39 · 574 阅读 · 0 评论 -
从零开始手写 redis(四)监听器的实现
前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?本节,让我们来一起学习一下如何实现类似 guava-cache 中的 removeListener 删除监听器,和类似 redis 中的慢日志监控的 slowListener。删除监听器说明我们在两种场景下删除数据是对用户透明的:(1)size 满了之后,进行数据淘汰。(2)expire 过期时,清原创 2020-09-30 19:56:08 · 971 阅读 · 0 评论 -
从零手写 cache 之 redis expire 过期实现原理
前言我们在 从零手写 cache 框架(一)实现固定大小的缓存 中已经初步实现了我们的 cache。本节,让我们来一起学习一下如何实现类似 redis 中的 expire 过期功能。过期是一个非常有用的特性,比如我希望登录信息放到 redis 中,30min 之后失效;或者单日的累计信息放在 redis 中,在每天的凌晨自动清空。代码实现接口我们首先来定义一下接口。主要有两个:一个是多久之后过期,一个是在什么时候过期。public interface ICache<K, V>原创 2020-09-28 20:11:15 · 1637 阅读 · 0 评论 -
从零开始手写缓存之如何实现固定缓存大小
程序员的三高前段时间有一位同事体检,体检医生说他三高。我打趣道,程序员三高不是高性能、高并发、高可用吗?你是哪三高?每一个追求性能的开发者,都对高性能孜孜不倦地追求着,而缓存是我们踏上这条高性能大道的必经之路。小到 cpu 设计,大到服务分布式缓存,我们每时每刻都在接触缓存,今天我们就一起学习下缓存的发展之路,以及如何如何手写一个可以指定大小的 cache。cache 发展之路古代社会 - HashMap当我们应用有一定流量之后或者查询数据库特别频繁,这个时候就可以祭出我们的java中自带的H原创 2020-09-27 23:17:25 · 546 阅读 · 5 评论 -
18次版本迭代,从零到一实现 java web 权限管理控台(文末福利)
privilege-adminprivilege-admin 是一款为 java 设计的权限管理控台。特性用户,角色,权限的管理黑白名单管理登入/登出日志审计基于 auto-log 的统一日志输出创作目的权限作为 web 开发可以说是最基础,但同时也是最重要的一个环节。前端时间写了 https://github.com/houbb/privilege 权限管理框架,但是没有控台配置,总觉的是残缺的,于是花时间从零实现了一个权限管理控台。多年不接触前端,前端技术变化也原创 2020-09-26 22:38:29 · 428 阅读 · 0 评论 -
java 注解结合 spring aop 自动输出日志新增拦截器与过滤器
auto-logauto-log 是一款为 java 设计的自动日志监控框架。前面已经写过了两篇:java 注解结合 spring aop 实现自动输出日志java 注解结合 spring aop 实现日志 traceId 唯一标识经过前面2篇的代码实现,发现依然存在下列问题:(1)注解的使用依然不够便捷。如果每一个方法上都指定 @AutoLog,依然会比较麻烦。个人在使用的时候也不想这么麻烦。于是想添加基于类的注解。后期考虑是否可以基于包,动态指定 AOP 的扫描包范围。(2)对于日志原创 2020-09-26 12:24:03 · 758 阅读 · 0 评论 -
如何从零开始设计权限管理系统
背景说明近期写代码又开始重新接触了一点控台应用,接触到的项目年代久远,所有的权限管理用起来感觉不是很得心应手。于是想着自己能否从零设计一个,梳理一下思路,当然实际用不用也无所谓。权限管理主要是为了安全,项目中的权限管理是全部放在前端控制的,感觉这一点非常不安全。前端防君子,不防小人。当然本次造轮子主要也是为了打造一款自己满意的权限控制框架,所以设计采用 MVP 模式,采用渐进式的方式开发。可以一起学习一下权限控制的设计和实现思路。如果生产想直接使用,也推荐目前比较成熟的框架:spring-原创 2020-09-17 23:24:15 · 1048 阅读 · 0 评论 -
java 注解结合 spring aop 实现自动输出日志
auto-logauto-log 是一款为 java 设计的自动日志监控框架。创作目的经常会写一些工具,有时候手动加一些日志很麻烦,引入 spring 又过于大材小用。所以希望从从简到繁实现一个工具,便于平时使用。特性基于注解+字节码,配置灵活自动适配常见的日志框架支持编程式的调用支持注解式,完美整合 spring支持整合 spring-boot支持慢日志阈值指定,耗时,入参,出参,异常信息等常见属性指定变更日志核心原理注解定义import ja原创 2020-09-02 22:20:11 · 466 阅读 · 0 评论 -
面试官:你们项目中是怎么做防重复提交的?
面试经历记得刚毕业的时候,有一次去参加面试。上来面试官问我:“你们项目中是怎么做防重复提交的?”一开始听到这个问题是蒙圈的,支支吾吾半天没回答出来。然后面试官直接来一道算法题,喜闻乐见地面试失败。多年过去,虽然很少接触到控台应用,但是近期对于防止重复提交却有了一点自己的心得。在这里分享给大家,希望你工作或者面试中遇到类似的问题时,对你有所帮助。本文将从以下几个方面展开:(1)重复提交产生的原因(2)什么是幂等性(3)针对重复提交,前后端的解决方案(4)如果实现一个防重复提交工具产生原原创 2020-08-05 22:09:23 · 5073 阅读 · 0 评论 -
从零开始手写 mybatis(四)- mybatis 事务管理机制详解
前景回顾第一节 从零开始手写 mybatis(一)MVP 版本 中我们实现了一个最基本的可以运行的 mybatis。第二节 从零开始手写 mybatis(二)mybatis interceptor 插件机制详解第三节 从零开始手写 mybatis(三)jdbc pool 从零实现数据库连接池本节我们一起来学习一下 mybatis 中的事务管理。mybatis 中的事务管理mybatis 事务有两种使用方式:使用JDBC的事务管理机制:即使用 java.Sql.Connection对象完成原创 2020-07-19 14:30:42 · 6908 阅读 · 0 评论 -
从零开始手写 mybatis (三)jdbc pool 从零实现数据库连接池
前景回顾第一节 从零开始手写 mybatis(一)MVP 版本 中我们实现了一个最基本的可以运行的 mybatis。第二节 从零开始手写 mybatis(二)mybatis interceptor 插件机制详解本节我们一起来看一下如何实现一个数据库连接池。为什么需要连接池?数据库连接的创建是非常耗时的一个操作,在高并发的场景,如果每次对于数据库的访问都重新创建的话,成本太高。于是就有了“池化”这种解决方案。这种方案在我们日常生活中也是比比皆是,比如资金池,需求池,乃至人力资源池。思想都是共通原创 2020-07-18 18:57:48 · 6870 阅读 · 0 评论