CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Scala 语言入门/课时/数据与 JSON
RawBlame
课时目录12 节

Scala 语言入门

  1. 01Scala 是什么
  2. 02基础语法
  3. 03OOP 与模式匹配
  4. 04集合与高阶函数
  5. 05函数式编程
  6. 06类型系统
  7. 07构建工具
  8. 08后端框架
  9. 09数据与 JSON
  10. 10测试
  11. 11并发与流
  12. 12综合练习

数据与 JSON

Spark、Doobie、Slick、Circe。

35 分钟

数据与 JSON

Scala 数据栈覆盖 Spark(分布式计算)、Doobie / Slick(JDBC FP 封装)、Circe(JSON)。对照 /roadmaps/scala「Data & JSON」节点。

学习目标

  • 用 Circe 序列化 / 反序列化 case class
  • 了解 Doobie 与 Slick 访问关系型数据库的方式
  • 知道 Spark 在 Scala 生态中的位置

核心概念

Circe JSON

import io.circe.*
import io.circe.generic.auto.*
import io.circe.parser.*
import io.circe.syntax.*

case class Bookmark(id: Long, url: String, title: String)

val bm = Bookmark(1L, "https://example.com", "Example")
val json: Json = bm.asJson
println(json.noSpaces)

val raw = """{"id":2,"url":"https://b.com","title":"B"}"""
val decoded: Either[Error, Bookmark] = decode[Bookmark](raw)

decoded match
  case Right(b) => println(s"ok: ${b.title}")
  case Left(e)  => println(s"fail: ${e.getMessage}")

generic.auto 自动推导 encoder/decoder;生产环境常用 semi-auto 显式导入以降低编译时间。

Doobie 查询(FP JDBC)

import doobie.*
import doobie.implicits.*

case class Row(id: Long, title: String)

def findById(xa: Transactor[IO], id: Long): IO[Option[Row]] =
  sql"SELECT id, title FROM bookmarks WHERE id = $id"
    .query[Row]
    .option
    .transact(xa)

Doobie 用 IO 描述数据库效应,sql"..." interpolator 防 SQL 注入;与 Spring JdbcTemplate 命令式风格对比鲜明。

Slick 与 Spark 概览

库用途
SlickFRM,类型安全查询 DSL,生成 SQL
Doobie轻量 JDBC 层,Cats Effect 友好
CirceJSON 编解码
Spark大规模批/流处理,Scala 为首选 API 语言
// Spark 概念片段(集群上运行)
import org.apache.spark.sql.SparkSession

val spark = SparkSession.builder().appName("demo").master("local[*]").getOrCreate()
import spark.implicits.*

val counts = spark.read.json("events.json")
  .groupBy($"userId")
  .count()
counts.show()

Spark 作业通常独立部署,与 Spring Boot CRUD 服务互补。

与 Java 对照

ScalaJava
CirceJackson / Gson
Doobie / SlickJPA / JdbcTemplate
Spark Dataset APISpark Java API(略冗长)
IO 效应@Transactional + 阻塞 JDBC

同一 JVM 上 Circe 与 Jackson 可共存;混合项目注意 JSON 注解与模块依赖边界。

练习

  • 用 Circe 解析含可选字段的 JSON 到 Option
  • 写 Doobie 或 Slick 查询列出前 10 条 bookmark
  • 对比 Jackson @JsonProperty 与 Circe auto 推导配置

小结

Circe 管 JSON,Doobie/Slick 管 JDBC,Spark 管大数据。 下一课测试。见 scala-essentials。

加载本节练习…
← 上一课后端框架下一课 →测试