太原Java培训
达内太原java培训中心

18035108441

热门课程

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

  • 时间:2020-06-28 09:31
  • 发布:开源中国
  • 来源:开源中国

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.支持分库分表、声明式事务、分布式事务。

5.支持80多种数据库方言,支持DDL生成、分页、函数变换、实体源码生成。

6.学习成本低,兼容主要的实体JPA注解。

本次更新为jsqlbox-4.0.7.jre8版,有以下内容改动:

1.添加tx和tryTx两个事务模板方法

这两个方法类似于JdbcTemplae和jFinal中的事务模式回调方法。虽然源码只有十行,但这个语法糖可以简化事务的写法,不再需要每次手工开启、提交、回滚事务了,使用示例如下:

<code>DbContext ctx = new DbContext(dataSource);

</code>DbContext.setGlobalDbContext(ctx);<code>ctx.tx(()->{

new User().putField("firstName", "Foo").insert();

new User().putField("firstName", "Bar").insert();

});

</code>

与tx方法类似的还有一个tryTx方法,如果方法体内有异常发生,它们事务都会回滚。两者的区别是tx方法没有返回值,如果方法体内有异常发生,事务会回滚,并抛出一个运行时异常DbException。而tryTx方法不抛出异常,它返回一个布尔值,返回true表示事务提交成功,返回false表示事务提交失败。

tx和tryTx两个方法都可以用ctx.getLastTxResult来返回一个TxResult对象,它的commitEx属性里存放了上次事务发生时捕获的异常,result属性里存放了事务提交结果,注意这是一个三态值,有SUCESS、FAIL、UNKNOW三种状态,UNKNOW态很少会遇到,它只发生在使用了jSqlBox的GTX分布式事务,有部分提交且自动回滚也未完成(如网线断掉或有一个数据库硬盘损坏)这种情形。

2.增加了缓存翻译功能

缓存翻译这个功能是从SqlToy这个ORM工具中抄过来的,当然不是抄源码了,而是抄这个功能,做开源要擅长于横向比较同类项目,并吸收其它开源项目的亮点才能互相促进。

缓存翻译(有时被称为“数据字典”)可以用内存中缓存的数据库表来避免多表关联查询,简化SQL的书写,并有可能提高查询效率。以下是一个使用了缓存翻译的示例,完整示例代码详见单元测试中的CacheTranslateTest.java,实现上使用起来也很简单,主要就下面几行:

Map<Integer, Map<String, Object>> users = ctx.iQuery("select * from users", new KeyedHandler<Integer>("id"));

Map<Integer, Map<String, Object>> groups = ctx.iQuery("select * from groups", new KeyedHandler<Integer>("id"));

List<Map<String, Object>> orders = ctx.iQueryForMapList("select id,orderNo,userId,groupId from orders where id>'10' ");

CacheTransUtils.translate(orders, users, "userID", "name", "userName", "age", "userAge", groups, "groupId", "groupName", "groupName");

以上translate方法对orders这个List集合,根据缓存users和groups表,添加了userName、userAge和groupName三个列。

translate方法的参数可以有无限个,但是必须严格按照以下参数顺序来使用:translate(要处理的集合,缓存A,"集合中的列名","缓存A中的列名1","列名1别名","缓存A中的列名2","列名2别名"......,缓存B,"集合中的列名","缓存B中的列名1","列名1别名"...)

注意这个缓存翻译功能是针对List<Map<String,Object>>这个数据结构的,是对SQL的查询结果进行后处理,它与DAO工具实际上关系不大,也就是说,其它的DAO工具如MyBatis,JdbcTemplate等也可以调用jSqlBox的这个CacheTransUtils.translate方法实现缓存翻译功能。

缓存翻译通常缓存不常变动的表格(即数据字典)到内存中,如果数据字典偶尔有变动,可以有两种方案,一种是在更改数据字典时,强制刷新缓存。另一种方案是每次使用缓存翻译功能时,都重新查询数据字典,在查询数据字典给它传递一个缓存拦截器,由缓存拦截器的失效时间来决定是否实际发出SQL到数据库查询。

jSqlBox缓存翻译的缺点:被翻译后添加的这些字段,不能出现在SQL查询条件中,这是它的一个使用限制。如果既想将这些字段作为SQL参数参与查询,又不想采用多表关联这种传统写法,可以考虑打破数据库范式,采用添加冗余字段的技巧。

更多jSqlBox的使用说明请见其主页:https://gitee.com/drinkjava2/jsqlbox

java编程语言从创建一直延续到现在,始终是大多数程序员追捧的编程语言之一。对于java语言的适应性以及实用性是不言而喻的。因此,IT的小白大部分也就选择了java编程的培训课程。太原java培训从基础开始授课,结合项目实操练习。学习java编程培训就到达内java培训班,免费试听课程,感受java带给你的独特魅力。

【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!

预约申请免费试听课程

         

上一篇:Jakarta EE 9 Milestone 1 发布,从 javax.* 过渡到 jakarta.*
下一篇:PowerJob 3.1.2 发布,强大的分布式任务调度与计算框架

SPTools 2.1 版本发布,一款基于 SpringBoot 的快速开发框架

pacebox-springboot 1.1.4 发布,Java 生态框架

零基础java培训java 11的特性你知道多少

太原Java培训java9 modularity System 模块系统

选择城市和中心
江西省

贵州省

广西省

海南省