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

浅谈Slick(1)- 基本功能描述

Slick把数据库编程融入到scala编程,编程人员可以不需要编写SQL代码。我把Slick官方网站上Slick3.1.1文档Slick介绍章节一些描述和例子拿过来帮助介绍Slick功能。...下面是Slick数据库和类对象关系对应一个例子: 1 import slick.driver.H2Driver.api._ 2 object slickIntro { 3 case class...现在这个coffees就是scala一个对象,但它代表了数据库表。...Slick把Query编写与scala语言集成,这使编程人员可以用熟悉惯用scala来表述SQL Query,直接好处是scalac在编译时就能够发现Query错误: 1 //coffees.map...具体实现方式是利用freemonad(DBIOAction类型就是个freemonad)延迟运算模式,DBIOAction编程和实际运算分离,在DBIOAction编程过程不会产生副作用(side-effect

76670

浅谈Slick(2)- Slick101:第一个动手尝试项目

看完Slick官方网站上关于Slick3.1.1技术文档后决定开始动手建一个项目来尝试一下Slick功能具体使用方法。我把这个过程一些了解和想法记录下来和大家一起分享。...Slick是集成jdbc更高层Query编程语言,可以通过jdbcurl、DataSource等来指定目标数据库类型及相关参数。...对应Slick具体函数有: val db = Database.forConfig("mydb") val db = Database.forURL("jdbc:h2:mem:test1;DB_CLOSE_DELAY...除h2之外其它都没进行测试验证,具体配置参数和方法要参考数据库开发商提供技术文档。我在这个示范里选用了h2配置:它会在用户根目录下创建一个slickdemo.h2.db数据库文件。...使用了case class AlbumModel作为库表字段对应模版。这样一是可以规范代码,再就是如果遇到一个宽表有很多列的话可以节省许多重复铺垫及避免无谓错误

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

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

在这篇讨论里我想以函数式思考模式来加深了解Slick。我对fp编程模式印象最深就是类型匹配:从参数类型和返回结果类型来了解函数功能。...表行定义操作方法基本都在slick.lifted.AbstractTable里、表属性定义在slick.model命名空间里、而大部分帮助支持函数都在slick.lifted命名空间其它对象里。...所有Query对象里提供函数TableQuery类都可以调用。...在slick.profile.RelationalProfile.TableQueryExtensionMethods里还有专门针对TableQuery类型函数如schema等。...上面的DriverAction是DBIOAction子类。因为DBIOAction是个free monad,所以多个DBIOAction可以进行组合,而在过程不会立即产生DBIO副作用

2.8K70

geotrellis使用(三十)使用geotrellis读取PostGIS空间数据

先介绍一下slick,它是一款开源scala语言数据库处理框架,官网http://slick.lightbend.com/。...字段,并为主键及自动增长,类型为Int;name对应表name字段,类型为String;geom对应空间字段geom,类型为Point(空间字段类型可以直接设置为Geometry);def * 表示三个字段组合...,首先引入上面driver定义api,之后定义实体类继承自Table对象,其泛型即为def *组合类型,并且二者顺序必须完全一致。...其中ConnDatabase是上文我们写好数据库连接类,主要目的在于得到其中db对象,所以必须先执行connectDb函数,传入数据库参数。...对数据进行空间操作: geotrelis.slick支持scala空间操作转换为PostGIS空间函数,如下: def getGeomWKTData { val q = for {

1.6K70

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

我认为这是一项非常好技术,它可以满足构建微服务所需所有基本要求: 易于实现 快速 健壮性 很好支持和文档记录 在数据方面,我选择了Slick作为库,数据库交互和FlyWay抽象为数据库迁移框架。...),它将验证消费者(Consumer)是否按照协议规定进行要求。...WordSpec,ScalatestRouteTest,Matchers,MockFactory,BeforeAndAfterAll和定义应用程序路由性状:Routes 当然它不会编译也不会传递,因为还没有实现...最后一条指令是定义TableQuery对象,该对象对于该表执行任何类型查询都是必需。...你可以看到dao在trait中被实例化,如果逻辑变得更复杂,我建议将它作为必需参数(隐式或类属性)移动,以便从外部注入它们。

7.4K50

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

我认为这是一项非常好技术,它可以满足构建微服务所需所有基本要求: 易于实现 快速 健壮性 很好支持和文档记录 在数据方面,我选择了Slick作为库,数据库交互和FlyWay抽象为数据库迁移框架。...,ScalatestRouteTest,Matchers,MockFactory,BeforeAndAfterAll和定义应用程序路由性状:Routes 当然它不会编译也不会传递,因为还没有实现,所以让我们定义我们路由...最后一条指令是定义TableQuery对象,该对象对于该表执行任何类型查询都是必需。...您可以在官方文档中找到更多关于如何在Slick实现实体和DAO示例和信息。...你可以看到dao在trait中被实例化,如果逻辑变得更复杂,我建议将它作为必需参数(隐式或类属性)移动,以便从外部注入它们。

2K30

Scala学习路线

导致学习过程特别的痛苦 所以我想把其中一些重要东西记录下来,让和我一样正在学习scala同学能多一些思考,少走一些弯路。...Scala是一门静态类型,结合了面向对象和函数式,拥有强大类型系统语言。而Groovy是一门同时提供了动态类型和静态类型,基本兼容Java语法语言。 这两者特性、适合场景都不一样。...然而这些库在scala,要么用起来非常别扭,要么有一些奇怪问题。而Scala原生库,比如squeryl,slick等,都有“多利用类型系统,少做魔术”追求,所以用起来总是不那么好用。...但是混用过程还是比较痛苦: 很多类,特别是集合类,Java与Scala各有一套,我们需要不停转换 Java与Scala类型系统不完全相同,有时候会遇到奇怪编译错误 有些java库会对javabean...比如,关于函数式编程,有人说它有两个重要特点: 追求不变性和无副作用 函数作为一等公民,它可以当作值一样定义、传递 然后我们想,我已经做到了尽量用val不用var,也不在方法里做一些有副作用操作

2.3K50

坚持还是放弃,Go语言“美好与丑陋”解读

我们经常对参数名为 id 类型编码,但是这就是一些产生小 bug 原因,即当一个函数有多个标识符作为参数时候,一些调用就会弄混参数顺序。...同时 map 零值有个严重缺陷:它可以查询,但在 map 存储任何数据都有导致 panic 异常: ? 当结构具有 map 字段时,就要当心了,因为在向其添加条目之前必须对其进行初始化。...事实上,json 解码器有一个会触发 panic 通用错误处理函数,在最顶层 unmarshal l函数可恢复该 panic,该函数检查 panic 类型,并在其是“local panic”时将其作为错误返回...我发现他们实际上是危险救急: ? 以上检查错误一直令人痛苦,这种模式忽略了写入时序列错误,而是在写完时才提示。 因此,任何执行操作都会在执行完错误后执行。 如果这些比分片更昂贵呢?...= nil 将不会成功。 那么我们应该如何以安全方式编写测试? 我们必须对接口值和非零值都进行 nil-check,检查接口对象指向值...使用反射! ? 错误或功能?

1.4K41

Null 值及其处理方式

以上说这几个语言用各自方式表示了 null,但都没有解决所谓「十亿美金错误」,所谓「十亿美金错误本质在于语言粗糙设计导致类型声明不诚实。...不一定,它可能返回一个 null,这就导致每一次使用时候都要小心翼翼地对其进行判断,否则很有可能就会在运行时候发生错误,这是一个非常糟糕事情。...另外,在 Kotlin ,这种技术还被更广泛地应用在一般类型处理上,比如你可以对对象进行类型判定,并在不同分支里将该对象作为不同类型对象使用,不需要额外显式类型转换,这被称为 Smart Cast...它们使用参数类型来表示 null 这个概念。例如在 Scala ,有一个 Option[T] 8 类型,对于一个可能为空对象,不将其类型设置为 T 而是设置为 Option[T]。...协变、逆变与不变 一文谈过,Java 无法在参数类型声明时候指定其在其类型参数型变类型,相对于 Scala 中直观写法,为了使用 Optional,在 Java 我们必须要这样写: Optional

1.1K40

C#和.NET字符串

这常常是因为string不变性使得其行为类似于值类型(见下一点)。实际上,它更多地表现为一个普通引用类型。请查看我参数传递和内存二文,以参阅关于值类型和引用类型之间差异更多细节。...string类型是特殊(译者:指资源占用不固定),因为其对象本身大小不同。据我所知,相似行为其他类型只有数组。...文化与国际化遗产 Unicode一些奇怪特性导致字符串和字符处理怪异。许多字符串方法是文化性敏感——换句话说,它们作用取决于当前线程文化。...不幸是,由于两个空格间原始字符串奇怪”字符,转换失败。IndexOf匹配双重空格,忽略额外角色,但Replace并没有。...我猜测是,因为这样“尴尬”数据,导致很多代码运行失败(我暂时也不会声称我所有代码都是免疫)。 微软有一些关于字符串处理建议——它们可以追溯到2005年,但仍然值得一读。

2.4K100

【Spark研究】Spark编程指南(Python版)

在后文中我们会描述分布数据集上支持操作。 并行集合一个重要参数数据集划分成分片数量。对每一个分片,Spark会在集群运行一个对应任务。...可写类型支持 PySpark序列文件支持利用Java作为中介载入一个键值对RDD,将可写类型转化成Java基本类型,然后使用Pyrolitejava结果对象串行化。...向Spark传递函数 SparkAPI严重依赖于向驱动程序传递函数作为参数。有三种推荐方法来传递函数作为参数。...Spark还会在shuffle操作(比如reduceByKey)自动储存中间数据,即使用户没有调用persist。这是为了防止在shuffle过程某个节点出错而导致全盘重算。...如果累加器在对RDD操作中被更新了,它们值只会在启动操作作为RDD计算过程一部分被更新。所以,在一个懒惰转化操作调用累加器更新,并没法保证会被及时运行。

5.1K50

iOS: ARM64不定函数传参问题调试剖析

---- crash发生在objc_storeStrong函数,猜测是ARC(自动引用计数)下导致问题,尝试process_blackhole方法参数类型修改为void *或id __unsafe_unretained...通过汇编单步调试发现上述crash属于访存错误,objc_retain调用传入了一个堆栈上地址。这很奇怪,按理说传入应当是该方法实参对象——一个堆地址,指向一个合法对象。...在本文初步分析 部分有提到,ARC环境下,在方法函数体实现部分之前,编译器会对参数调用objc_storeStrong以持有传入参数,存放在栈 说明 可以看到,模拟器下参数传递正确,而真机下却很奇怪传递参数地址而非本身...说明 这次ARM64架构传参更加奇怪传递分别是第二个参数以及第一个参数地址 测试代码3 为了结合正确情况代码分析,编写测试代码Code 4-4,该代码根据函数实际类型定义了指针,经测试真机和模拟器都能正常执行...两边传参约定不对称,导致被调方法获取到了错误参数,引起了crash。如下图所示。 ? 值得注意是,在正确使用不定参数情况下不会发生这个问题,会负责处理平台相关问题。

2.3K33

Play For Scala 开发指南 - 第8章 用户界面

Twirl 采用Scala作为底层模板语言,所以你无需学习额外语法便可以轻松上手。...大家可能觉得奇怪,没有了上下文,在模板如何获取当前请求呢?答案很简单:通过参数传递喽!利用Scala隐式参数特性,在调用模板函数时不需要显示传入,编译器会自动传入。...message 错误消息提示或错误消息对应key。 args 用于填充错误消息参数。 Form.globalErrors包含在Form.errors,其key值为空,无对应表单项。...//绑定成功     Ok(Json.obj("status" -> 0))   } ) 页面渲染 我们可以直接 Form 对象作为模板参数传递到模板层,Play 专门为模板层提供了一个工具包(views.html.helper...除了上文 formWithErrors 对象,  我们也可以业务数据填充到 Form 实例,然后传递给模板页面进行渲染: val userForm = Form(tuple("email" ->

1.5K20

Play For Scala 开发指南 - 第10章 MongoDB 开发

另外 Mongo Scala Driver 数据库操作默认返回 Observable 类型,如果你忘记了调用 toFuture 方法,或是没有消费返回数据,则数据库操作实际上并不会被执行,在开发很容易引入一些...另外 Play Mongo 不会过多关注底层驱动实现细节,而是关注点放在与 Play Framework 集成上,可以为开发者提供更舒适开发体验。...} 由于这些隐式 Format 对象是在模型层对象(package object)创建,所以使用时无需显式导入,编译器会自动加载。...这意味着查询操作将会在 common-user collection 上执行, 并且返回结果类型是 User。 需要注意是,在该方式下无法改变返回结果类型。...我们仍然可以通过改变第2个参数类型从而改变返回结果类型

