首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

浅谈Slick(3)- Slick201:从fp角度了解Slick

Slick是一个FRM(Functional Relational Mapper),是为fp编程提供scala SQL Query集成环境,可以让编程人员在scala编程语言里用函数式编程模式来实现对数据库操作编程...在这篇讨论里我想以函数式思考模式来加深了解Slick。我对fp编程模式印象最深就是类型匹配:从参数类型和返回结果类型来了解函数功能。...所以上面我所指函数式思考方式主要是从Slick函数类型匹配角度来分析函数所起作用和具体使用方式。...从qInsert3产生SQL语句来看:jdbc返回数据后还必须由Slick进一步处理后才能返回用户要求结果值。...DBIOAction只是对数据库操作动作描述,不是实际读写,所以DBIOAction可以进行组合。所谓组合意思实际就是把几个动作连续起来。

2.8K70

FunDA(1)- Query Result Row:强类型Query结果

FunDA特点之一是以数据流方式提供逐行数据操作支持。这项功能解决了FRMSlick数据操作以SQL批次模式为主所产生问题。...为了实现安全高效数据行操作,我们必须把FRM产生Query结果集转变成一种强类型结果集,也就是可以字段名称进行操作数据行类型结果集。...在前面的一篇讨论中我们介绍了通过Shape来改变Slick Query结果行类型。不过这样转变方式需要编程人员对Slick有较深了解。更重要是这种方式太依赖Slick内部功能了。...下面先看一个典型Slick Query例子: 1 import slick.driver.H2Driver.api._ 2 import scala.concurrent.duration._...下面我们要设计FunDA数据行类型class FDADataRow。这个类型现在基本完全是针对Slick而设,成功完成功能实现后期再考虑松散耦合问题。

90490
您找到你想要的搜索结果了吗?
是的
没有找到

FunDA(2)- Streaming Data Operation:流式数据操作

在上一集讨论里我们介绍并实现了强类型返回结果行。使用强类型主要目的是当我们把后端数据库SQL批次操作搬到内存里转变成数据流式按行操作时能更方便、准确、高效地选定数据字段。...那么在上篇中实现流式操作基础再添加一种指令行类型就可以完善整个数据处理流程了,就像下面这个图示: Database => Query -> Collection => Streaming -> DataRow...类型就是SlickDBIO[T]了: 1 package com.bayakala.funda.rowtypes 2 import slick.dbio._ 3 object ActionType...先用下面这段代码来设置测试数据: 1 import slick.dbio.DBIO 2 import slick.driver.H2Driver.api._ 3 4 import scala.concurrent.duration...这是因为foreach只能模拟最基本数据流动。如果我们使用了具备强大功能Stream工具库scalaz-stream-fs2,就可以更好控制数据元素流动。

1.3K60

细谈Slick(5)- 学习体会和将来实际应用一些想法

首先谈谈Slick特点:主体方面Slick为函数式编程模式带来了SQL编程,可以把数据库表当作scala语言中集合来对待。...这样看来Slick工作原理大体是:    构建Query >>> 组合Query >>> 产生SQL语句 >>> 按流程把SQL语句发给数据库进行运算 >>> 获取结果 完成了上面的叙述后,总觉着好像缺少些什么...是了,Slick把jdbcresultset隐藏起来了。其目的可以理解:这样可以实现语法安全(type safety),才能把SQL编程融入FP编程,即scala集合编程。...综合以上分析,如果从一个有多年信息管理系统(MIS)开发经验程序员需求出发,能在工作中使用FRM是一种崭新体验。与习惯用ORM比较,从scala编程表达形式和程序运算方式都有较大改善。...真希望有心人能在Slick3.1基础增加一些特色功能,实现以下目标: 1、增加对resultset row操作支持:      a) 增加row.next、row.addNew、row.update

1.3K80

Akka(27): Stream:Use case-Connecting Slick-dbStream & Scalaz-stream-fs2

在以前博文中我们介绍了Slick,它是一种FRM(Functional Relation Mapper)。...所以我们只能从小众心态来探讨如何改善Slick现状,希望通过与某些Stream库集成,在Slick FRM基础恢复一些人们熟悉Recordset数据库光标(cursor)操作方式,希望如此可以降低...刚好,在这篇讨论里我们希望能介绍一些Akka-Stream和外部系统集成对接实际用例,把Slick数据库数据载入连接到Akka-Stream形成streaming-dataset应该是一个挺好想法。...Slick和Akka-Stream可以说是自然匹配一对,它们都是同一个公司产品,都支持Reactive-Specification。...下面是本次示范源代码: import slick.jdbc.H2Profile.api._ import com.bayakala.funda._ import api._ import scala.language.implicitConversions

