scala - 为什么 Doobie 使用免费 monad?

标签 scala doobie

好像很简单

type Db[F[_], A] = Kleisli[F, Connection, A]
type Transactor[DB[_], F[_]] = DB ~> F

也可用于构建功能性 JDBC 层

最佳答案

总结来自@SystemFw 和@tpolecat 的回答 https://gitter.im/scala/scala?at=5cfe6505bf4cbd167c619960

免费 Monad 的优点:

  • 客户端代码无权访问 Connection 实例,因此不能泄漏它
  • 没有用户的F[_]因此不能在事务边界内使用不正确的(异步)效果。这很重要,因为大多数 JDBC 驱动程序都设计了 java.sql.Connection实现是单线程的。

  • 免费 Monad 的缺点:
  • 客户端代码无法访问 Connection,因此无法使用替代 ORM(如 JOOQ)
  • 没有用户的F[_]所以你不能在事务中嵌套特定的效果。

  • Doobie 将来会有无标签版本。

    关于scala - 为什么 Doobie 使用免费 monad?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56524454/

    相关文章:

    scala - 将 Parquet 作为 Scala 中的案例类对象列表读取

    scala - Doobie - 将任意效果提升到 ConnectionIO 中

    scala - 如何使用 Doobie 在插入语句中获得可选结果?

    scala - 在 doobie 中为 for-comprehension 编写可选查询?

    scala - 如何将 java.util.UUID 转换为 doobie.syntax.SqlInterpolator.SingleFragment?

    scala - 如何匹配 Scala "match"语句中的类?

    scala - Scala 测试中应该和必须有什么区别?

    scala - 如何在我的 Scala 脚本中获得自动依赖解析?

    java - 实现静态网站

    scala - 1 个事务内的 Doobie 和 DB 访问组合