1.5K10

Scala兴衰史:暂时没落或许是一个新开始

然后是面向对象编程,知道如何执行对象操作,以及如何与相互交流,从而完成任务。 相比之下,函数式编程一个程序作为数学函数来评估,以生成一个结果值。...为了使函数能够方便传递数据,并且从其他函数,函数编程通常作为一个集合,以最可能方式定义数据结构。它们还允许函数间传递,就像它们是数据参数一样。...· 简洁:在函数语言中,数据通过通用集合数据类型从嵌套函数隐式传递到其父函数。...随之,Scala 设计者做出了几个重要决定, Scala 定位为函数编程到主流突破性语言。 · Scala 代码在 Java 虚拟机(JVM)运行。...· Scala 在语法上和 Java 相似,并且像 Java 一样,在编译时执行类型检查而不是在运行时,从而消除了由类型不兼容而导致运行错误可能性。

2.1K40

一文解决现代编程语言选择困难:命令式编程

空值 我 1965 年创建空值引用(null reference)称为“亿万美元错误”。当时,我正设计首个完全类型系统,用于面向对象语言中引用。...异常和空值一样,会破坏类型系统。 如果异常作为错误处理首选方式,那么就无法获知函数是返回了期望值,还是发生了故障。抛出异常函数也无法实现复合(Compose)。...React ,函数参数 props 是不可变;而 TypeScript ,没有内置提供适用不可变数据结构支持。...重申 Linux Torvalds 观点: C++ 是一种很糟(面向对象)语言……项目局限于 C,意味着整个项目不会因为任何愚蠢 C++“对象模型”而搞砸。...使用 this 关键字通常会导致一些细微而奇怪错误,难以调试。 并发 JavaScript 使用事件循环支持单线程并发,无需考虑加锁等线程同步机制。

