jSqlBox 2.0.2 发布,Java 持久层工具

yong9981
 yong9981
发布于 2018年07月31日
收藏 16

jSqlBox2.0.2版发布,主要改进:

  • 增加一批实体CURD方法;

  • 增加"按实体样板"查询功能;

  • 实体关联查询如果一条SQL写不完,可以分多次查询。

jSqlBox是一款基于DbUtils内核开发的全功能数据库持久层工具,同时具备底层JDBC操作和上层ORM实体CURD、关联查询功能,具体功能大家可以看用户手册,就不多介绍了。下面只是列一下jSqlBox的独门武器,看看它和其它持久层工具相比有哪些特殊之处:

1. 自带DDL生成功能,支持几乎所有数据库(70多种数据库方言)。示例:

        SqlBoxContext ctx = new SqlBoxContext(dataSource);
        String[] ddls = ctx.toCreateDDL(User.class);

2. 无接口、无实现、无DAO、无配置,用最少的文件和语法完成最多的功能:
下图是在完成同样的性能测试时,jSqlBox和其它DAO工具文件数量的对比:

当实体多达上百个时,想一想jSqlBox能省多少事?  
当然性能也是不错的。见下图(这个测试仅针对实体CRUD):

3. 最简洁的ORM实体关联查询:
下图从User到Privilege之间经过了两个多对多关联,在jSqlBox中这不是问题:

一行代码就可以收工了:

List<User> users = ctx.entityAutoNet(User.class, UserRole.class, Role.class, RolePrivilege.class, Privilege.class).pickEntityList(User.class);

没有配置文件、没有XML、没有模板,就这么简单。

4. 树结构实体关联查询也是小菜,两行代码解决问题: 

EntityNet net = ctx.iQuery(new EntityNet(),TreeNode.class, TreeNode.class, alias("t", "p"), give("p", "t", "parent"), give("t", "p", "childs"), "select t.**, t.pid as p_id from treenodetb t");
TreeNode root = net.pickOneEntity("t", "A");

对于无递归查询出子树,jSqlBox也发明出了一种新的深度树存储方案,详见用户手册,这可以算是jSqlBox项目的副产品。

5. 无处不在的动态SQL,所有条目都可以当作参数传递,包括SqlBoxContext老大本身:

ctx.iExecute("insert into users (", //
   " name ,", param("Sam"), //一个参数写一行
   notNull("age,", user.getAge()), //notNull方法的第二个参数为null时,这一项将不会添加到SQL中
    " address ", param("Canada"), //
 ") ", valuesQuestions()); //自动根据参数个数补上 values(?,?...?)片段

//ActiveRecord的方法也接收乱七八糟的参数,来者不拒
new User(100,"Tom","China").update(ctx2, " and age>?", param(5), new PrintSqlHandler());

6. 在Dao层具备主从分离、分库分表功能,可以不依赖第三方Sharding工具:

public static class User extends ActiveRecord<User > {
   @ShardTable({ "MOD", "8" })
   @Snowflake
   @Id
   private Long id; 
 
   @ShardDatabase({ "MOD", "7" })
   @Id
   @Snowflake
   private Long databaseId;
...
}
//自动Sharding, 强制主表操作
User u1 = new User ().put("name", "Tom").insert(USE_MASTER);

7. 还有其它一些特点就不详细介绍了,只是简单提一下:
   jSqlBox不重新发明SQL语法,即使是按样板查询,也不重新发明SQL,好学。
   jSqlBox支持动态配置;
   jSqlBox兼容DbUtils;
   jSqlBox自带声明式事务,也可以使用Spring事务。
   jSqlBox可以切换模板;
   jSqlBox有很多SQL写法,包括链式写法和支持重构的Lambda语法等;
   jSqlBox有批处理、缓存、日志、拦截器,但也有黑科技, 如抽象类实例化、多行SQL文本支持。
   jSqlBox架构优秀,模块式架构,jSqlBox模块的源码只有30多个文件。
   jSqlBox无配置文件、启动快,0秒启动。

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:jSqlBox 2.0.2 发布,Java 持久层工具
加载中

精彩评论

强子1985
强子1985
从用户习惯来说可能推广不容易
完颜阿骨再打
完颜阿骨再打
性能测试数据有点假

