q7goodies事例_Java 8 Friday Goodies:Lambda和SQL

q7goodies事例

在 Data Geekery ,我们喜欢Java。 而且,由于我们真的很喜欢 jOOQ的流畅的API和查询DSL ,我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 我们已经 写了一些关于Java 8好东西的博客 ,现在我们觉得是时候开始一个新的博客系列了,……

Java 8星期五

每个星期五,我们都会向您展示一些不错的教程风格的Java 8新功能,这些功能利用了lambda表达式,扩展方法和其他出色的功能。 您可以在GitHub上找到源代码 。

Java 8 Goodie:Lambda和SQL

如果您习惯于编写Groovy,这对您来说可能是“ so 2003”。 我们知道。 自成立以来,Groovy便知道一种非常有用的方式来编写基于字符串SQL。 这是用Groovy编写的示例( 请参阅此处的官方文档 ):

import groovy.sql.Sql
sql = Sql.newInstance( 'jdbc:h2:~/test', 'sa', '', 'org.h2.Driver' )
sql.eachRow( 'select * from information_schema.schemata' 
) { println "$it.SCHEMA_NAME -- $it.IS_DEFAULT" 
}

还要注意Groovy的内置String插值,您可以在其中将表达式放入字符串中。 但是,如果我们使用的是第三方库而不是直接使用JDBC,那么我们在Java领域,并且在Java 8中,Java / SQL集成也会变得更好。

在以下示例中,我们正在研究如何使用这三个流行的库从H2数据库中获取数据并将记录映射到自定义POJO / DTO中:

  • OO (震惊,我知道)
  • Spring数据/ JDBC
  • Apache Commons DbUtils

与往常一样, 这些资源也可以从GitHub获得 。 对于这些测试,我们将创建一些POJO / DTO来包装模式元信息:

class Schema {final String schemaName;final boolean isDefault;Schema(String schemaName, boolean isDefault) {this.schemaName = schemaName;this.isDefault = isDefault;}@Overridepublic String toString() {return "Schema{" +"schemaName='" + schemaName + '\'' +", isDefault=" + isDefault +'}';}
}

我们的主要方法将通过DriverManager获得H2连接:

Class.forName("org.h2.Driver");
try (Connection c = getConnection("jdbc:h2:~/test", "sa", "")) {String sql = "select schema_name, is_default "+"from information_schema.schemata "+"order by schema_name";// Library code here...
}

现在,当使用基于字符串SQL时,Java 8如何改进jOOQ API? 太好了! 查看以下小查询:

DSL.using(c).fetch(sql).map(r -> new Schema(r.getValue("SCHEMA_NAME", String.class),r.getValue("IS_DEFAULT", boolean.class))).forEach(System.out::println);

这应该是这样,对吗? 请注意,jOOQ的本机API还能够将数据库Record直接映射到您的POJO上,例如:

DSL.using(c).fetch(sql).into(Schema.class).forEach(System.out::println);

使用Spring JDBC和RowMapper时,事情看起来同样不错(请注意,以下内容仍会引发已检查的SQLException ):

new JdbcTemplate(new SingleConnectionDataSource(c, true)).query(sql, (rs, rowNum) -> new Schema(rs.getString("SCHEMA_NAME"),rs.getBoolean("IS_DEFAULT"))).forEach(System.out::println);

…如果您使用的是Apache DbUtils ,则可以执行几乎相同的操作:

new QueryRunner().query(c, sql, new ArrayListHandler()).stream().map(array -> new Schema((String) array[0],(Boolean) array[1])).forEach(System.out::println);

结论

这三种解决方案或多或少都是等效的,而且非常精简。 同样,这里的要点是Java 8将改进所有现有的API。 接受SAM参数(单一抽象方法类型)的方法越明确(很少重载!),对于Java 8集成越好。

下周,我们将看到使用java.util.Map API时将大大改善的几件事。

参考: Java 8 Friday Goodies:来自Java,CG和JOOQ博客的JCG合作伙伴 Lukas Eder的Lambda和SQL 。

翻译自: https://www.javacodegeeks.com/2014/02/java-8-friday-goodies-lambdas-and-sql.html

q7goodies事例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/344477.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤题库】陕西师范大学180208 产品管理 作业(专升本)

《产品管理》作业 一、单选题 1、产品的内涵不断扩大,产品的外延也发展到产品五层次,最基本的层次是( ),即向消费者提供的产品基本效用和利益,也是消费者真正要购买的利益和服务。 A 期望产品 B 一般产品 C…

【渝粤题库】陕西师范大学200221 中国思想史 作业(高起专)

一、单选题 "性善论"是谁提出来的? A老子 B孟子 C孔子 D庄子 2 ()(公元240~248年)是魏齐王曹芳的年号。 A建元 B元光 C元平 D正始父义、母慈、兄友、弟恭、子孝五种美德合称? A五义B 五则C五典 …

IDE日志分析方法pt。 2

介绍 在第一部分中,我解释了日志分析的理论方法,我认为这对维持工程师是最合适的。 这位工程师不需要在日志出现时立即对其进行分析,而是专注于对复杂问题的深入分析。 在第二部分中,我将展示一个复杂的模板可以涵盖许多搜索场景&…

【渝粤题库】陕西师范大学200821 课程与教学论(计算机)

《课程与教学论》作业 一、选择题 1.教师应有高尚的思想道德和渊博的知识及教育能力,还必须具备良好的心理素质。下面不属于教师心理素质方面的是( )。 A.意志 B.自我意识 C.情绪 D.…

java电影票选座_jQuery实现电影票选座效果手机端代码

