众所周知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的平台上体会到函数式编程的便利了。

Speedment -- 利用lambda编写SQL的更多相关文章

  1. 利用脚本修改SQL SERVER排序规则

    利用脚本修改SQL SERVER排序规则 编写人:CC阿爸 2014-3-1 l  今年的一项重要工作是对公司所用系统进行繁简的转换,程序转成简体基本很容易解决,但数据库转换成简体,就没那么容易了.经 ...

  2. LoadRunner利用ODBC编写MySql脚本

    最近做了几周的LoadRunner测试,有一些心得,记录下来,以便以后查找. LoadRunner测试数据库是模拟客户端去连接数据库服务器,因此,需要协议(或者说驱动的支持).LoadRunner本身 ...

  3. 利用java编写的盲注脚本

    之前在网上见到一个盲注的题目,正好闲来无事,便用java写了个盲注脚本,并记录下过程中的坑 题目源码: <?php header("Content-Type: text/html;ch ...

  4. Atiitt 使用java语言编写sql函数或存储过程

    Atiitt 使用java语言编写sql函数或存储过程 1.1. java编写sql函数或存储过程的机制1 1.2. Java编写sp的优点1 1.3. 支持java源码,class文件,blog f ...

  5. 品味性能之道<九>:利用Loadrunner编写socket性能测试脚本简述

            一.概述         Loadrunner拥有极为丰富的工具箱,供予我们制造出各种奇妙魔法的能力.其中就有此次要讨论的socket套接字操作.     二.socket概述     ...

  6. 缓存策略 半自动化就是mybaitis只支持数据库查出的数据映射到pojo类上,而实体到数据库的映射需要自己编写sql语句实现,相较于hibernate这种完全自动化的框架我更喜欢mybatis

    springboot入门(三)-- springboot集成mybatis及mybatis generator工具使用 - FoolFox - CSDN博客 https://blog.csdn.net ...

  7. 利用HAProxy代理SQL Server的AlwaysOn辅助副本

    利用HAProxy代理SQL Server的AlwaysOn辅助副本 公司最近数据库升级到SQL Server2014 ,并部署了alwayson高可用集群 机房内有三套程序需要读取数据库 第一套:主 ...

  8. 利用lambda和Collection.forEach

    2.外部VS内部迭代 以前Java集合是不能够表达内部迭代的,而只提供了一种外部迭代的方式,也就是for或者while循环. 1 2 3 4 List persons = asList(new Per ...

  9. 如果一条SQL语句太长,我们可以通过回车键来创建一个新行来编写SQL语句,SQL语句的命令结束符为分号(;)。

    1.如果一条SQL语句太长,我们可以通过回车键来创建一个新行来编写SQL语句,SQL语句的命令结束符为分号(;). 2.select查询的多个字段之间要用逗号“,”分割,如果查询涉及多个表,那多个表之 ...

随机推荐

  1. .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类

    .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...

  2. 探真无阻塞加载javascript脚本技术,我们会发现很多意想不到的秘密

    下面的图片是我使用firefox和chrome浏览百度首页时候记录的http请求 下面是firefox: 下面是chrome: 在浏览百度首页前我都将浏览器的缓存全部清理掉,让这个场景最接近第一次访问 ...

  3. Modify Branding of FreeCAD

    Modify Branding of FreeCAD eryar@163.com This article describes the Branding of FreeCAD. Branding me ...

  4. .net erp(办公oa)开发平台架构概要说明之表单设计器

    背景:搭建一个适合公司erp业务的开发平台.   架构概要图: 表单设计开发部署示例图    表单设计开发部署示例说明1)每个开发人员可以自己部署表单设计至本地一份(当然也可以共用一套开发环境,但是如 ...

  5. Android 剪贴板详解

    版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Clipboard 如本文有助于你理解 Android 剪贴板,不妨给我一个 Star.对于码农而言, ...

  6. CGI与FastCGI nginx+PHP-FPM

    本文转载自CGI与FastCGI 1.当我们在谈到cgi的时候,我们在讨论什么 最早的Web服务器简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器,也就是静态html. ...

  7. C#调用C++代码遇到的问题总结

    最近在开发服务后台的时候,使用c#调用了多个c++编写的dll,期间遇到了一系列的问题,经过一番努力最后都一一解决了,在此做个总结,方便以后参考,毕竟这些问题也都是很常见的,主要有以下问题: 类型对照 ...

  8. 【转】外部应用和drools-wb6.1集成解决方案

    一.手把手教你集成外部应用和drools workbench6.1 1.         首先按照官方文档安装workbench ,我用的是最完整版的jbpm6-console的平台系统,里面既包含j ...

  9. jquery.each()

    $(selector).each(function(index,element)) index - 选择器的 index 位置 element - 当前的元素(也可使用 "this" ...

  10. vue.js几行实现的简单的todo list

    序:目前前端框架如:vue.react.angular,构建工具fis3.gulp.webpack等等...... 可谓是五花八门,层出不穷,眼花缭乱...其实吧只要你想玩还是可以玩玩的..下面是看了 ...