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中的事务模式回调方法。虽然源码只有十行,但这个语法糖可以简化事务的写法,不再需要每次手工开启、提交、回滚事务了,使用示例如下:
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
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
BeeCP 2.4.7 版本发布,轻量级 JDBC 连接池
小蜜蜂连接池(BeeCP)是一款轻量,高性能JDBC连接池,支持平衡与竞争模式, 内部采用创新式等待与传递逻辑段, 有关性能高的原因,请阅读博客文章,更多细节请访问项目 本次更新 1:局部代码优化 2:内部线程优化 版本下载 <dependency> <groupId>com.github.chris2018998</groupId> <artifactId>BeeCP</artifactId> <version>2.4.7</version> </dependency>
- 下一篇
JustAuth 1.15.5 发布!快快看过来
JustAuth 1.15.5 正式发布! 关于JustAuth JustAuth,如你所见,它仅仅是一个第三方授权登录的工具类库,它可以让我们脱离繁琐的第三方登录SDK,让登录变得So easy! v1.15.5 本次更新内容较多,解决了一些已知的 BUG,新增了阿里云的账号授权登录(支持主账号和子账号),合并了一些 PR。 详细内容如下: BUG 解决Microsoft授权失败的 BUG 解决Coding个人账号授权失败的 BUG(目前只能使用团队模式进行授权,需要传入团队名,参考AuthConfig#codingGroupName) 解决AuthLinkedinRequest#getAvatarNPE 的问题。(领英用户没有头像时,原代码会报 NPE) 解决抖音登录获取用户地址异常的问题。 解决人人网登录时 token 中带有|引起的异常,Gitee!15 新增 支持阿里云授权登录,Github#81 AuthUser 中新增rawUserInfo,用来存放第三方平台返回的原始用户数据。注:淘宝平台的rawUserInfo为一个空 JSON 支持 Http 级的代理配置,使用方式...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果