评论删除后,数据将无法恢复
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>

暂无资讯

暂无问答
如何在命令行模式下运行带包的java文件 https://blog.csdn.net/lytor/article/details/17048361 javac,使用"-d ."与省略-d的区别 https://blog.csdn.net/ppxxyy1110/article/details/20971...
JDBC(Java DataBase Connectivity, java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。 有了JDBC,向各种关系数...
点击上方"码之初"关注,···选择"设为星标" 与Java精品技术文章不期而遇 Java ThreadLocal类允许创建只能由同一线程读写的变量。因此,即使两个线程正在执行相同的代码,并且该代码具有对相...
Java的ThreadLocal变量用来创建线程本地变量。我们知道,一个对象上的所有线程,都会共享该对象的变量,所以这些共享的变量不是线程安全的。我们可以使用synchronization同步语法来使得线程安...
Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机。Tomcat的内存溢出本质就是JVM内存溢出,所以在本文开始时,应该先对Java JVM有关内存方面的知识进行...
source from http://tutorials.jenkov.com/java-concurrency/threadlocal.html#inheritableThreadLocal Java ThreadLocal Creating a ThreadLocal Accessing a ThreadLocal Generic ThreadLo...
每次看到这玩意熟悉,就是想不起来什么东西,看了才知道是啥玩意,就写个笔记强化一下记忆。 private ThreadLocal threadLocal = new ThreadLocal(); threadLocal.set(0); (int) threadLocal...
简介 ThreadLocal是一个本地线程副本变量工具类。主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用,特别适用于各个...
jdbc:数据库连接,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。 JDBC提供了一种基准,据此可以构建更高级的工具和接...
没有更多内容
加载失败,请刷新页面
评论(3)