SQL写法8 - Data Mapper数据映射风格,与Hibernate中的写法一样。大年夜机能方面推敲,jSqlBox强烈建议实体类持续于ActiveRecord类,然则对于纯粹的POJO类,jSqlBox也是支撑的:
User user = new User("Sam", "Canada"); ctx.insert(user); user.setAddress("China"); ctx.update(user); User user2 = ctx.load(User.class, "Sam"); ctx.delete(user2);SQL写法9 - ActiveRecord风格,持续于ActiveRecord类的实体类,主动拥有insert/update/delete等CRUD办法和一个box()办法可用来在运行期动态更改设备。jSqlBox项目定名的由来即因为这个box()办法。
System.out.println("=== ActiveRecord style ==="); user = new User("Sam", "Canada"); user.box().setContext(ctx);// set a SqlBoxContext to entity user.insert(); user.setAddress("China"); user.update(); user2 = user.load("Sam"); user2.delete();以下是ActiveRecord风格的一个变种,应用这种写法的前提是必须在法度榜样启动时调用SqlBoxContext.setDefaultContext(ctx)办法设定一个全局缺省高低文,实用于单数据源场合。这种写法的长处是营业办法里完全看不到持久层对象的影子:
user = new User("Sam", "Canada").insert(); user.setAddress("China"); user.update(); user2 = user.load("Sam"); user2.delete();SQL写法10 - 链式风格,严格来嗣魅这种风格照样应当归类于ActiveRecord模式。
链式风格之一: new User().put("id","u1").put("userName","user1").insert(); 链式风格之二: new Address().put("id","a1","addressName","address1","userId","u1").insert(); 链式风格之三: new Email().putFields("id","emailName","userId"); new Email().putValues("e1","email1","u1").insert(); new Email().putValues("e2","email2","u1").insert();下面要介绍的是jSqlBox项目中的NoSql式萌芽办法,对于下图的一组关系数据库表格,User与Role是多对多关系,Role与Privilege是多对多关系,UserRole和RolePrivilege是两个中心表,用来连接多对多关系。如不雅用通俗的SQL进行多表接洽关系萌芽比较麻烦,jSqlBox中包含了一个TinyNet子项目,专门用于将关系数据库转化为内存中的图构造,大年夜而可以应用NoSql式萌芽办法,在节点间浏览萌芽。

NoSql萌芽示例1 一 查找u1和u2两个用户所具有的权限
TinyNet net = ctx.netLoad(new User(), new Role(), Privilege.class, UserRole.class, RolePrivilege.class); Set<Privilege> privileges = net.findEntitySet(Privilege.class, new Path("S-", User.class).where("id=? or id=?","u1","u2").nextPath("C-", UserRole.class, "userId") .nextPath("P-", Role.class, "rid").nextPath("C-", RolePrivilege.class, "rid") .nextPath("P+", Privilege.class, "pid")); for (Privilege privilege : privileges) System.out.print(privilege.getId()+" "); 输出结不雅:p1 p2 p3解释:
-
与netLoad办法类似的一个办法是netLoadSketch办法,不是将全表加载,而是只加载所有主键和外键字段,这种懒加载可以进步机能并节约内存。
-
Path用于定义一个查找路径,构造器的第一个参数由两个字母构成,首字母S表示查找当前节点,P表示查找父节点,C表示查找子节点。第二个字母"-"表示查找的中心结不雅不放入萌芽结不雅,"+"则放入萌芽结不雅,"*"表示递归当前路径查找所有节抱病放入萌芽结不雅。第二个参数定义目标对象类、类实例或数据库表名,第三个参数为可变参数,为两个目标之间的接洽关系属性或接洽关系列(即单外键或复合外键的列名),例如User和UserRole之间的接洽关系字段为"userId"。
-
jSqlBox应用了jDialects进行跨数据库的(物理)分页,在出现SQL的处所,以下几种写法都可实现分页萌芽:
Path的nextPath()办法用于定义下一?查找路径。
NoSql萌芽示例2 一 主动越级萌芽。示例1的写法比较烦琐,下面是等价写法,用autoPath办法可以主动计算出搜刮路径,大年夜而实现越级萌芽:
留意autoPath办法仅实用于查找路径独一的情况,如不雅大年夜User到Privilege有多个不合路径通晓,就不克不及应用autoPath办法,而必须写出全路径。
推荐阅读
开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散 DB-Engines 宣布了 2017 年 12 月份的数据库排名。排前 20 名的数据库中,Oracle 稳居第一,排名在第 9 名的 Cassandra 赶超排在第>>>详细阅读
本文标题:历时一年,Java 持久层工具 jSqlBox 迎来首个正式版
地址:http://www.17bianji.com/lsqh/39474.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示