jSqlBox 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
jSqlBox 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
jSqlBox 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !

软件简介

jSqlBox是一个全功能数据库持久层工具,有Java6和Java8两个版本。采用Apache2.0开源协议。  

优点 | Advantages

  • 架构优良:模块式架构,各个模块都可以脱离jSqlBox单独存在。

  • 跨数据库:基于jDialects,支持80多种数据库的分页、DDL生成、实体源码生成、函数变换。

  • 与DbUtils兼容:继承于DbUtils, 原有基于DbUtils的项目可以无缝移植到jSqlBox。

  • 多种SQL写法:Inline方法、模板方法、DataMapper、ActiveRecord、链式写法等。

  • 多项技术创新:Inline写法、多行文本支持、ORM越级查询、树结构查询等。

  • 动态配置:除了支持实体Bean注解式配置,jSqlBox还支持在运行期动态更改配置。

  • 无会话设计:无会话设计(Sessionless),是真正的轻量级工具,可以随用随弃。

  • 自带声明式事务:基于独立的声明式事务工具jTransactions,并可配置成使用Spring事务。

  • 学习曲线平滑:模块化学习,了解了各个子模块,就掌握了jSqlBox,jSqlBox主体只有20多个类。

文档 | Documentation

中文 | English | JavaDoc

与其它DAO工具对比 | Features

下表是jSqlBox在各个方面与一些其它DAO工具的对比, 内容仅为个人看法,而且随时更新,因为可能有说错的地方,或是其它DAO工具有了新版本发布,表中的MP为MyBatis-Plus的缩写:

