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查询的多个字段之间要用逗号“,”分割,如果查询涉及多个表,那多个表之 ...
随机推荐
- node-webkit 环境搭建与基础demo
首先去github上面下载(地址),具体更具自己的系统,我的是windows,这里只给出windows的做法 下载windows x64版本 下载之后解压,得到以下东西 为了方便,我们直接在这个目录中 ...
- 实时的.NET程序错误监控产品Exceptionless
Exceptionless可以对ASP.NET, Web API, WebForms, WPF, Console, 和 MVC 应用提供错误监控.上传.报表服务.使用时需要在Exceptionless ...
- 让 windows 下的命令行程序 cmd.exe 用起来更顺手
在 Windows 下使用 Larave 框架做开发,从 Composer 到 artisan 总是避免不了和 cmd.exe 打交道,系统默认的命令行界面却是不怎么好看,且每行显示的字符数是做了限制 ...
- xpath提取多个标签下的text
title: xpath提取多个标签下的text author: 青南 date: 2015-01-17 16:01:07 categories: [Python] tags: [xpath,Pyth ...
- JavaScript动画-碰撞检测
▓▓▓▓▓▓ 大致介绍 碰撞检测是指在页面中有多个元素时,拖拽一个元素会出现碰撞问题,碰撞检测是以模拟拖拽和磁性吸附中的范围限定为基础的 效果:碰撞检测 ▓▓▓▓▓▓ 碰撞检测 先来看看碰撞检测的原理 ...
- 防线修建 bzoj 2300
防线修建(1s 512MB)defense [问题描述] 近来A国和B国的矛盾激化,为了预防不测,A国准备修建一条长长的防线,当然修建防线的话,肯定要把需要保护的城市修在防线内部了.可是A国上层现在还 ...
- VS2015墙内创建ionic2
开始学习ionic2,试验各种方法,感觉以下是紧跟rc版本的最佳方案 STEP1 设置cnpm npm install -g cnpm --registry=https://registry.npm. ...
- Git学习笔记一:新建本地仓库及初始化
1.百度搜索Git下载安装,直接按默认选项安装即可. 例如:Git-2.7.2-32-bit_setup.1457942412.exe 2.配置Git信息,建立版本仓库 (Alt+PrintScerr ...
- Linux初识
在这篇文章中你讲看到如下内容: 计算机的组成及功能: Linux发行版之间的区别和联系: Linux发行版的基础目录及功用规定: Linux系统设计的哲学思想: Linux系统上获取命令帮助,及man ...
- 机器指令翻译成 JavaScript —— 终极目标
上一篇,我们顺利将 6502 指令翻译成 C 代码,并演示了一个案例. 现在,我们来完成最后的目标 -- 转换成 JavaScript. 中间码输出 我们之所以选择 C,就是为了使用 LLVM.现在来 ...