jSqlBox Java 持久层工具开源项目

我要开发同款
匿名用户2017年03月11日
288阅读

技术信息

开源地址
https://gitee.com/drinkjava2/jsqlbox
授权协议
Apache

作品详情

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

优点|Advatages

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

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

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

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

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

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

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

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

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

文档|Documetatio

中文 | Eglish | JavaDoc

与其它DAO工具对比|Features

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

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

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

jSqlBox示例|Demo

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

jsqlbox-i-jfial演示jSqlBox与jFial的整合,用jSqlBox替换掉jFial自带的DAO工具。 

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

jsqlbox-i-sprigboot演示jSqlBox在SprigBoot环境下的配置和使用。

jsqlbox-i-sprigboot-mybatis演示在SprigBoot环境下jSqlBox和MyBatis的混合使用。

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

配置方式|Cofiguratio

在pom.xml中添加:  com.github.drikjava2  jsqlbox  2.0.4 

作者其它开源项目|OtherProje

数据库方言工具jDialects

一个独立的声明式事务工具jTrasactios

一个微型IOC/AOP工具jBeaBox

一个服务端布局工具jWebBox

人工生命实验项目《人工生命》

期望|Futures

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

版权|Licese

Apache2.0

关注我|AboutMe

Github 码云 

功能介绍

jSqlBox是一个全功能数据库持久层工具,有Java6和Java8两个版本。采用Apache2.0开源协议。 优点 | Advantages 架构优良:模块式架构,各个模块都可以脱离jSqlB...

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论