对比内容 MP BeetlSql JFinal jSqlBox 打分理由(仅参考官网文档,纯属个人看法)
总体架构 3.5 4 3.5 5 jSqlBox模块式架构更合理,各个模块可以抽取出来使用。MP内核基于MyBatis,这个内核比较大,本身固有的问题(如XML配置复杂)不能通过插件来解决。JFinal:1)从DAO选型角度看,它捆绑发布的Web层代码是多余的。2)基于Map的实体类不规范,不是标准POJO,对项目有侵入性
易学、易用、易维护 4 4 5 5 jSqlBox的配置和代码量在所有ORM工具中最少,见DaoBenchMark项目对比(缺JFinal)
从实体类生成DDL脚本 0 0 0 5 jSqlBox支持从实体创建跨数据库(80种方言)的DDL脚本,更方便原型开发和单元测试
从数据库生成实体源码 5 5 5 5 代码生成器在项目后期作用有限,例如当实体类字段名重构,还是必须在IDE里打开源码手工重构,代码生成器帮不上忙。
分页 4 4 4 5 jSqlBox的分页方式侵入性最少,任意SQL和CRUD方法中都可以传入分页拦截器
事务 4 4 5 5 都兼容Spring事务,Jfinal和jSqlBox都自带声明式事务,可以甩掉笨重的Spring。jSqlBox的声明式事务有独立发布版,可以提供给其它工具使用。
动态SQL 4 4 4 5 jSqlBox首创参数内嵌(Inline)式写法,方便拼接SQL,任意SQL和CRUD方法中都可以将SQL文本、参数、分页拦截器、缓存选项、分库分表选项等当作参数传递。其它DAO工具则主要依赖模板实现动态SQL,多绕了一层。
DBA友好(多行SQL存放) 3.5 4.5 5 5 BeetlSql不能切换模板。MyBatis的XML太繁琐,Sql注解又不适用于多行SQL。jSqlBox缺省模板无语法功能,扣分,但它首创用注释存放多行SQL,支持IDE定位,加分。
支持重构的SQL 4 4 4 4.5 jSqlBox利用Lambda可以写出支持重构的SQL(Java8版),而且没有重新发明新的SQL语法。BeetlSql中的Lambda查询器和MP中的条件构造器支持重构,但个人认为是重新发明SQL的反模式,意义不大。jFinal没有发明反模式,但也没有什么创新,所以打分不高。jSqlBox没有打满分是因为受Java语言限制,Lambda不能直接当参数传递,使用起来繁琐。
ORM关联查询 5 3 3 5 BeetlSql和JFinal实体关联查询有缺陷,例如dept=user.get(“department“)这种写法不支持重构,也没有自动装配POJO中的字段属性。JFinal中Blog.dao.find(“select * from blog where user_id=?“,get(“id“));这种方式隐含1+N问题
DataMapper模式 5 5 0 5 即类似dao.save(user)写法。JFinal不支持标准POJO的持久化,不利于与其它工具集成使用。
ActiveRecord模式 5 0 5 5 ActiveRecord实现起来很简单,它是DataMapper模式的镜像,在jSqlBox中只有不到300行代码,但是从文档中看不出BeetlSql有这个功能,希望改进。jSqlBox的Java8版只需要声明ActiveEntity接口,不占用单继承。
接口代理模式 5 5 0 0 只需要写出接口,SQL用注释加在接口方法上,在运行时生成代理实例方法,这可能是个反模式,因为使用它需要先调用dao.getMapper(User.class)生成一个特殊的代理实例,不如ActiveRecord模式简单明了。在jSqlBox中,简单的SQL和逻辑复杂的SQL,直接在Java方法里拼接就可以了,大段的SQL可以利用/-/注释来存放,支持IDE定位
混合模型 ? 5 5 5 即同时支持利用POJO和数据库字段存取,如user.setName(“Tom“).putTail(“usr_age“,10).save()。BeetlSql利用@Tail或TailBean实现,jSqlBox中的ActiveRecord支持混合模型,jFinal中的Model支持混合模型。MP不清楚,先打个问号。
Record/Map模式 ? 5 5 5 实体类不存在时,JFinal可以用Record类来直接存取数据库,jSqlBox用Tail类实现(是ActiveRecord的子类,源码只有两行),BeetlSql还支持直接用Map来存取数据库。Tail/Record/Map这种方式不支持重构,所以不建议在项目中大量使用。
主从支持 2 5 2 5 jSqlBox的主从选择可以精细控制到任意一个CURD或SQL,jFinal需要手工选择主从库,不具备自动切换主从功能。MyBatis本身不支持主从,要利用AOP等第三方手段实现。
分库分表 2 2 2 4.5 只要使用了Sharding,对SQL写法就有侵入。jSqlBox自带基本的Sharding支持,支持原生SQL和所有数据库。其它DAO工具本身不具备sharding功能,需要第三方Sharding工具支持,限制较多。
批处理 4 4 4 5 除了通常的JDBC批处理方法外,jSqlBox还提供批处理开关模式。
缓存 5 5 5 5 都有,都是针对SQL查询结果而不是实体容器缓存
拦截器 5 5 5 5 都有
Sql日志 5 5 5 5 都有
锁及版本控制 5 5 0 0 不常用,JFinal和jSqlBox需手工实现锁及版本
列名到实体字段映射 5 5 5 5 数据表与Java字段命名不符时,jSqlBox用@Column注解来更正,符合JPA惯例。jFina推荐Java字段命名与数据表一致。MP和BeetlSql有几种映射策略选择。
Java6/Java8支持 5 5 5 5 都支持。jSqlBox的Java8版只由3个类组成,反映了它的架构可扩展性好,用户可以模仿这3个文件开发自已的Java8版。
性能 4 5 ? 5 对于持久层,易用性为王,不用多考虑性能。性能测试详见闲大赋的DaoBenchMark
文档 4 4 3 4 JFinal需要官网注册才能下载Demo
知名度、成熟度 4 4 5 0 用的人越多,Bug就越少。成熟度反映了软件本身的质量,但它与软件的架构、功能、易用性无关。

上表中未加入Hibernate和MyBatis,是因为Hiberante太复杂、MyBatis不提供CRUD,缺点太明显。已经被很多人用脚投票了。
不加入EBean的原因是它的功能相对单调一些,设计思路与Hibernate相似,复杂性依然存在。
国产的Nutz DAO功能也挺全的,而且也支持DDL脚本的生成,架构上没有大问题,待下次更新时加入作对比。它的主要缺点是没提供ActiveRecord和实体关联有点复杂化。
JdbcTemplate和DbUtils等DAO工具因为功能单薄,也不加入作对比。

jSqlBox示例 | Demo

  • jsqlbox-in-actframework 演示jSqlBox与ActFramework框架的整合,分别展示利用jBeanBox和Guice来实现声明式事务。 

  • jsqlbox-in-jfinal 演示jSqlBox与jFinal的整合,用jSqlBox替换掉jFinal自带的DAO工具。 

  • jSqlBox-in-Spring 这是一个MVC Web项目,演示jSqlBox在Spring+Tomcat环境下的配置和使用, IOC、AOP和声明式事务均使用Spring的。 

  • jsqlbox-in-springboot 演示jSqlBox在SpringBoot环境下的配置和使用。

  • jsqlbox-in-springboot-mybatis 演示在SpringBoot环境下jSqlBox和MyBatis的混合使用。

  • jsqlbox-java8-demo 主要演示jSqlBox-Java8版的两个特点:实体类只需要声明接口、利用Lambda来写SQL。 

