Mybatis 源码逐句解析(一)

108 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情

大家好,在下全村最野的狗

背景起源

最近公司新开发了一个非结构化数据库,该数据库可以以非结构化的形式存储图片、视频、音频、文字等数据。最牛的功能还是直接支持向量搜索。比如:

搜索与给定向量最近的10个向量。

SELECT id, vector,
distance('topK = 10')(vector, [1.0, 1.0, 1.0])
FROM test_vector
1 [1,1,1] 0
0 [0,0,0] 3
2 [2,2,2] 3
3 [3,3,3] 12
4 [4,4,4] 27
5 [5,5,5] 48
6 [6,6,6] 75
7 [7,7,7] 108
8 [8,8,8] 147
9 [9,9,9] 192

当然,重心不在数据库。

数据库开发出来了,必然要结合场景使用。该数据库基于 HTTP 协议实现通信。数据库采用通用SQL语言实现交互。比如:

查询

$ echo 'SELECT 1' | curl \
-H "X-ClickHouse-User: $MQDB_USER" \
-H "X-ClickHouse-Key: $MQDB_PASS" \
"http://$MQDB_HOST:$MQDB_PORT/" -d @-
cat << EOF |
CREATE TABLE test
(
   id UInt64,
   name String,
   vector FixedArray(Float32, 4)
)
ENGINE = MergeTree PRIMARY KEY id
EOF
curl \
-H "X-ClickHouse-User: $MQDB_USER" \
-H "X-ClickHouse-Key: $MQDB_PASS" \
"http://$MQDB_HOST:$MQDB_PORT/" -d @-

好了。有人要说了,你不是Mybatis 源码逐句解析吗!你叭叭叭数据库干嘛那?你这人真有病。

嘿,还真别急,马上重点来了。

为什么自己造轮子

既然是最新开发的数据库,那必然没有对应的轮子。好吧,这个轮子被我接下了。

乍一看,这SQL很熟悉是吧,但是Mybatis又行不通。你问我为什么?

  1. 通信协议不同。
  2. 底层数据结构不同。
  3. ...

这没办法了,肯定不能用了。但是有什么是能难倒程序员的吗?源码都有了,那就自己造把!!

然后就是疯狂啃Mybatis源码。感觉差不多了有点儿心得了,献丑讲一下。

更新计划

本次文章是系列文章,会分为很多期来写,具体多少期,我也不清楚下,写明白为止。

阅读源码强烈建议:前期不要挨着读!!!调试到什么方法就看什么方法!!!

阅读源码强烈建议:前期不要挨着读!!!调试到什么方法就看什么方法!!!

阅读源码强烈建议:前期不要挨着读!!!调试到什么方法就看什么方法!!!

  1. 背景起源。
  2. 手把手带你搭建一个自己的 Mybatis 调试环境。
  3. Mybatis 的第一步你的一大步 之 获取配置文件 InputStream。
  4. Java解析 XML 配置文件之 DOM(看这一次,终生不再疑惑XML)(一)。
  5. Java解析 XML 配置文件之 SAX(看这一次,终生不再疑惑XML)(二)。
  6. Java解析 XML 配置文件之 XPATH(看这一次,终生不再疑惑XML)(三)。
  7. Mbatis解析 mybatis-config.xml 配置文件不过如此之 XPathParser(一)。
  8. Mbatis解析 mybatis-config.xml 配置文件不过如此之 XNode(二)。
  9. Mbatis解析 mybatis-config.xml 配置文件不过如此之 总览全局篇。
  10. ...待更新
  11. 手写 Mybatis 简简单单。

好了今天就点到为止,期待明天的更新。