# qdbp-jdbc
**Repository Path**: qdbp/qdbp-jdbc
## Basic Information
- **Project Name**: qdbp-jdbc
- **Description**: qdbp-jdbc 简称为 qdbc,是一个数据库 ORM 框架,底层基于 Spring 的 JdbcTemplate ,完善之后希望可以成为 MyBatis 的替代品
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 26
- **Forks**: 5
- **Created**: 2019-06-02
- **Last Updated**: 2025-06-18
## Categories & Tags
**Categories**: database-dev
**Tags**: None
## README
qdbp-jdbc简称为qdbc,是一个数据库ORM框架,完善之后,希望可以成为MyBatis的替代品。
底层没有打算自己做,目前是基于Spring的JdbcTemplate的。
https://gitee.com/qdbp/qdbp-jdbc 求star~~
https://github.com/zhaohuihua/qdbp-jdbc
https://yuque.com/zhaohuihua/qdbc 文档中心
# 存在的理由
为什么会有这个项目,因为现有的框架用得不够爽:
更多讨论见《[ORM框架的痛点讨论](https://yuque.com/zhaohuihua/qdbc/gebddu)》
* Hibernate太重量级,学习成本高,用得不好容易出现性能问题;
* Spring的JdbcTemplate太基础,只做了预编译参数和结果映射;
* MyBatis要生成一大堆xml文件,难以维护,尤其表结构变更时,重新生成的xml就需要跟以前的比对,很是麻烦;
* 即使有MyBatisGenerator之类的工具来辅助生成代码,但由于代码是提前生成的,结构变更时依然麻烦;
* 还有一个问题,所有的框架输出预编译参数的SQL日志都是用问号代替参数,
如果参数很多,根据日志到数据库中重现问题的时候简直痛苦。
# 特点和独创内容
* 特点:对于单表增删改查,以及涉及的大于/小于/不等于/like/in等条件,不需要写sql或xml。《[基本用法简介](https://yuque.com/zhaohuihua/qdbc/vfkzgg)》
* 特点:集成全局业务处理接口
提供公共字段(创建人/创建时间/修改人/修改时间/租户隔离等)的赋值接口。
集成逻辑删除解决方案。《[逻辑删除数据状态填充策略](https://www.yuque.com/zhaohuihua/qdbc/ni9zz6)》
集成数据权限解决方案。《[关于数据权限的解决思路](https://www.yuque.com/zhaohuihua/qdbc/lugmy4)》
* 特点:集成兼容多种数据库的常用操作
兼容多种数据库的批量新增crudDao.inserts()、批量修改crudDao.updates()方法
兼容多种数据库的递归查找子节点的方法crudDao.listChildren()
* 独创:SqlBuffer,一行内实现SQL文本与变量的统一:《[关于代码中SQL书写方式的思考](https://yuque.com/zhaohuihua/qdbc/bt2ryu)》
* 独创:日志中打印的SQL,复制到数据库就能执行:《[SQL日志问题排查的痛点](https://yuque.com/zhaohuihua/qdbc/cwk1uf)》
* 独创:批量日志采样,批量操作日志只能在开启或关闭之间二选一?《[关于批量日志的思考](https://yuque.com/zhaohuihua/qdbc/kgo239)》
* 独创:SQL模板中不仅可以判断数据库类型,还可以判断数据库版本:《[多数据库方言支持](https://www.yuque.com/zhaohuihua/qdbc/bdr1d3)》
# SQL模板优化
复杂的查询或统计,还是要写sql或xml:
* 一是因为太复杂无法封装,强行封装就会变成hibernate,学习成本骤升,得不偿失;
* 二是独立SQL方便DBA审查,而恰恰只有这部分复杂语句才是需要审查的。
这方面也存在一些优化点:
* MyBatis中大量的单表增删改查语句也要用到SQL模板,对DBA审查来说只是一种干扰,并不会过多关注;
* 多种数据库就需要多套模板,但实际情况往往是多套模板大体相同,只有少量差异。
详见《[SQL模板说明](https://www.yuque.com/zhaohuihua/qdbc/yoz8vk)》。
# 版本说明
JDK支持jdk1.7+
数据库:MySQL、Oracle、DB2、PostgreSQL、H2,做了较完整的测试。详见《[多数据库方言支持](https://www.yuque.com/zhaohuihua/qdbc/bdr1d3)》的【数据库类型测试】
# POM依赖
https://search.maven.org/artifact/com.gitee.qdbp/qdbp-jdbc-spring
```xml
com.gitee.qdbp
qdbp-jdbc-spring
4.2.4
```
如果不是spring-web项目,可以单独使用qdbp-jdbc-core
https://search.maven.org/artifact/com.gitee.qdbp/qdbp-jdbc-core
```xml
com.gitee.qdbp
qdbp-jdbc-core
4.2.4
```