配置方式 | Configuration

在pom.xml中添加:

  com.github.drinkjava2
  jsqlbox
  2.0.4
 

作者其它开源项目 | Other Proje

期望 | Futures

欢迎发issue提出更好的意见或提交PR,帮助完善jSqlBox

版权 | License

Apache 2.0

关注我 | About Me

Github 
码云 

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (0)

加载中
更多评论
发表于开发技能专区
2021/01/14 02:17

jSqlBox5.0.4 发布,精雕细凿,写出可维护的 SQL

jSqlBox是一个Java DAO工具,主要特点是架构优、尺寸小、功能全,基本上所有与数据库操作相关的功能,jSqlBox都已提供。它的主要特点有: 1.只有单个1M大小的jar包,不依赖任何第三方库。它可以独立使用,也支持在Spring环境下使用。 2.内核基于DbUtils并与之兼容,最差情况下可以降级当成DbUtils来使用,上手快。 3.提倡在java里拼写SQL,独创参数内嵌式SQL写法(下面会详细介绍)。 4.支持分库分表、多租户、声明式事务、分布式...

7
7
发表于数据库专区
2020/10/23 16:19

jSqlBox5.0.1 版,参数内嵌式 SQL 了解一下,把 SQL 掰直了写

jSqlBox主要特点是架构优、尺寸小、功能全,基本上所有与数据库操作相关的功能,jSqlBox都已提供。它的主要特点有: 1.内核基于DbUtils并与之兼容,最差情况下可以降级当成DbUtils来使用,上手快。 2.提倡在java里拼写SQL,独创参数内嵌式SQL写法(下面会详细介绍)。 3.只有单个1M大小的jar包,不依赖任何第三方库,不依赖Spring(但也支持在Spring环境下使用)。 4.支持分库分表、声明式事务、分布式事务、缓存翻译、长文本、Act...

11
11
发表于软件架构专区
2020/08/14 15:30

jSqlBox 4.0.8 发布,在 Java 里直接写 SQL 的 ORM 工具

jSqlBox主要特点是架构优、尺寸小、功能全,基本上所有与数据库操作相关的功能,jSqlBox都已提供。它的主要特点有: 1.内核基于DbUtils并与之兼容。 2.提倡在java里拼写SQL,独创参数内嵌式SQL写法, 而且任意CRUD方法里都可以混插SQl片段,例如: new Demo().setName("张三").insert().putField("age", 15).update(" and name=?", param("李四"), " or age>? ",param(20)); 3.只有单个1M大小的jar包,不依赖任何第三方库,不依赖...

28
19
发表于开发技能专区
2020/06/25 15:23

jSqlBox 4.0.7 发布,Java 数据库 ORM 工具

jSqlBox主要特点是架构优、尺寸小、功能全,基本上所有与数据库操作相关的功能,jSqlBox都已提供。它的主要特点有: 1.内核基于DbUtils并与之兼容。 2.提倡在java里拼写SQL,独创参数内嵌式SQL写法, 而且任意CRUD方法里都可以混插SQl片段,例如: new Demo().setName("张三").insert().putField("age", 15).update(" and name=?", param("李四"), " and age> ",ques(20)); 3.只有单个jar包,不依赖任何第三方库。 4.支持分库分表...

0
8
发表于服务端专区
2020/04/15 17:07

jSqlBox 4.0.6 版更新,Java 数据库 ORM 工具

jSqlBox是一个Java全功能数据库持久层工具,主页 https://gitee.com/drinkjava2/jsqlbox jSqlBox主要特点是架构优、尺寸小、功能全,基本上所有与数据库操作相关的功能,jSqlBox都已提供。它的主要特点有: 1.内核基于DbUtils并与之兼容。 2.jSqlBox提倡在java里拼写SQL,独创参数内嵌式SQL写法, 任意DAO方法甚至ActiveRecord方法都可以混插SQl片段,例如: new Demo().setName(""张三"").insert().putField("name", "李四").up...

0
11
发表于服务端专区
2020/03/02 09:23

jSqlBox 4.0.3 发布,Java 全功能数据库持久层 ORM 工具

jSqlBox是一个Java全功能数据库持久层工具,主页 https://gitee.com/drinkjava2/jsqlbox jSqlBox主要特点是架构优、尺寸小、功能全,基本上所有与数据库操作相关的功能,jSqlBox都已提供。其它数据库工具的主要功能,jSqlBox通常都有对应的方案提供,不提供的往往是不重要甚至是反模式的功能,不信可以随便找一个其它持久层工具的功能,而jSqlBox却没有提供或无法轻易实现的功能来,我会给一个合理解释。反之,如下jSqlBox具备的...