82750

使用Akka HTTP构建微服务:CDC方法

,其中交互必须所描述那样工作,由消费者uponReceiving执行请求和预期响应。...也可以在消费者(Consumer)处理结果添加更多检查(声明)。...我们差不多完成了我们想要实现,它基本是定义了actor系统和执行HTTP调用函数元素: MyLibraryAppClient.scala package com.fm.mylibrary.consumer.app...您可以在官方文档中找到更多关于如何在Slick中实现实体和DAO示例和信息。...解决了如何在消费者和提供者项目之间共享契约验证结果问题 告诉您可以将应用程序哪个版本安全地部署在一起,自动地将您合同版本部署在一起 允许您确保多个消费者版本和提供者版本之间向后兼容性(例如,在移动或多租户环境中

7.5K50

【翻译】使用Akka HTTP构建微服务:CDC方法

同时考虑到所有HTTP元素必须匹配(方法,url,标题,正文和查询) 用于验证消费者契约实际测试定义: 此代码将针对以前方案运行,虚拟服务器将响应 交互部分中定义唯一HTTP请求(如果响应为deined...也可以在消费者(Consumer)处理结果添加更多检查(声明)。 当然,我们可以添加更多场景和交互。我们也可以为许多生产者定义更多契约。...我们差不多完成了我们想要实现,它基本是定义了actor系统和执行HTTP调用函数元素: MyLibraryAppClient.scala 它是一个对象,所以我们可以将它导入到任何我们必须使用我们客户端地方...您可以在官方文档中找到更多关于如何在Slick中实现实体和DAO示例和信息。...解决了如何在消费者和提供者项目之间共享契约验证结果问题 告诉您可以将应用程序哪个版本安全地部署在一起,自动地将您合同版本部署在一起 允许您确保多个消费者版本和提供者版本之间向后兼容性(例如,在移动或多租户环境中

2K30

Scala学习路线

刚接触Scala同学,看到基本都是一些宣传性文章,也因此对它有一些不太正确观点。...然而这些库在scala中,要么用起来非常别扭,要么有一些奇怪问题。而Scala原生库,比如squeryl,slick等,都有“多利用类型系统,少做魔术”追求,所以用起来总是不那么好用。...这是不是意味着,我们可以让项目中一部分代码使用Java实现,另一部分使用Scala? 在理论是可以,并且在实际中,有的时候我们不得不这样。...甚至有可能为了学习scala而中途专门去学习另一门函数式语言(haskell, lisp等),掌握了那些概念后,再回来看scala。...但是实际情况是,如果不能尽早掌握足够类型系统知识,在使用Scala时我们几乎寸步难行。我们在编译Scala代码时,遇到最多错误就是各种类型不匹配,如果不熟悉的话,可能要卡几个小时都解决不了。

2.3K50

SDP(0):Streaming-Data-Processor - Data Processing with Akka-Stream

按一般scala和akka编程方式编写多线程分布式数据库管理软件时一是要按照akka代码模式,使用scala编程语言一些较深语法;二是需要涉及异步Async调用,集群Cluster节点任务部署及...[R,M]类型结果。...在PRG中流动R类型可能是数据如数据库表一行,又或者是一条Sring类型queryplain-sql,可以用JDBC来运行。cassandraCQL也是String类型。...Slick,Quill,ScalikeJDBC和一些其它ORMQuery都可以产生plain-sql。 Source是一段程序开始部分。...Sink主要作用实际是保证完全消耗程序中产生所有元素,这是reactive类型程序必须要求。 好了,不知不觉还有几个钟头就进入2017倒计时了。

42110

大数据技术之_16_Scala学习_08_数据结构(下)-集合操作+模式匹配

中,可以把一个函数直接赋给一个变量,但是不执行函数,格式:函数名 _   注意:本质是将内存地址赋值给栈里面的变量!!!     ...// 步骤 (4 - 5)     // 步骤 (3- (4 - 5))     // 步骤 (2 -(3- (4 - 5)))     // 步骤 1- (2 -(3- (4 - 5))) = 3     ...2、Scala 类型匹配 快速入门案例 示例代码如下: package com.atguigu.chapter12.mymatch object MatchTypeDemo01 {   def ...2、Scala 对象匹配 快速入门案例 应用案例1示例代码如下: package com.atguigu.chapter12.mymatch object MatchObjectDemo01 ...2、匹配嵌套结构 最佳实践案例-商品捆绑打折出售 现在有一些商品,请使用 Scala 设计相关样例类,完成商品捆绑打折出售。要求:   1、商品捆绑可以是单个商品,也可以是多个商品。

1.6K00

SparkSql优化器-Catalyst

模式匹配是许多函数编程语言特征,允许从代数数据类型潜在嵌套结构中提取值。在Catalyst中,语法树提供了一种转换方法,可以在树所有节点递归地应用模式匹配函数,将匹配节点转换为特定结果。...Case关键词是scala标准模式匹配语法,可以用来匹配一个节点类型,同时将名字和抽取到值对应。(就是c1和c2)。 模式匹配表达式是部分函数,这也意味着只需要匹配到输入语法树子集。...Catalyst将测试给定规则适用哪些部分,自动跳过不匹配子树。这种能力意味着规则只需要对给定优化适用树进行推理,而不是那些不匹配树。结果就是,新操作类型加入到系统时规则无需修改。...2),将命名属性(“col”)映射到给定操作符子节点输入中。...后面也会举例讲解,如何在我们应用中使用。

2.7K90

多面编程语言Scala

Scala官网宣称:“Object-OrientedMeetsFunctional”,这一句当属对Scala最抽象精准描述,它把近二十年间大行其道面向对象编程与旧而有之函数式编程有机结合起来,...实际,这无关类型争论,而是类型系统实现范畴。是的,在Scala里,你可以放心大胆地使用vals="ABC",而Scala里强大类型推断和模式匹配,绝对会让你爱不释手。...模式匹配(PatternMatching) Scala模式匹配实现非常强大。模式匹配为编程过程带来了莫大便利,在Scala并发编程中也得到了广泛应用。 ?...此外,Scala模式匹配还有更多用法,case类匹配、option类型匹配,同时还能带入变量,匹配各种集合类型。综合运用模式匹配,能够极大提升开发效率。...i 然后,在CalcActorreceive中,通过模式匹配,对接收值进行处理,直到接收值处理完成。在运行结果就会发现每次输出顺序都是不一样,因为我们程序是并发计算。

2.5K40

就是个控制结构,Scala能有什么新花样呢?

Scala控制结构实质与其他编程语言并无太大差别,需要注意Scala控制结构大多具有返回值,而其他编程语言中控制结构一般就仅仅是用于流程控制。...形式虽然一样,但Scala中其实也有其特别之处:那就是Scalaif-else其实应当理解成一个代码块,而在Scala中但凡是代码块,基本都对应有返回值,所以无论是单分支、双分支还是多分支,其返回值就是相应分支结果...同时需指出是,在单分支中只有if单条语句,当条件不满足时实际也是对应控制返回结果。...在模式匹配中另外值得关注一个细节是,在各匹配分支后,用映射符号"=>"连接条件和执行逻辑,这与Scala中函数标志性符号是一致,都表示映射含义,一定程度上也暗示着模式匹配其实可理解为根据条件逻辑执行一个个子函数...那如果就是要实现break和continue两个需求呢,实际Scala中可以灵活选用如下3种方式: 增加if条件判断 for循环中设置循环守卫 while循环中增加相应判断逻辑 03 小结 控制结构是编写任何程序都不得不涉及到一个概念

84920

Scala学习笔记

:                 自增    自减    三目             scala操作符实际就是scala中方法调用,只不过为了简洁期间,将方法调用转换为中缀表达式...            Scala中操作符实际是方法。...1, "b"->2, "c"->3)             #取得不存在key,如果没有返回一个默认值0, 避免程序报错             scala> map.getOrElse("d",...特征:相当于Java中接口,实际他比接口功能强大.         2)与接口不同是:是可以定义属性和方法实现         3)一般情况下scala类只能被继承单一父类,但是如果是trait...            scala> list.reduce(_ - _)             res29: Int = -13 //可以看出,得到结果和reduceLeft结果是一样

2.6K40

SDP(6):分布式数据库运算环境- Cassandra-Engine

:cassandra库表设计是反范式(denormalized)、表结构设计是反过来根据query要求设计,等等。幸运是自版本3.0后cassandra提供了CQL来支持数据库操作。...简单来说CQL就是cassandraSQL。CQL是一种query语言,在语法与SQL相近。...cassandra数据库用户,所以还是决定提供一种CQL脚本运算环境,也就是说Cassandra-Engine接受CQL脚本然后运算得出结果。...因为数据是重复分布在多个集群节点,所以需要通过consistencyLevel来注明分布式数据读写方式: def consistencyLevel: CONSISTENCY_LEVEL =>..." %% "slick" % "3.2.1", "ch.qos.logback" % "logback-classic" % "1.2.3") CassandraEngine.scala import

1.6K40
领券