最新评论(20

浩渺行无极
浩渺行无极

引用来自“完颜阿骨再打”的评论

性能测试数据有点假

引用来自“二灯大师”的评论

现在谁都在说自家的强

引用来自“yong9981”的评论

jSqlBox不敢说比其它工具强,至少在稳定性上拍马都赶不上,但至少在某些解决方案上对于其它DAO工具的开发还是有借签意义的。ORM工具层出不穷的原因是没人对现有的ORM工具满意,对于我来说,只要MyBatis还支持XML,我就对它不感冒的,XML那是给机器看的,不是给人用的。

引用来自“文敦赋”的评论

xml里面的是sql 这个给谁看?

引用来自“yong9981”的评论

我的意思是说XML太罗嗦了,看看下面多少个废词:
<association property="author" column="blog_author_id" javaType="Author" >
   <id property="id" column="author_id"/>
   <result property="username" column="author_username"/>
   <result property="password" column="author_password"/>
   <result property="email" column="author_email"/>
   <result property="bio" column="author_bio"/>
</association>
association 开头结尾要对应, result property、column 重复了多少遍?这得打多少字,错一个字都不行,没有代码提示,纯苦力的干活。

引用来自“浩渺行无极”的评论

你还在手写?ibatis时代就有配置生成了 而且支持直接返回map 字段名自动转驼峰 这是看了个入门文档就下结论的节奏?

引用来自“yong9981”的评论

有配置生成工具不也反映了MyBatis自已都讨厌XML吗? 与其如此干吗不直接甩掉XML?

引用来自“浩渺行无极”的评论

还真可以不用xml 能先看看资料吗?为了扛而扛没有任何意义

引用来自“yong9981”的评论

你说的是Annotation吗? 这是MyBatis官网上的原话:
Annotations that avoid the need for XML. However, due to some limitations of Java Annotations and the complexity of some MyBatis mappings, XML mapping is still required for the most advanced mappings (e.g. Nested Join Mapping).
XML太啰嗦,Annotation又有局限性,所以jSqlBox使用Java语言本身来当作配置,在方法调用的同时就相当于配置。

引用来自“浩渺行无极”的评论

这不就是把繁琐的配置写在代码里了嘛 还以为吐槽MyBatis配置复杂是为了说明自己可以不用配置了呢 自己造轮子没有错相反这种精神很优秀 但是为了推广还给对手按一个莫须有的槽点骗新人入坑 这样不好 不好

引用来自“yong9981”的评论

只是吐槽XML,不是吐槽配置(例如注解也是配置的一种)。另外也谈不上莫须有,因为MyBatis确实离不开XML(在复杂映射时),这是一个事实。
那就加油吧 早日取而代之
yong9981
yong9981

引用来自“完颜阿骨再打”的评论

性能测试数据有点假

引用来自“二灯大师”的评论

现在谁都在说自家的强

引用来自“yong9981”的评论

jSqlBox不敢说比其它工具强,至少在稳定性上拍马都赶不上,但至少在某些解决方案上对于其它DAO工具的开发还是有借签意义的。ORM工具层出不穷的原因是没人对现有的ORM工具满意,对于我来说,只要MyBatis还支持XML,我就对它不感冒的,XML那是给机器看的,不是给人用的。

引用来自“文敦赋”的评论

xml里面的是sql 这个给谁看?

引用来自“yong9981”的评论

我的意思是说XML太罗嗦了,看看下面多少个废词:
<association property="author" column="blog_author_id" javaType="Author" >
   <id property="id" column="author_id"/>
   <result property="username" column="author_username"/>
   <result property="password" column="author_password"/>
   <result property="email" column="author_email"/>
   <result property="bio" column="author_bio"/>
</association>
association 开头结尾要对应, result property、column 重复了多少遍?这得打多少字,错一个字都不行,没有代码提示,纯苦力的干活。

引用来自“浩渺行无极”的评论

你还在手写?ibatis时代就有配置生成了 而且支持直接返回map 字段名自动转驼峰 这是看了个入门文档就下结论的节奏?

引用来自“yong9981”的评论

有配置生成工具不也反映了MyBatis自已都讨厌XML吗? 与其如此干吗不直接甩掉XML?

引用来自“浩渺行无极”的评论

还真可以不用xml 能先看看资料吗?为了扛而扛没有任何意义

引用来自“yong9981”的评论

你说的是Annotation吗? 这是MyBatis官网上的原话:
Annotations that avoid the need for XML. However, due to some limitations of Java Annotations and the complexity of some MyBatis mappings, XML mapping is still required for the most advanced mappings (e.g. Nested Join Mapping).
XML太啰嗦,Annotation又有局限性,所以jSqlBox使用Java语言本身来当作配置,在方法调用的同时就相当于配置。

引用来自“浩渺行无极”的评论

这不就是把繁琐的配置写在代码里了嘛 还以为吐槽MyBatis配置复杂是为了说明自己可以不用配置了呢 自己造轮子没有错相反这种精神很优秀 但是为了推广还给对手按一个莫须有的槽点骗新人入坑 这样不好 不好
只是吐槽XML,不是吐槽配置(例如注解也是配置的一种)。另外也谈不上莫须有,因为MyBatis确实离不开XML(在复杂映射时),这是一个事实。
浩渺行无极
浩渺行无极

引用来自“完颜阿骨再打”的评论

性能测试数据有点假

引用来自“二灯大师”的评论

现在谁都在说自家的强

引用来自“yong9981”的评论

jSqlBox不敢说比其它工具强,至少在稳定性上拍马都赶不上,但至少在某些解决方案上对于其它DAO工具的开发还是有借签意义的。ORM工具层出不穷的原因是没人对现有的ORM工具满意,对于我来说,只要MyBatis还支持XML,我就对它不感冒的,XML那是给机器看的,不是给人用的。

引用来自“文敦赋”的评论

xml里面的是sql 这个给谁看?

引用来自“yong9981”的评论

我的意思是说XML太罗嗦了,看看下面多少个废词:
<association property="author" column="blog_author_id" javaType="Author" >
   <id property="id" column="author_id"/>
   <result property="username" column="author_username"/>
   <result property="password" column="author_password"/>
   <result property="email" column="author_email"/>
   <result property="bio" column="author_bio"/>
</association>
association 开头结尾要对应, result property、column 重复了多少遍?这得打多少字,错一个字都不行,没有代码提示,纯苦力的干活。

引用来自“浩渺行无极”的评论

你还在手写?ibatis时代就有配置生成了 而且支持直接返回map 字段名自动转驼峰 这是看了个入门文档就下结论的节奏?

引用来自“yong9981”的评论

有配置生成工具不也反映了MyBatis自已都讨厌XML吗? 与其如此干吗不直接甩掉XML?

引用来自“浩渺行无极”的评论

还真可以不用xml 能先看看资料吗?为了扛而扛没有任何意义

引用来自“yong9981”的评论

你说的是Annotation吗? 这是MyBatis官网上的原话:
Annotations that avoid the need for XML. However, due to some limitations of Java Annotations and the complexity of some MyBatis mappings, XML mapping is still required for the most advanced mappings (e.g. Nested Join Mapping).
XML太啰嗦,Annotation又有局限性,所以jSqlBox使用Java语言本身来当作配置,在方法调用的同时就相当于配置。
这不就是把繁琐的配置写在代码里了嘛 还以为吐槽MyBatis配置复杂是为了说明自己可以不用配置了呢 自己造轮子没有错相反这种精神很优秀 但是为了推广还给对手按一个莫须有的槽点骗新人入坑 这样不好 不好
yong9981
yong9981

引用来自“完颜阿骨再打”的评论

性能测试数据有点假

引用来自“二灯大师”的评论

现在谁都在说自家的强

引用来自“yong9981”的评论

jSqlBox不敢说比其它工具强,至少在稳定性上拍马都赶不上,但至少在某些解决方案上对于其它DAO工具的开发还是有借签意义的。ORM工具层出不穷的原因是没人对现有的ORM工具满意,对于我来说,只要MyBatis还支持XML,我就对它不感冒的,XML那是给机器看的,不是给人用的。

引用来自“文敦赋”的评论

xml里面的是sql 这个给谁看?

引用来自“yong9981”的评论

我的意思是说XML太罗嗦了,看看下面多少个废词:
<association property="author" column="blog_author_id" javaType="Author" >
   <id property="id" column="author_id"/>
   <result property="username" column="author_username"/>
   <result property="password" column="author_password"/>
   <result property="email" column="author_email"/>
   <result property="bio" column="author_bio"/>
</association>
association 开头结尾要对应, result property、column 重复了多少遍?这得打多少字,错一个字都不行,没有代码提示,纯苦力的干活。

引用来自“浩渺行无极”的评论

你还在手写?ibatis时代就有配置生成了 而且支持直接返回map 字段名自动转驼峰 这是看了个入门文档就下结论的节奏?

引用来自“yong9981”的评论

有配置生成工具不也反映了MyBatis自已都讨厌XML吗? 与其如此干吗不直接甩掉XML?

引用来自“浩渺行无极”的评论

还真可以不用xml 能先看看资料吗?为了扛而扛没有任何意义
你说的是Annotation吗? 这是MyBatis官网上的原话:
Annotations that avoid the need for XML. However, due to some limitations of Java Annotations and the complexity of some MyBatis mappings, XML mapping is still required for the most advanced mappings (e.g. Nested Join Mapping).
XML太啰嗦,Annotation又有局限性,所以jSqlBox使用Java语言本身来当作配置,在方法调用的同时就相当于配置。
强子1985
强子1985
从用户习惯来说可能推广不容易
小99
小99

引用来自“小99”的评论

我们的分库分表是这样的,不知道支持不,用户id%256是表索引,表索引是4位,前面补0。用户id%256/16是库索引,库索引是3位,前面补0。

引用来自“yong9981”的评论

要在初始化SqlBoxContext时配置自定义的ShardingTool才行,具体怎么编写可以参考一下ShardingModTool 的源码,这是一个实现了ShardingTool接口的实现类。 然后设定SqlBoxContext.setShardingTool(new ShardingTool[]{自定义ShardingTool})。 然后在实体ID字段上同时加两个注解@ShardTable("自定义sharding策略名",参数...) 和@ShardDatabase("自定义sharding策略名",参数...)
好的呢,非常感谢
浩渺行无极
浩渺行无极

引用来自“完颜阿骨再打”的评论

性能测试数据有点假

引用来自“二灯大师”的评论

现在谁都在说自家的强

引用来自“yong9981”的评论

jSqlBox不敢说比其它工具强,至少在稳定性上拍马都赶不上,但至少在某些解决方案上对于其它DAO工具的开发还是有借签意义的。ORM工具层出不穷的原因是没人对现有的ORM工具满意,对于我来说,只要MyBatis还支持XML,我就对它不感冒的,XML那是给机器看的,不是给人用的。

引用来自“文敦赋”的评论

xml里面的是sql 这个给谁看?

引用来自“yong9981”的评论

我的意思是说XML太罗嗦了,看看下面多少个废词:
<association property="author" column="blog_author_id" javaType="Author" >
   <id property="id" column="author_id"/>
   <result property="username" column="author_username"/>
   <result property="password" column="author_password"/>
   <result property="email" column="author_email"/>
   <result property="bio" column="author_bio"/>
</association>
association 开头结尾要对应, result property、column 重复了多少遍?这得打多少字,错一个字都不行,没有代码提示,纯苦力的干活。

引用来自“浩渺行无极”的评论

你还在手写?ibatis时代就有配置生成了 而且支持直接返回map 字段名自动转驼峰 这是看了个入门文档就下结论的节奏?

引用来自“yong9981”的评论

有配置生成工具不也反映了MyBatis自已都讨厌XML吗? 与其如此干吗不直接甩掉XML?
还真可以不用xml 能先看看资料吗?为了扛而扛没有任何意义
yong9981
yong9981

引用来自“小99”的评论

我们的分库分表是这样的,不知道支持不,用户id%256是表索引,表索引是4位,前面补0。用户id%256/16是库索引,库索引是3位,前面补0。
要在初始化SqlBoxContext时配置自定义的ShardingTool才行,具体怎么编写可以参考一下ShardingModTool 的源码,这是一个实现了ShardingTool接口的实现类。 然后设定SqlBoxContext.setShardingTool(new ShardingTool[]{自定义ShardingTool})。 然后在实体ID字段上同时加两个注解@ShardTable("自定义sharding策略名",参数...) 和@ShardDatabase("自定义sharding策略名",参数...)
yong9981
yong9981

引用来自“完颜阿骨再打”的评论

性能测试数据有点假

引用来自“二灯大师”的评论

现在谁都在说自家的强

引用来自“yong9981”的评论

jSqlBox不敢说比其它工具强,至少在稳定性上拍马都赶不上,但至少在某些解决方案上对于其它DAO工具的开发还是有借签意义的。ORM工具层出不穷的原因是没人对现有的ORM工具满意,对于我来说,只要MyBatis还支持XML,我就对它不感冒的,XML那是给机器看的,不是给人用的。

引用来自“文敦赋”的评论

xml里面的是sql 这个给谁看?

引用来自“yong9981”的评论

我的意思是说XML太罗嗦了,看看下面多少个废词:
<association property="author" column="blog_author_id" javaType="Author" >
   <id property="id" column="author_id"/>
   <result property="username" column="author_username"/>
   <result property="password" column="author_password"/>
   <result property="email" column="author_email"/>
   <result property="bio" column="author_bio"/>
</association>
association 开头结尾要对应, result property、column 重复了多少遍?这得打多少字,错一个字都不行,没有代码提示,纯苦力的干活。

引用来自“浩渺行无极”的评论

你还在手写?ibatis时代就有配置生成了 而且支持直接返回map 字段名自动转驼峰 这是看了个入门文档就下结论的节奏?
有配置生成工具不也反映了MyBatis自已都讨厌XML吗? 与其如此干吗不直接甩掉XML?
许雷神
许雷神
可以呢,居然比beetsql长得高
返回顶部
顶部