3
19
发表于软件架构专区
2020/02/20 02:36

jSqlBox 4.0.1 发布,Java 数据库持久层工具

jSqlBox是一个Java全功能数据库持久层工具,主要特点是架构优、尺寸小、功能全,基本上所有与数据库操作相关的功能,jSqlBox都已提供。 jSqlBox有Java6和Java8两个版本发布,主页: https://gitee.com/drinkjava2/jsqlbox 本次更新内容: 1. 从本次版本起,所有依赖都用源码内嵌的方式整合在项目里,不再有任何外部库依赖了,发布的单个jar包约1M大小。虽然尺寸看起来有点大,但是它提供的功能相当于以下软件主要功能的组合,所以...

0
10
发表于开发技能专区
2019/09/05 20:02

jSqlBox 3.0.0发布, 自带分布式事务的 Java ORM 工具

jSqlBox3.0.0 发布 jSqlBox 是一个建立在 DbUtils 内核上的 Java 全功能数据库持久层工具,具备跨数据库(80 多种方言)、DD L生成、分页、多种SQL写法、分库分表、声明式事务、分布式事务、主从、实体 CURD、实体关联查询、ActiveRecord、Sql 模板等功能。 本次更新主要内容:支持分库分表的分布式事务 Gtx 事务是 jSqlBox3.0.0 新增的分布式事务模块,它的总体思路和 Seata 类似,也是通过生成反向记录来自动回滚,减小对业务的...

8
38
发表于软件架构专区
2019/02/15 22:57

jSqlBox 2.0.6 发布,轻松解决分库分表事务

