Speedment -- 利用lambda編寫SQL
眾所周知Java8中加入了lambda語法,這一特性也幫助Java開發者極大的簡化了開發。Speedment是一個利用lambda表達式操作數據庫的框架,相比Java世界中現在非常流行的mybatis,它可以極大減少SQL語句的編寫。
從圖形界面開始使用Speedment
Speedment使用Groovy配置來找到數據庫并生成對應的一些Java代碼,groovy配置文件一般不需要自己來編寫,而是通過Speedment的maven插件來產生。
這里我使用的Speedment版本是2.2.2
要使用Speedment,首先要在maven的pom.xml文件中加入以下的內容:
<properties> ... <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <speedment.version>2.2.2</speedment.version> ... </properties> <build> <plugins> ... <plugin> <groupId>com.speedment</groupId> <artifactId>speedment-maven-plugin</artifactId> <version>${speedment.version}</version> </plugin> ... </plugins> </build> <dependencies> ... <dependency> <groupId>com.speedment</groupId> <artifactId>speedment</artifactId> <version>${speedment.version}</version> </dependency> ... </dependencies>
配置添加到pom.xml之后,在命令行輸入maven命令 mvn speedment:gui 來啟動Speedment GUI界面。
根據圖形界面上的提示,輸入數據庫的配置。
目前Speedment僅支持三種類型的數據庫:
- MySQL
- MariaDB
- PostgreSQL
其中PostgreSQL是2.2.3(也就是最新的版本)中新加入的,但是由于2.2.3的gui命令似乎有些問題,似乎PostgreSQL暫時還不可以使用Speedment來操作。
簡單操作的API
在代碼自動生成完畢之后,開發者幾乎不需要再去做什么配置就可以開始操作數據庫了。
初始化配置
Speedment有一個核心類 Speedment 來派生類 Manager 操作每一張表。
Speedment speedment = new TestApplication().withPassword("myPwd").build(); Manager<User> userManager = speedment.managerOf(User.class);
由于Speedment GUI在產生配置的使用并不會保存數據庫的密碼,所以在初始化類的時候,我們依舊需要輸入對應賬戶的數據庫密碼,才可以繼續操作數據庫。
持久化數據
每一個Speedment生成的實體類對象都擁有一個方法 persist() ,每當調用這個方法的時候,程序中的類就會持久化到數據庫中去。
User user = userManager.newInstance() .setAge(20) .setName("hello") .persist(); // persist()方法同樣適用于更新數據 user.setAge(21).persist();
當持久化異常的時候,Speedment會拋出一個 SpeedmentException 的異常信息。
數據刪除
利用 Manager 類還可以刪除對應的數據
userManager.remove(user);
數據查詢
查詢是SQL操作中相當重要的一環,這也是lambda表達式給SQL查詢帶來極大便利的一個地方,一般的orm框架的查詢都是基于非常繁瑣的配置才可以在程序中相對方便的使用查詢。
userManager.stream() .filter(user -> user.getAge().get() > 8) .collect(toList());
Java8的stream類中有一個 parallel() 方法,啟用之后Java會調用fork/join框架進行多核并行計算,在一些復雜查詢的時候,可以提高處理結果的效率。(但是并行計算會需要更多的啟動時間,在簡單查詢中并不是一個好的選擇。)
userManager.stream() .parallel() .filter(user -> user.getAge().get() > 8) .collect(toList());
序列化成JSON
JSON正在成為越來越重要是一種數據格式,在最新的MySQL5.7中MySQL也是開始支持json成為一種基本的數據格式了,Speedment中每一個數據記錄都可以利用 toJson() 函數被轉換成json格式
userManager.stream() .map(Hare::toJson) .forEach(System.out::println);
體驗指南
Speedment需要Java 8的支持,最新的版本應該是2.2.3,但最新的版本中, maven的gui命令似乎出現了一些bug,導致配置文件沒有辦法生成,建議各位可以先使用2.2.2體驗一下Speedment。
Java8出世已經有兩年的時間,像Speedment這樣圍繞lambda語法的框架開始逐漸增多,越來越多的開發者也可以開始在Java的平臺上體會到函數式編程的便利了。
來自: http://www.cnblogs.com/whthomas/p/speedment_start_up.html