java摩尔常量_认识反摩尔定律的Java 8神器Speedment,实现数据库代码减半

认识反摩尔定律的

Java 8神器Speedment

实现数据库代码减半

0818b9ca8b590ca3270a3433284dd417.png

回想九十年代末期我刚开始写Java数据库应用的时候什么事都得自己做。代码很多,而且异常处理对象转换都得自己写,所以很快代码就变得难以维护了。 就算是今天把Java和数据库这两个不同世界的东西联系起来还是相当的麻烦。

你得自己写映射层或者使用Hibernate这样的ORM工具,使用ORM当然会方便点但配置的时候比较容易出错。很多时候ORM也会让程序变慢。 最近我参与了一个新的开源项目Speedment,希望它能减轻广大Java 8数据库应用开发者们的工作量。

0818b9ca8b590ca3270a3433284dd417.png

1

Speedment是什么

Speedment是一个针对Java 8所设计开源库,它从一开始就是使用Java 8开发的。Speedment使用标准的流式操作来进行数据库查询所以开发人员不需要学习新的查询API。用了Speedment你就可以从此忘了JDBC和ResultSet了。

Speedment可以自动分析数据库并生成代码和文档,所以开发人员不用为数据库实体写任何一行代码。开发人员只需要创建一个数据库并连接到Speedment,剩下的工作都可以交给Speedment了。我们给Speedment设计的吉祥物是个卡通小野兔,所以我在例子里面就用hare这个英文单词作为表的名字。

0818b9ca8b590ca3270a3433284dd417.png

mysql>explainhare;

+-------+-------------+------+-----+---------+----------------+

|Field| Type |Null|Key|Default| Extra |

+-------+-------------+------+-----+---------+----------------+

| id |int(11) |NO| PRI |NULL|auto_increment|

| name |varchar(45) |NO| |NULL| |

| color |varchar(45) |NO| |NULL| |

| age |int(11) |NO| |NULL| |

+-------+-------------+------+-----+---------+----------------+

4rowsinset(0.01sec)

Speedment会分析这个表并生成下面的代码:

publicinterfaceHareextendsEntity {

publicfinalstaticReferenceComparableField ID =newReferenceComparableFieldImpl<>("id", Hare::getId, Hare::setId);

publicfinalstaticReferenceComparableStringField NAME =newReferenceComparableStringFieldImpl<>("name", Hare::getName, Hare::setName);

publicfinalstaticReferenceComparableStringField COLOR =newReferenceComparableStringFieldImpl<>("color", Hare::getColor, Hare::setColor);

publicfinalstaticReferenceComparableField AGE =newReferenceComparableFieldImpl<>("age", Hare::getAge, Hare::setAge);

Integer getId();

String getName();

String getColor();

Integer getAge();

Hare setId(Integer id);

Hare setName(String name);

Hare setColor(String color);

Hare setAge(Integer age);

/** Graph-like traversal methods eliminating JOINs */

Stream findCarrotsByOwner();

Stream findCarrotsByRival();

Stream findCarrots();

}

2

查询

下面的代码是对Hare表进行查询的一个例子:

List oldHares = hares.stream()

.filter(AGE.greaterThan(8))

.collect(toList());

3

智能流

上面的代码看起来似乎会需要用到Hare表里所有的行,然而事实并非如此。这也就是它“智能”的地方。运行到collect()的时候,它会知道需要把Hare表里的AGE与8进行比较所以可以减少对数据库的压力。如果你所写的过滤条件更多那么智能流的内容也就更少。下面是另一个例子:

longnoOldHares = hares.stream()

.filter(AGE.greaterThan(8))

.mapToInt(Hare::getAge)

.sorted()

.count();

因为最后的操作是count,所以Speedment会自动忽略sort和mapToInt因为它们对于count操作的结果没有任何影响。这意味着开发人员可以只专注于程序逻辑,不必操心语句是如何转换为SQL的。

4

下载

欢迎到Speedment官网www.speedment.org看看,上面有API文档和教程。Speedment托管在GitHub上面,大家可以在上面下载源代码或者提交反馈。

5

小结

代码也是遵守反摩尔定律的:我前些年写的100行数据库代码现在只需要一行Java 8代码,正好每两年长度减少一半。这就是进步啊!

▼参与本文讨论请猛戳“阅读原文”

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值