NoSql萌芽示例3 一 Java原生办法断定。用Java原生办法进行节点的断定,可以应用熟悉的Java说话并且支撑实体字段的重构。以下示例萌芽Email "e1"和"e5"所接洽关系的权限:@Test public void testAutoPath2() { insertDemoData(); TinyNet net = ctx.netLoad(new Email(), new User(), new Role(), Privilege.class, UserRole.class, RolePrivilege.class); Set privileges = net.findEntitySet(Privilege.class, new Path(Email.class).setValidator(new EmailValidator()).autoPath(Privilege.class)); for (Privilege privilege : privileges) System.out.println(privilege.getId()); Assert.assertEquals(1, privileges.size()); } public static class EmailValidator extends DefaultNodeValidator { @Override public boolean validateBean(Object entity) { Email e = (Email) entity; return ("e1".equals(e.getId()) || "e5".equals(e.getId())) ? true : false; } }
NoSql示例4 手工加载。 TinyNet的加载也可以手工按需加载,而不是用netLoad办法全表调入,例如下表运行两个SQL,分两次萌芽数据库并将结不雅归并成一个TinyNet实例:
SQL写法3 - nXxxx()办法,大年夜jDbPro项目开端新参加的办法,不消再捕获SqlException异常。SqlException转化为运行时异常抛出,这种方法平日与支出声明式事务的AOP对象如Spring联用(下同)。
上例中两个星号这种写法是jSqlBox项目中独一打破标准SQL写法的处所,它表示萌芽User对象所有非transient属性所对应的数据库表字段。
NoSql萌芽示例5 一 树构造的萌芽,对于Adjacency List模式存储的树构造数据表,应用NoSQL萌芽异常便利,例如如下数据库表格:
萌芽B节点和D节点的所有子节点(含B和D节点本身):TinyNet net = ctx.netLoad(TreeNode.class); Set TreeNodes = net.findEntitySet(TreeNode.class, new Path("S+", TreeNode.class).where("id=? or id=?", "B", "D").nextPath("C*", TreeNode.class, "pid")); for (TreeNode node : TreeNodes) System.out.print(node.getId() + " "); 输出: B D E F H I J K L
萌芽F节点和K节点的所有父节点(不含F和K节点本身):TinyNet net = ctx.netLoad(TreeNode.class); Set TreeNodes = net.findEntitySet(TreeNode.class, new Path("S-", TreeNode.class).where("id='F' or id='K'").nextPath("P*", TreeNode.class, "pid")); for (TreeNode node : TreeNodes) System.out.print(node.getId() + " "); 输出: B H A D
对于海量数据的大年夜树,用netLoad办法调入全表到内存再用NoSQL办法萌芽是不实际的,这时可应用数据库的递归萌芽功能将一棵子树查找到内存中再用NoSQL办法萌芽。如不雅数据库不支撑递归或有机能问题,也可参照本人创造的无穷深度树筹划的第三种筹划(见http://drinkjava2.iteye.com/blog/2353983 ),可以仅用一条SQL语句萌芽出所须要的子树调入内存中。
对了,最后说一下,可能有人已经留意到,在膳绫擎的示例中,什么一对多,多对多之类其它ORM对象必弗成少的设备在哪里? 谜底是:还记得一开端动态设备的示例演示中,有这么一句么: u.tableModel().fkey().columns("teamId").refs("team", "id"); 这就是多对一设备了,还有一个FKey注解也是干同样的事,表示给user数据库表的teamId列添加数据库外键,参考team表的id主键字段〖窃攸就是关系,这是为什么关系数据库被称为关系数据库,关系数据库只存在"多对一"这种独一的接洽关系,所以jSqlBox中没有什么多对多、一对多的设备,美满是基于传统的ER建模。jSqlBox支撑复合主键和复合外键(详见jDialects项目)。法度榜样员在运行期可以在法度榜样里自由地添加或删除实体的外键束缚设备(每个实体的设备都是固定设备的副本,只要不调用toCreateDDL办法生成脚本并履行,对实际数据库是没影响的),大年夜而可以自由地创建对象间的接洽关系,然后就可以用NoSQL方法萌芽了。别的说一下:NoSql萌芽是在不合类型的节点间浏览,所以返回结不雅也可所以不合的实体类,因篇幅原因就不在这里演示了。
以上即为jSqlBox的初步介绍,迎接大年夜家眷用和挑错,同时也迎接有兴趣者参加开辟组。PDF应用手册正在制造中。今朝如有兴趣试用的话,可参考本文介绍和单位测试源率攀来懂得本项目。
附录 - 机能测试。
以下是jSqlBox不合SQL写法进行轮回10000次CRUD操作的机能测试(单位测试源码SpeedTest.java),在H2内存数据库上跑(i3 2.4G),可以清除磁盘读写带来的影响,反竽暌钩框架出本身的机能。大年夜测试结不雅可以看出各类写法除了模板办法有点慢外,根本与纯JDBC相差不大年夜。
推荐阅读
开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散
DB-Engines 宣布了 2017 年 12 月份的数据库排名。排前 20 名的数据库中,Oracle 稳居第一,排名在第 9 名的 Cassandra 赶超排在第>>>详细阅读
地址:http://www.17bianji.com/lsqh/39474.html