jSqlBox2.0.2版发布,主要改进:
jSqlBox是一款基于DbUtils内核开发的全功能数据库持久层工具,同时具备底层JDBC操作和上层ORM实体CURD、关联查询功能,具体功能大家可以看用户手册,就不多介绍了。下面只是列一下jSqlBox的独门武器,看看它和其它持久层工具相比有哪些特殊之处: 1. 自带DDL生成功能,支持几乎所有数据库(70多种数据库方言)。示例: SqlBoxContext ctx = new SqlBoxContext(dataSource); String[] ddls = ctx.toCreateDDL(User.class); 2. 无接口、无实现、无DAO、无配置,用最少的文件和语法完成最多的功能: 当实体多达上百个时,想一想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. 还有其它一些特点就不详细介绍了,只是简单提一下: |