跳到主要内容

8 篇博文 含有标签「dbVisitor」

下一代 Java 数据访问工具

查看所有标签

方言系统架构演进:从分离到统一

· 阅读需 6 分钟
ZhaoYongChun
Maintainers

dbVisitor 是一个旨在提供统一数据库访问体验的 Java 工具库。随着对 MySQL、PostgreSQL 等关系型数据库以及 MongoDB、ElasticSearch 等 NoSQL 数据源支持的不断深入,底层的方言系统(Dialect System)面临着越来越复杂的挑战。

近期,我们对 dbVisitor 的方言系统进行了一次深度的架构重构。本次重构不涉及功能变更,旨在解决旧架构中存在的抽象割裂问题,将“方言元数据”与“命令构建能力”高度内聚。

本文将深入探讨这次架构演进背后的思考、实施方案以及带来的显著优势。

dbVisitor 的双层适配器

· 阅读需 6 分钟
ZhaoYongChun
Maintainers

本文将深入解析 dbVisitor 独特的"双层适配"架构,揭示其如何通过应用层与协议层的双重抽象,打破 RDBMS 与 NoSQL 的壁垒。

摘要

在使用 Java 进行现代应用开发时,混合使用关系型数据库(如 MySQL、PostgreSQL)和非关系型数据库(如 MongoDB、Elasticsearch)已成为常态。 然而,这种混合架构往往导致技术栈割裂:开发者需要在 JDBC/MyBatis 和各种 NoSQL 专有客户端之间频繁切换。

dbVisitor 提出的"双层适配"架构旨在解决这一痛点。

  • 第一层(应用适配):在 API 层面,通过统一的 LambdaTemplate 和 Mapper 接口屏蔽底层语法差异(SQL vs DSL)。
  • 第二层(协议适配):在驱动层面,实现了标准的 JDBC 接口,将 NoSQL 数据源封装为标准 JDBC 驱动。

这种设计不仅实现了"One API Access Any DataBase"的愿景,还带来了极高的灵活性:开发者既可以享受 dbVisitor 全栈的便捷,也可以仅使用其 JDBC 驱动,让现有的 MyBatis/Hibernate 项目瞬间具备操作 NoSQL 的能力。

One API 愿景:对统一数据访问的思考

· 阅读需 12 分钟
ZhaoYongChun
Maintainers

有开发者引用物理学隐喻:“粒子的位置与动量不可同时确定”,暗示在框架设计中,通用性与专用性难以兼得。 更有人直言,任何尝试“大一统”的框架,最终都会沦为“四不像”,不仅丢掉了数据库的强事务优势,也没能发挥出例如 Elasticsearch 的能力。

面对这些质疑,dbVisitor 依然坚定地提出了 "One API Access Any DataBase" 的愿景。 为什么我敢这么说?今天我们就来拆解这个争议,聊聊 dbVisitor 敢于挑战“大一统”的底气究竟在哪里。

新一代 Java 数据访问库:dbVisitor

· 阅读需 12 分钟
ZhaoYongChun
Maintainers

数据访问层(DAL)技术已经非常成熟,从最早的 JDBC 到 Hibernate、MyBatis,再到 Spring Data JPA。我们习惯了用这些框架处理数据。然而,当我们把目光投向“数据”本身的变化时,会发现这些经典的框架似乎正逐渐变为“老一代”。

新一代的挑战不再仅仅是如何优雅地写 SQL,而是如何用统一的方式访问那些不再仅仅存储在关系型数据库中的数据。

dbVisitor 使用 MyBatis 方式操作 ElasticSearch

· 阅读需 6 分钟
ZhaoYongChun
Maintainers

在 Java 生态中,操作 ElasticSearch 最常见的方式莫过于使用官方的 elasticsearch-java (或旧版的 RestHighLevelClient) 或者 Spring 家族的 spring-data-elasticsearch。这些工具非常强大,但对于习惯了关系型数据库(RDBMS)和 MyBatis 开发模式的开发者来说,切换到 ElasticSearch 往往意味着需要适应一套全新的 API 和思维模式(DSL 构建、Builder 模式等)。

特别是在一个混合架构的项目中,如果同时存在 MySQL 和 ElasticSearch,数据访问层的代码风格割裂感会非常强:一边是 MyBatis 的 Mapper 接口和 XML,另一边是复杂的 DSL 构建代码或 Repository 接口。这种差异不仅增加了学习成本,也让诸如“分页查询”这样的通用功能难以统一实现。

本文将介绍如何使用 dbVisitor,以一种“类 MyBatis”的方式来操作 ElasticSearch,实现架构上的统一。

dbVisitor 使用 MyBatis 方式操作 MongoDB

· 阅读需 4 分钟
ZhaoYongChun
Maintainers

在 Java 生态中,操作 MongoDB 最常见的方式莫过于使用官方的 mongo-java-driver 或者 Spring 家族的 spring-data-mongodb。这些工具非常强大,但对于习惯了关系型数据库(RDBMS)和 MyBatis 开发模式的开发者来说,切换到 MongoDB 往往意味着需要适应一套全新的 API 和思维模式。

特别是在一个混合架构的项目中,如果同时存在 MySQL 和 MongoDB,数据访问层的代码风格割裂感会非常强:一边是 MyBatis 的 Mapper 接口和 XML,另一边是 MongoTemplate 的链式调用或 Repository 接口。这种差异不仅增加了学习成本,也让诸如“分页查询”这样的通用功能难以统一实现。

本文将介绍如何使用 dbVisitor,以一种“类 MyBatis”的方式来操作 MongoDB,实现架构上的统一。

MongoDB 数据库 ORM/ODM 新工具

· 阅读需 9 分钟
ZhaoYongChun
Maintainers

在 Java 开发领域,关系型数据库(RDBMS)的 ORM 工具(如 Hibernate, MyBatis)已经非常成熟。然而,随着 NoSQL 数据库特别是 MongoDB 的普及,开发者对于在 Java 中如何优雅、高效地操作 MongoDB 提出了新的需求。

虽然 MongoDB 是文档型数据库,天生具备 Schema-less 的特性,但在强类型的 Java 语言中,我们依然需要一种机制将 BSON 文档映射为 Java 对象,以便于业务逻辑的处理。这就是 ODM(Object-Document Mapping)应运而生的背景。

本文将探讨 MongoDB 开发中的 ORM/ODM 现状,并介绍一款基于 JDBC 协议的 MongoDB 新工具 —— dbVisitor

MySQL 流式读取超大表

· 阅读需 5 分钟
ZhaoYongChun
Maintainers

在处理海量数据(如导出报表、全表迁移、数据清洗)时,如果直接使用普通的 SELECT * 查询,JDBC 驱动默认会将所有结果集全部加载到内存中。对于几百万甚至上亿行的表,这几乎百分之百会导致 OOM (Out Of Memory) 异常。

本文将介绍如何在 dbVisitor 中利用 MySQL 的流式查询特性,优雅地解决超大表全量读取问题。