qdbp-jdbc

数据库 ORM 框架
授权协议 Apache 2.0
开发语言 Java
所属分类 数据库相关、 数据库管理工具
软件类型 开源软件
地区 不详
投 递 者 公良泰宁
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

qdbp-jdbc 简称为 qdbc,是一个数据库 ORM 框架,底层基于 Spring 的 JdbcTemplate ,完善之后希望可以成为 MyBatis 的替代品。

为什么会有这个项目?因为现有的框架用得不够爽:(更多讨论见《ORM框架的痛点讨论》)

  • Hibernate 太重量级,学习成本高,用得不好容易出现性能问题;
  • Spring 的 JdbcTemplate 太基础,只做了预编译参数和结果映射;
  • MyBatis 要生成一大堆 xml 文件,难以维护,尤其表结构变更时,重新生成的 xml 就需要跟以前的比对,很是麻烦;
  • 即使有 MyBatisGenerator 之类的工具来辅助生成代码,但由于代码是提前生成的,结构变更时依然麻烦;
  • 还有一个问题,所有的框架输出预编译参数的 SQL 日志都是用问号代替参数, 如果参数很多,根据日志到数据库中重现问题的时候简直痛苦。

特点和独创内容

  • 特点:对于单表增删改查,以及涉及的大于/小于/不等于/like/in 等条件,不需要写 sql 或 xml《基本用法简介
  • 特点:多表关联基础查询,以及涉及的大于/小于/不等于/like/in 等条件,不需要写 sql 或 xml《表关联查询
  • 特点:集成全局业务处理接口
    提供公共字段(创建人/创建时间/修改人/修改时间/租户隔离等)的赋值接口。
    集成逻辑删除解决方案。《逻辑删除数据状态填充策略
    集成数据权限解决方案。《关于数据权限的解决思路
  • 特点:集成兼容多种数据库的常用操作
    兼容多种数据库的批量新增 crudDao.inserts()、批量修改 crudDao.updates() 方法
    兼容多种数据库的递归查找子节点的方法 crudDao.listChildren()
  • 独创:SqlBuffer,一行内实现 SQL 文本与变量的统一:《关于代码中SQL书写方式的思考
  • 独创:日志中打印的 SQL,复制到数据库就能执行:《SQL日志问题排查的痛点
  • 独创:批量日志采样,批量操作日志只能在开启或关闭之间二选一?《关于批量日志的思考
  • 独创:SQL 模板中不仅可以判断数据库类型,还可以判断数据库版本:《多数据库方言支持

SQL模板优化

复杂的查询或统计,还是要写 sql 或 xml:

  • 一是因为太复杂无法封装,强行封装就会变成 hibernate,学习成本骤升,得不偿失;
  • 二是独立 SQL 方便 DBA 审查,而恰恰只有这部分复杂语句才是需要审查的。

这方面也存在一些优化点:

  • MyBatis 中大量的单表增删改查语句也要用到 SQL 模板,对 DBA 审查来说只是一种干扰,并不会过多关注;
  • 多种数据库就需要多套模板,但实际情况往往是多套模板大体相同,只有少量差异;
  • SQL 模板首先应该是 SQL,然后其中有一些 XML 的判断条件和循环语句,而不应该是 XML 格式。

详见《SQL模板说明》。

版本说明

JDK 支持 jdk1.7+
数据库:MySQL、Oracle、DB2,做了较完整的测试。详见《多数据库方言支持》的【数据库类型测试】

POM依赖

https://mvnrepository.com/artifact/com.gitee.qdbp/qdbp-jdbc-spring

<dependency>
        <groupId>com.gitee.qdbp</groupId>
        <artifactId>qdbp-jdbc-spring</artifactId>
        <version>3.2.6</version>
    </dependency>

如果不是 spring-web 项目,可以单独使用 qdbp-jdbc-core
https://mvnrepository.com/artifact/com.gitee.qdbp/qdbp-jdbc-core

<dependency>
        <groupId>com.gitee.qdbp</groupId>
        <artifactId>qdbp-jdbc-core</artifactId>
        <version>3.2.6</version>
    </dependency>

 

 相关资料
  • Pony 是一个很有意思的 ORM, 它的特别之处在于可以使用 Python 生成器的语法来创建数据库请求, 我们可以用这样的语句来查询数据库: select(p for p in Product if p.name.startswith('A') and p.cost <= 1000) Pony 还提供了一个在线的数据库结构编辑器:Pony Editor 演示示例:University 注意:P

  • Laravel ORM Eloquent 使用时请注意长连接的异常处理,否则会出现 PDO::prepare():MySQL server has gone away 安装 composer require illuminate/database 注意 有个问题就是安装了illuminate/database不能分页,需要安装illuminate/pagination; illuminate/pa

  • Github : ThinkORM - 从ThinkPHP5.1独立出来的数据库ORM类库 安装 composer require topthink/think-orm 创建数据库配置 在 \EasySwoole\Config 里添加配置项 ,这里仅列出连接mysql必须的配置项,完整配置项可以参考think-orm类库目录下的config.php文件 [ 'database' =>

  • 可以使用model('ModelName')->get($id)和model('ModelName')->all来生成数据的ORM封装对象。 $content = $model->get(1); //这里返回的是一个Record对象 $content->title = 'hello world'; //Update操作 $content->save(); //

  • 几年来,我首先在C#、MVC、实体框架和数据库方面进行开发。现在我想试试Java,选择Play Framework和IDEA作为IDE。现在我搜索的ORM系统如下: 易于集成在游戏框架中 以数据库类生成(逆向工程)为主要工具 使用简单的语言,如C#中的LINQ(例如:在context.MY_表中从x选择x)

  • 主要内容:示例动态网页的主要特点就是能及时更新数据,这些更新的数据来源于数据库。学习本节内容需要您了解 JDBC,可以使用 JDBC 连接 MySQL 数据库。 本节数据库使用 MySQL 5.7,你可以点击 MySQL 官方网站 下载相应的 jar 包。 注意:MySQL 8.0 及之后的版本与之前的数据库连接有所不同: 首先驱动 com.mysql.jdbc.Driver 更换为 com.mysql.cj.