先介绍一下slick,它是一款开源的scala语言数据库处理框架,官网http://slick.lightbend.com/。...官网介绍如下: Slick is a modern database query and access library for Scala....大概是说Slick使得我们能像处理普通Scala集合那样处理多种数据库,并能对数据库进行控制,相当于一个ORM框架。...2.4 操作类 上文讲到slick的优势就在于我们可以像使用scala集合那样读取数据库中信息,并能够对数据库进行操作。...2.4.4 删 删除数据分为删除全部和有条件删除。
原理上就是把一个输入流截分成多个输入流并行地输入到一个自定义函数的多个运行实例。这些函数运行实例同时在各自不同的线程里同步运算直至耗尽所有输入。...下面就是这次示范的源代码: import slick.jdbc.meta._ import com.bayakala.funda._ import api._ import scala.language.implicitConversions...import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.duration._ import...scala.concurrent....{Await, Future} import scala.util.
Slick把jdbc api集成到scala编程语言里,能够支持多种数据库。也就是说Slick提供了多种数据库的驱动api。...我们在需要src/main/scala/config/AppConfig.scala里定义依赖界面trait DBConfig: 1 package com.bayakala.learn.slick301...jdbcDriver.api._ 6 val db: Database 7 } 后面我们可以通过实现多种DBConfig实例方式来构建开发、测试、部署等数据库环境。...我们在src/main/scala/main/Main.scala里测试运算DAOs里的query action: 1 package com.bayakala.learn.slick301.main...但是我们构建的数据库又变成了专门针对H2的api了,这样的话每次变动数据库对象我们就必须重新编译Main.scala,不符合上面我们提到的要求。
使用强类型主要的目的是当我们把后端数据库SQL批次操作搬到内存里转变成数据流式按行操作时能更方便、准确、高效地选定数据字段。...先用下面这段代码来设置测试数据: 1 import slick.dbio.DBIO 2 import slick.driver.H2Driver.api._ 3 4 import scala.concurrent.duration...{Failure, Success} 7 import scala.concurrent.ExecutionContext.Implicits.global 8 import slick.jdbc.meta.MTable...scala.concurrent.Await 5 import slick.driver.JdbcProfile 6 7 object DataRowType { 8 class FDADataRow...{Failure, Success} 7 import scala.concurrent.ExecutionContext.Implicits.global 8 import slick.jdbc.meta.MTable
这次介绍的数据源并行构建方式也与前面描述的有所不同:在前面讨论里我们预知需要从三个独立流来并行构建数据源。但如果我们有一个不知长度的数据流,它的每个元素代表不同的数据流,应该如何处理。...我们知道在AQMRPT表里有从1999年到2xxx年的空气质量测量数据,我们可以试着并行把按年份生成的数据流构建成一个数据源。...._ import com.bayakala.funda._ import api._ import scala.language.implicitConversions import scala.concurrent.ExecutionContext.Implicits.global...import scala.concurrent.duration._ import scala.concurrent....{Await, Future} import scala.util.
在以前的博文中我们介绍了Slick,它是一种FRM(Functional Relation Mapper)。...所以我们只能从小众心态来探讨如何改善Slick现状,希望通过与某些Stream库集成,在Slick FRM的基础上恢复一些人们熟悉的Recordset数据库光标(cursor)操作方式,希望如此可以降低...Slick提供了个Dababase.stream函数可以构建这个Publisher: /** Create a `Publisher` for Reactive Streams which, when...下面是本次示范的源代码: import slick.jdbc.H2Profile.api._ import com.bayakala.funda._ import api._ import scala.language.implicitConversions...import scala.concurrent.duration._ import akka.actor._ import akka.stream._ import akka.stream.scaladsl
我认为这是一项非常好的技术,它可以满足构建微服务所需的所有基本要求: 易于实现 快速 健壮性 很好的支持和文档记录 在数据方面,我选择了Slick作为库,将数据库交互和FlyWay抽象为数据库迁移框架。...我建议花几分钟阅读官方Pact网站的主页,这很好地诠释了它背后的道理。...我们可以轻松地使用SBT创建一个新的Scala项目并定义build.sbt,如下所示: build.sbt name := "myLibrary-contracts" version := "0.1"...非常易于使用,这要归功于ScalaPactForger对象,可以通过几行代码构建契约定义和期望效果,更详细地说: 契约参与者的定义: .between("ScalaConsumer") .and("myLibraryServer...,第二个是要得到数据库实例用来执行查询。
Slick是一个FRM(Functional Relational Mapper),是为fp编程提供的scala SQL Query集成环境,可以让编程人员在scala编程语言里用函数式编程模式来实现对数据库操作的编程...TableQuery[T]继承了Query[T]:slick.lifted.Query.scala /** Represents a database table....A代表生成SQL语句的元素,通过转变A可以实现不同的SQL语句构建。...14 //res23: slick.dbio.DBIOAction[scala.util.Try[Int],slick.dbio.NoStream,slick.dbio.Effect.Write]...3 import scala.concurrent.duration.Duration 4 import scala.concurrent.
首先谈谈Slick的特点:主体方面Slick为函数式编程模式带来了SQL编程,可以把数据库表当作scala语言中的集合来对待。...这样看来Slick的工作原理大体上是: 构建Query >>> 组合Query >>> 产生SQL语句 >>> 按流程把SQL语句发给数据库进行运算 >>> 获取结果 完成了上面的叙述后,总觉着好像缺少些什么...是了,Slick把jdbc的resultset隐藏起来了。其目的可以理解:这样可以实现语法安全(type safety),才能把SQL编程融入FP编程,即scala集合编程。...与习惯用的ORM比较,从scala编程表达形式和程序运算方式上都有较大的改善。但以Slick当前所能提供的功能还无法完全满足偏重数据处理(data processing)编程的需要。...library)分享给scala数据库编程的朋友使用。
除了从方便使用角度考虑,还因为FunDA开发是基于Scala函数式编程模式的,静态类型系统(static type system)对类型要求比较严格,所以FunDA的数据流内元素必须是强类型的,大部分是...用dataSeq构建静态数据流: // turn Seq collection into fs2 stream val aqmStream = fda_staticSource(dataSeq)(...注意如果没有提供类型转换函数来辅助类型推导就必须在构建FDAViewLoader时提供SOURCE和TARGET类型参数。...下面是示范源代码: import slick.driver.H2Driver.api._ import com.bayakala.funda._ import API._ import scala.language.implicitConversions...import scala.concurrent.duration._ object StrongTypedSource extends App { val aqmraw = Models.AQMRawQuery
我认为这是一项非常好的技术,它可以满足构建微服务所需的所有基本要求: 易于实现 快速 健壮性 很好的支持和文档记录 在数据方面,我选择了Slick作为库,将数据库交互和FlyWay抽象为数据库迁移框架。...MyLibraryClientPactSpec.scala Scala-pact非常易于使用,这要归功于ScalaPactForger对象,可以通过几行代码构建契约定义和期望效果,更详细地说: 契约参与者的定义...我也喜欢定义一个具有所有必要依赖项的特征来轻松构建测试用例: BaseTestAppClient.scala 它定义了在我们的测试中使用的actor系统和执行HTTP请求的函数。...和CategoryEntity,首先是要获得分类表查询的对象,第二个是要得到数据库实例用来执行查询。...您可以在官方文档中找到更多关于如何在Slick中实现实体和DAO的示例和信息。
来构建AQMRPTModel数据行。 3、fda_next(???)把新构建的AQMRPTModel行传到下游 以上几步证明filterRows是按照自定义函数操作标准来运作的。...本次示范的源代码如下: import slick.jdbc.meta._ import com.bayakala.funda._ import api._ import scala.language.implicitConversions...import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.duration._ import...scala.concurrent....{Await, Future} import scala.util.
所以说事后处理程序的挂接是在构建view或者stream时进行的。.../ by zero // at examples.ExceptionsAndFinalizers$$anonfun$errorRow$1.apply(ExceptionsAndFinalizers.scala...[${e.getMessage}]"); fda_appendRow(FDANullRow)} 注意:onError必须挂接在stream的最尾端以确保所有环节的异常情况都可以正确地得到处理。...com.bayakala.funda._ import api._ import scala.language.implicitConversions object ExceptionsAndFinalizers.../ by zero // at examples.ExceptionsAndFinalizers$$anonfun$errorRow$1.apply(ExceptionsAndFinalizers.scala
Akka-http提供了许多网上传输标准数据的概括模型以及数据类型转换方法,可以使编程人员很方便的构建网上往来的Request和Response。...首先,Akka-stream通过FileIO对象提供了足够多的file-io操作函数,其中有个fromPath函数可以用某个文件内容数据构建一个Source类型: /** * Creates a...._ val dbConfig: slick.basic.DatabaseConfig[slick.jdbc.H2Profile] = slick.basic.DatabaseConfig.forConfig...._ val dbConfig: slick.basic.DatabaseConfig[slick.jdbc.H2Profile] = slick.basic.DatabaseConfig.forConfig...scala.io.StdIn.readLine() bindingFuture.flatMap(_.unbind()) .onComplete(_ => httpSys.terminate
具体来说Projection提供了数据库表列与Scala值的对应。...我们来看看Slick官方文件上的例子: import scala.reflect.ClassTag // A custom record class case class Pair[A, B...下面是本次示范的源代码: 1 import slick.collection.heterogeneous.{ HList, HCons, HNil } 2 import slick.collection.heterogeneous.syntax...._ 3 import slick.driver.H2Driver.api._ 4 5 import scala.concurrent.ExecutionContext.Implicits.global...6 import scala.concurrent.duration._ 7 import scala.concurrent.
然后把这三部分构建成三个独立的数据源: //define query for extracting County names from AQMRPT in separate chunks //query...下面就是本次示范的源代码: import com.bayakala.funda._ import api._ import scala.language.implicitConversions import...slick.jdbc.H2Profile.api._ import scala.concurrent.duration._ import scala.concurrent....{Await, Future} import scala.util....._ import scala.concurrent.ExecutionContext.Implicits.global object ParallelLoading extends App {
randomDelay[A](max: FiniteDuration): Pipe[Task,A,A] = _.evalMap { a => { val delay: Task[Int] = Task.delay {scala.util.Random.nextInt...用这个函数来并行构建数据源: package com.bayakala.funda.fdapars.examples import slick.driver.H2Driver.api._ import...import com.bayakala.funda.fdarows.FDAROW import com.bayakala.funda.fdasources.FDADataStream._ import scala.concurrent.duration...我们同样可以把产生的ActionRow用并行的方法来运算: val runner = FDAActionRunner(slick.driver.H2Driver) //并行运算函数 def...import com.bayakala.funda.fdarows.FDAROW import com.bayakala.funda.fdasources.FDADataStream._ import scala.concurrent.duration
对一些不算FP编程专家的人来说,如何用他们习惯的方式来使用现成的函数式软件如Slick,Spark等可能就变得是件很迫切的事情了。...设计FunDA的想法就是希望那些惯用ORM(Object Relational Mapper)开发MIS系统的编程人员们能快速轻松地使用像Slick这样的FRM(Functional Relation...产生数据源同样可以实现并行运算,比如通过构建一个多任务计算对象后进行运算。...模拟了个应用场景可能是如下这样的: buildPar(loadData(age.between(0,10)) //构建并行运算对象 .with(loadData(age.between(11,20...大体的开发计划可以分成下面几个阶段: 一、scalaz-streams-fs2+slick:先直接绑定slick作为FRM部分与后台数据库发生关系、fs2作为在内存中数据流和运算管理工具来实现FunDA
,通过编译器自动产生铺垫代码来实现工具库中各种复杂的类型、对象及方法函数的构建。...而且scala本身也面临着向2.12版本升级的情况,其中dotty就肯定是scalac的替代编译器。...我在介绍了Slick之后立即转入Scala Macros是有一些特别目的的。...研究FRM Slick乃至学习泛函编程的初衷就是希望能为传统的OOP编程人员提供更简单易用的泛函库应用帮助,使他们无须对函数式编程模式有太深刻了解也能使用由函数式编程模式所开发的函数库。...我们看看这个注释的实现方式: 1 import scala.meta._ 2 3 class Greetings extends scala.annotation.StaticAnnotation
最近刚完成了对整个akka套装(suite)的了解,感觉akka是一套理想的分布式编程工具:一是actor模式提供了多种多线程编程方式,再就是akka-cluster能轻松地实现集群式的分布式编程,而集群环境变化只需要调整配置文件...按一般的scala和akka的编程方式编写多线程分布式数据库管理软件时一是要按照akka代码模式,使用scala编程语言的一些较深的语法;二是需要涉及异步Async调用,集群Cluster节点任务部署及...Streaming对外集成actor运算模式的细节,用户需要具备一定的scala,akka使用经验。...Slick,Quill,ScalikeJDBC和一些其它ORM的Query都可以产生plain-sql。 Source是一段程序的开始部分。...一般来说Source是通过运算Query产生一串数据行或者人工构建而成。
领取专属 10元无门槛券
手把手带您无忧上云