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

栏目: 软件资讯 · 发布时间: 4年前

内容简介:jSqlBox主要特点是架构优、尺寸小、功能全,基本上所有与数据库操作相关的功能,jSqlBox都已提供。它的主要特点有: 1.内核基于DbUtils并与之兼容。 2.提倡在java里拼写SQL,独创参数内嵌式SQL写法, 而且任意CRU...

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中的事务模式回调方法。虽然源码只有十行,但这个语法糖可以简化事务的写法,不再需要每次手工开启、提交、回滚事务了,使用示例如下:

DbContext ctx = new DbContext(dataSource);
DbContext.setGlobalDbContext(ctx);ctx.tx(()->{
    new User().putField("firstName", "Foo").insert();
    new User().putField("firstName", "Bar").insert();
  });

与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     


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

CSS揭秘

CSS揭秘

[希] Lea Verou / CSS魔法 / 人民邮电出版社 / 2016-4 / 99.00元

本书是一本注重实践的教程,作者为我们揭示了 47 个鲜为人知的 CSS 技巧,主要内容包括背景与边框、形状、 视觉效果、字体排印、用户体验、结构与布局、过渡与动画等。本书将带领读者循序渐进地探寻更优雅的解决方案,攻克每天都会遇到的各种网页样式难题。 本书的读者对象为前端工程师、网页开发人员。一起来看看 《CSS揭秘》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

SHA 加密
SHA 加密

SHA 加密工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具