1.2K30

Scala如何改变了我编程风格:从命令式到函数式

考虑到 Scala 是静态类型,我可以享受到诸多静态类型好处,诸如文档作为类型, IDE 代码自动完成,动态代码重构( deterministic refactoring )以及执行速度等...但 Scala 还让我以简洁和类型安全方式获得某些通常是动态语言好处,例如在已有类上增加新方法能力,或者类型传递给没有共同继承关系方法。 Scala 是怎样改变了我对编程看法呢?...exists 方法在对象集合迭代,并依次每个元素传递给函数对象。在这里, name 字符串被视为字符集合,因此 exists 会把字符串每一个字符都传递给该函数。...另外需要注意一点不同是命令式例子潜在偏移错误,因为你必须显式地指出迭代上标。在函数化版本里这种错误不会产生,在这种方式下,函数化版本相对而言不易出错。...通常将输入值称做函数参数输出值称做函数值。

1.1K30

🧩 Vue 深入组件开发☞#依赖注入#

下面的这张图解释了我们可以在 Root 组件通过 provide 来注入数据,在 DeepChild 组件通过 Inject 来注入对应 key,就可以数据顺利从 Root 传递到 DeepChild...对象(后面会说),参数 2 可以是任意类型数据包括响应式对象: 在下面的代码中提供了 message 为 key,text 为内容数据给后代组件: <script setup lang="ts"...inject() 函数来传入指定数据 key 来得到 Root 组件响应式 text,而且这个响应式对象不会被解包,得到数据对象依然保持着响应式链接。...上面的例子我们就直接传递响应式 text 对象,那在 Root 组件后代组件每一个都有可能会对这个响应式数据做更改,为了保证更改函数统一管理,Vue 建议我们在定义响应式数据变更与 provide...: Symbol 作为一个出场率极低对象在这就派上它用场,我们在使用 provide 向后代组件提供数据时候 key 一定不能重复了,这个场景与 Symbol 对象特点是完美契合,虽然我们可以所以

50310
领券