这等Java ORM的优雅设计,你见识过吗?

摘要:Java的ORM框架有很多,但由于Java语言的限制大部分都不够优雅也不够简单,所以作者只能另辟蹊径造轮子了。照旧先看示例代码了解个大概,然后再解释实现原理。 一、ORM示例 1. Insert public CompletableFutu
Java的ORM框架有很多,但由于Java语言的限制大部分都不够优雅也不够简单,所以作者只能另辟蹊径造轮子了。照旧先看示例代码了解个大概,然后再解释实现原理。 一、ORM示例 1. Insert public CompletableFuture<Void> insert() { var obj = new sys.entities.Demo("MyName"); //构造参数为主键 obj.Age = 100; //设置实体属性的值 return obj.saveAsync(); } 2. Update 更新单个实体(必须具备主键) public CompletableFuture<Void> update(sys.entities.Demo obj) { obj.Age = 200; return obj.saveAsync(); } 根据条件更新(必须指定条件以防误操作) public CompletableFuture<?> update() { var cmd = new SqlUpdateCommand<sys.entities.Demo>(); cmd.update(e -> e.City = "Wuxi"); //更新字段 cmd.update(e -> e.Age = e.Age + 1); //更新累加字段 cmd.where(e -> e.Name == "Johne"); //更新的条件 var outs = cmd.output(e -> e.Age); //更新的同时返回指定字段 return cmd.execAsync().thenApply(rows -> { System.out.println("更新记录数: " + rows); System.out.println("返回的值: " + outs.get(0)); return "Done."; }); } 3. Delete 删除单个实体(必须具备主键) public CompletableFuture<Void> update(sys.entities.Demo obj) { obj.markDeleted(); //先标记为删除状态 return obj.saveAsync(); //再调用保存方法 } 根据条件删除(必须指定条件以防误操作) public CompletableFuture<?> delete() { var cmd = new SqlDeleteCommand<sys.entities.Demo>(); cmd.where(e -> e.Age < 0 || e.Age > 200); return cmd.execAsync(); } 4. Transaction   由于作者讨厌隐式事务,所以事务命令必须显式指定。
阅读全文