jSqlBox是一个Java持久层工层,2.0.6版发布,主要有两个更新: 1.添加了对以下三个JPA注解的支持: @Version 乐观锁注解 @Enumerated 枚举字段注解 @Convert 自定义字段转换器 具体的用法可参考jSqlBox的[用户手册],对于以操纵SQL为基础的常见DAO工具来说,jSqlBox可能算是支持标准JPA注解比较多的了,目前它已支持的JPA注解达到以下15个,这些注解既可以使用JPA的,也可以使用jSqlBox自带的同名注解: ``` @GeneratedValue,@G...

2
31
发表于服务端专区
2018/11/22 08:19

jSqlBox 2.0.4 发布,基于 DbUtils 内核的全功能 DAO 工具

本次更新内容如下: 添加了根据数据库生成实体类源码功能, 实际上是在jDialects模块中增加了一个方法,将所有数据库表格按表名生成实体POJO或ActiveRecord类源码输出到指定目录下,现在jSqlBox不仅具有生成DDL的功能,也有了由数据库生成实体源码的功能了: TableModelUtils.db2JavaSrcFiles(DataSource ds, Dialect dialect, boolean linkStyle, boolean activeRecord,String packageName, String outputfolder) S...

0
12
发表于开发技能专区
2018/07/31 18:28

jSqlBox 2.0.2 发布,Java 持久层工具

jSqlBox2.0.2版发布,主要改进: 增加一批实体CURD方法; 增加"按实体样板"查询功能; 实体关联查询如果一条SQL写不完,可以分多次查询。 jSqlBox是一款基于DbUtils内核开发的全功能数据库持久层工具,同时具备底层JDBC操作和上层ORM实体CURD、关联查询功能,具体功能大家可以看用户手册,就不多介绍了。下面只是列一下jSqlBox的独门武器,看看它和其它持久层工具相比有哪些特殊之处: 1. 自带DDL生成功能,支持几乎所有数据库(...

20
18
发表于AI & 大数据专区
2018/06/22 15:05

jSqlBox 2.0.0 版本更新,全栈数据库持久层工具

jSqlBox2.0.0已发布,V2.0.0版本更新添加了分库分表等多处更新,并提供了Java8版本。 简介 | Intro jSqlBox是一个小而全的跨数据库的持久层工具,提供DDL脚本生成、实体注解解析、多种SQL写法、ActiveRecord、ORM查询、主从及分库分表、声明式事务等几乎所有持久层功能。简单地说,是一个全栈数据库持久层工具。 jSqlBox有Java6和Java8两个版本。 优点 | Advantages 架构优良:模块式架构,各个模块都可以脱离jSqlBox单独存在。...

3
16
发表于AI & 大数据专区
2018/03/13 07:18

jSqlBox 1.0.7 版发布, 一个Java持久层工具

简介 | Introduce jSqlBox是一个支持动态配置、多种SQL写法、跨数据库的Java持久层工具。运行于Java6及以上。 1.0.7版完善了文档和示例,添加了SqlMapper模式及Java多行文本支持功能。 优点 | Advantages 架构优良:模块式架构,各个模块都可以脱离jSqlBox单独存在。 跨数据库:基于jDialects,支持70多种数据库的分页、函数变换,是Hibernate之外少有的自带DDL生成功能的持久层工具。 尺寸小:所有依赖包合计约500k大小。 与D...

8
13
发表了资讯
2017/12/05 02:13

历时一年,Java 持久层工具 jSqlBox 迎来首个正式版

历时一年开发,Java持久层工具jSqlBox终于发布1.0.0正式版,与以前的Snapshot版本相比,1.0.0版本是一个真正面向生产环境的持久层工具了,可以用于实际开发了。以下为jSqlBox项目最新版本内容介绍: jSqlBox是一个Java持久层工具,设计目标是用来代替目前的Hibernate/MyBatis/JdbcTemplate/DbUtils等持久层工具。jSqlBox的主要特点: 模块化设计。 jSqlBox将Jdbc工具、事务、方言和数据库脚本生成等功能分成子模块,由不同的子项...

22
56
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表于服务端专区
2019/12/26 22:39

瞎说一下理想中的后台环境

我瞎说一下理想中的后台环境: IOC/AOP部分: 求稳:Spring-ioc,理由:流行,已成实际业界标杆。 求小求精:(本人)十年后的jBeanBox,理由:源码少,~3000行源码,兼容JSR330/JSR250/Spring注解,实现AOP/类扫描/JAVA配置。 MVC部分:JFinal的MVC(但是要去除IOC/AOP/DAO功能),理由:简单上手,源码少,外部依赖少 事务部分:求稳:Spring的事务,理由:功能还行,无Bug。 求小:(本人)十年后的jTransactions,理由:源码少,支...

1
0
发表于数据库专区
2019/05/24 19:33

Bag分布式事务:对SAGA分布式事务的改进

最近打算给jSqlBox添加分布式事务功能,研究了几种分布式事务方案,对SAGA模式比较感兴趣,它是通过将多个事务隔离成多个单个事务,顺序执行(或回滚阶段倒序对冲)来完成的,但是SAGA分布式事务不能保证隔离性的问题,因为单纯的SAGA模式没有锁住资源。经考虑发现在SAGA的思路上,利用事务嵌套和全局锁,可以实现一种简单的分布式事务实现,暂时给它起个新名字叫“Bag分布式事务”,因为它实现的关键是所有事务都是层层嵌套的,...

2
3
2019/11/30 18:15

谈谈 Act 的依赖注入 和 模板输出 - 回 drinkjava 同学的评论

## 1. 背景 [依赖注入工具 jBeanBox](https://gitee.com/drinkjava2/jBeanBox) 的作者 [drinkjava](https://gitee.com/drinkjava2) 同学最近在 gitee 上对 [Actframework 项目](https://gitee.com/actframework/actframework) 提出了[如下评论](https://gitee.com/actframework/actframework#note_2078120): ![](https://oscimg.oschina.net/oscnet/up-adf37743983904543d22601edd5fcdfab7b.png) 首先感谢 drinkjava 同学的意见...

25
19
发表于运维专区
2017/01/21 11:41

一种简单的无限深度树结构数据库设计方案

最近在开发jSqlBox过程中,研究树形结构的操作,突然发现一种简单的树结构数据库存储方案,在网上找了一下,没有找到雷同的(也可能是花的时间不够),现介绍如下: 目前常见的树形结构数据库存储方案有以下四种,但是都存在一定问题: 1)Adjacency List::记录父节点。优点是简单,缺点是访问子树需要遍历,发出许多条SQL,对数据库压力大。 2)Path Enumerations:用一个字符串记录整个路径。优点是查询方便,缺点是插入新记录时...

10
37
发表了博客
2016/09/21 15:07

从机械装配图角度也来谈谈对数据建模和领域建模的一些想法

前言:最近jBeanBox项目收尾,感觉用Java初始化块来代替Spring的XML配置这种模式挺好的,手中有了这把锤子,于是看什么都象钉子,这不,又看上了Hibernate, SSH三兄弟,紧跟在Spring后面,也是用XML或Annotation配置,配置也是固定的,不能在运行期动态生成和修改,好了,钉子就是它了。新项目名字都想好了,就叫jSQLBox,用来代替Hibernate。对了,顺便看看Hibernate还有什么其它毛病没有? 可是找来找去,没发现什么缺点,除了...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
68 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部