部分js代码//判断页面加载完成window.onload function () {if (document.readyState "complete") {$("body").show();}};var arr []; //已选座位数组var dj 99; //电影票单价 number$(".danjia").text(dj);/*遍历检查售票状态typ 0 可选typ …

【渝粤题库】陕西师范大学201571金融法作业(专升本)

《金融法》作业 一、单项选择题 1.下列银行中属于政策性银行的有( )。 A.中国人民银行 B.中国农业银行 C.浦东发展银行 D.中国进出口银行 2.中央银行的职能不包括( )。 A.发行的银行 B.储户的银行 C.银行的…

java char指针数组_简单总结C语言中各种类型的指针的概念

C语言中有很多关于指针的使用,指针也是C语言的灵魂所在,而且C语言中也有很多有关指针的概念,这里学习并总结了一些知道的概念。常量指针:首先它是一个指针,常量只是用来修饰指针的定语。其定义如下:char co…

【渝粤题库】陕西师范大学202081 管理学 作业 (专升本、高起本、高起专)

《管理学〉作业 一、判断改错 1.使管理科学从重视对物的研究转向重视对人的研究的理论是马斯洛的需求层次理论。 2.根据亨利明茨伯格的研究,管理者扮演的决策方面的角色包括组织发言人、纠纷调解者、资源分配者和谈判者…

【渝粤题库】陕西师范大学202961 教育社会学 作业(高起本、专升本)

《教育社会学》作业 一、 单项选择题 1.从研究对象上讲,教育社会学探究的主要是 A.广义教育 B.中观教育 C.狭义教育 D.社会教育 2.教育社会对自身以外的其他社会现象所发生的功能是 A.教育社会的外功能 B.教育社会的内功能 C.教育社会的负功能…

java 面试指南_Java面试参考指南–第1部分

java 面试指南JAVA面向对象的概念 Java in基于面向对象的概念,它允许更高级别的抽象以实际方式解决任何问题。 面向对象的方法将实际对象中的问题解决方案概念化,更易于在整个应用程序中重用。 例如椅子,风扇,狗,电脑…

java 提交的内存_Java使用内存映射实现大文件的上传

在处理大文件时,如果利用普通的FileInputStream 或者FileOutputStream 抑或RandomAccessFile 来进行频繁的读写操作,都将导致进程因频繁读写外存而降低速度.如下为一个对比实验。package test;import java.io.BufferedInputStream;import java.io.FileIn…

【渝粤题库】陕西师范大学210006幼儿园课程作业(高起专)

《幼儿园课程》(专科)作业 一、单选题 1、活动课程是以( )为中心来组织学习内容的。 A 学科 B 问题 C 概念 D 儿童 2、( )指的是幼儿园教师根据实际情况灵活的将课程方案转化为生动的课程实践(现…

创建一个安全的Spring REST API

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。 “如果有用,它将被修改。” 这些智慧之言来自我的QA老师,他们…

【渝粤题库】陕西师范大学292071社会统计学作业(高起专)

《社会统计学》作业 一、单项选择题 1、从历史上看,在社会经济统计学的形成过程中,首先使用“统计学”这一术语的是( )。 A. 政治算术学派 B. 国势学派 C. 数理统计学派 D. 社会经济统计学派 2、社会统计的研究对象是(…

java并发编程十 原子累加器和Unsafe

文章目录 原子累加器cas 锁原理之伪共享 UnsafeUnsafe CAS 操作 原子累加器 累加器性能比较 private static <T> void demo(Supplier<T> adderSupplier, Consumer<T> action) {T adder adderSupplier.get();long start System.nanoTime();List<Thread…

mysql select 返回列_SQL / mysql – selectdistinct / UNIQUE,但返回所有列?

你正在寻找一个组&#xff1a;select * from table group by field1偶尔可以写一个独特的声明&#xff1a;select distinct on field1 * from table然而&#xff0c;在大多数平台上&#xff0c;上述两者都不会起作用&#xff0c;因为其他列上的行为是未指定的。 (MySQL中的第一…

【渝粤题库】陕西师范大学300018 世界史(下)

《世界史&#xff08;下&#xff09;》作业 一、名词解释 1、三权分立 2、考迪罗 3、斯大林格勒会战 4、马歇尔计划 5、匈牙利事件 6、美第奇家族 7、明治维新 8、人文主义 9、古巴导弹危机 10、奴隶贸易 11、七年战争 12、大西洋宪章 13、重商主义 14、文官制度 15、《解放宣言…

【渝粤题库】陕西师范大学600002 物理化学(下) 作业(专升本)

《物理化学&#xff08;下&#xff09;》作业 一.选择题 1.已知298 K时&#xff0c;(NH4)2SO4.NaOH.Na2SO4的 分别为3.064 10-2. 2.451 10-2.2.598 10-2 Sm2 mol-1&#xff0c;则NH4OH的为 ( ) A. 1.474 10-2 B. 2.684 10-2 C. 2.949 10-2 D. 5.428 10-2 2.质量摩尔浓度…

java中的规范是什么意思_Java中的异常规范有什么好处?

我从C来到Java.在Java和C中,我们都可以指定异常.看起来像这样&#xff1a;void function_name() throw(Exception){...if (error){throw Exception("Error");}...}据我所知,在C中编写异常规范被认为是一种不好的做法.与C不同,在Java中,我们必须这样做.所以,我的问题是…

jpa中::::_项目学生:JPA标准查询

jpa中::::这是Project Student的一部分。 其他职位包括带有Jersey的Webservice Client&#xff0c;带有Jersey的 Webservice Server &#xff0c; 业务层 &#xff0c; 具有Spring Data的持久性 &#xff0c;分片集成测试数据和Webservice Integration 。 我们已经介绍了CRUD的…