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的平台上体会到函数式编程的便利了。
Speedment -- 利用lambda编写SQL的更多相关文章
- 利用脚本修改SQL SERVER排序规则
利用脚本修改SQL SERVER排序规则 编写人:CC阿爸 2014-3-1 l 今年的一项重要工作是对公司所用系统进行繁简的转换,程序转成简体基本很容易解决,但数据库转换成简体,就没那么容易了.经 ...
- LoadRunner利用ODBC编写MySql脚本
最近做了几周的LoadRunner测试,有一些心得,记录下来,以便以后查找. LoadRunner测试数据库是模拟客户端去连接数据库服务器,因此,需要协议(或者说驱动的支持).LoadRunner本身 ...
- 利用java编写的盲注脚本
之前在网上见到一个盲注的题目,正好闲来无事,便用java写了个盲注脚本,并记录下过程中的坑 题目源码: <?php header("Content-Type: text/html;ch ...
- Atiitt 使用java语言编写sql函数或存储过程
Atiitt 使用java语言编写sql函数或存储过程 1.1. java编写sql函数或存储过程的机制1 1.2. Java编写sp的优点1 1.3. 支持java源码,class文件,blog f ...
- 品味性能之道<九>:利用Loadrunner编写socket性能测试脚本简述
一.概述 Loadrunner拥有极为丰富的工具箱,供予我们制造出各种奇妙魔法的能力.其中就有此次要讨论的socket套接字操作. 二.socket概述 ...
- 缓存策略 半自动化就是mybaitis只支持数据库查出的数据映射到pojo类上,而实体到数据库的映射需要自己编写sql语句实现,相较于hibernate这种完全自动化的框架我更喜欢mybatis
springboot入门(三)-- springboot集成mybatis及mybatis generator工具使用 - FoolFox - CSDN博客 https://blog.csdn.net ...
- 利用HAProxy代理SQL Server的AlwaysOn辅助副本
利用HAProxy代理SQL Server的AlwaysOn辅助副本 公司最近数据库升级到SQL Server2014 ,并部署了alwayson高可用集群 机房内有三套程序需要读取数据库 第一套:主 ...
- 利用lambda和Collection.forEach
2.外部VS内部迭代 以前Java集合是不能够表达内部迭代的,而只提供了一种外部迭代的方式,也就是for或者while循环. 1 2 3 4 List persons = asList(new Per ...
- 如果一条SQL语句太长,我们可以通过回车键来创建一个新行来编写SQL语句,SQL语句的命令结束符为分号(;)。
1.如果一条SQL语句太长,我们可以通过回车键来创建一个新行来编写SQL语句,SQL语句的命令结束符为分号(;). 2.select查询的多个字段之间要用逗号“,”分割,如果查询涉及多个表,那多个表之 ...
随机推荐
- TODO:小程序开发过程之体验者
TODO:小程序开发过程之体验者 1. 小程序开发过程,先下载开发者并安装开发者工具,现在腾讯开放测试了,普通用户也可以登录开发者工具,如图普通用户登录为调试类型,但是只能建立无AppID的项目 如果 ...
- macOS 我的装机
最近多次配置 Mac 的开发环境,稍微记录一下 1 创建无付费信息的Apple ID 2 Xcode gem 源更改 3 Alfred 4 微信 5 SourceTree 6 Sublime Te ...
- Bootstrap 模态框(Modal)插件
页面效果: html+js: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- 后缀数组的倍增算法(Prefix Doubling)
后缀数组的倍增算法(Prefix Doubling) 文本内容除特殊注明外,均在知识共享署名-非商业性使用-相同方式共享 3.0协议下提供,附加条款亦可能应用. 最近在自学习BWT算法(Burrows ...
- 水平可见直线 bzoj 1007
水平可见直线 (1s 128M) lines [问题描述] 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆 ...
- 分享两个BPM配置小技巧
1.小技巧 流程图修改后发布的话版本号会+1,修改次数多了之后可能会导致版本号很高,这个时候可以将流程导出,然后删除对应的流程包再导入,发布数据模型和流程图之后,版本清零 2.小技巧 有的同事入职后使 ...
- Linux下高cpu解决方案
昨天搞定了一个十万火急的issue,客户抱怨产品升级后系统会变慢和CPU使用率相当高,客户脾气很大,声称不尽快解决这个问题就退货,弄得我们 R&D压力很大,解决这个issue的任务分给了我,客 ...
- 一步步开发自己的博客 .NET版(1、基本显示)
前言 我们每个猿都有一个搭建自己独立博客的梦,我也不例外.以前想 现在想 以后也想.之所以一直迟迟没有着手,是因为难以跨出第一步.每次心里想着,等我以后技术好了再说,然后就没有然后了.以前用过word ...
- WinRT自定义控件第一 - 转盘按钮控件
之前的文章中,介绍了用WPF做一个转盘按钮控件,后来需要把这个控件移植到WinRT时,遇到了很大的问题,主要原因在于WPF和WinRT还是有很大不同的.这篇文章介绍了这个移植过程,由于2次实现的控件功 ...
- ASP.NET Web API Model-ParameterBinding
ASP.NET Web API Model-ParameterBinding 前言 通过上个篇幅的学习了解Model绑定的基础知识,然而在ASP.NET Web API中Model绑定功能模块并不是被 ...