timzaak / blog

8 stars 1 forks source link

plain slick api 使用问题记录 #2

Closed timzaak closed 6 years ago

timzaak commented 7 years ago

GetResult r.<< 和表顺序一致,导致如果case class里Field的顺序和表顺序不一致会产生运行时异常。

不使用 select * 这种语句。需要将 case class field name 放进去。目前 Dao 层 DSL 已经实现。

无法简单安全封装像 pagination 这样的方法

如果封装,需要费大工夫,那还不如使用其他的一些框架呢

skinny-framwork orm 或许可以看看。

timzaak commented 7 years ago

where in 这种语法,如果是 string 还好说,但是 Int, Long 的时候,就有问题了。下面是 hack 方案: https://stackoverflow.com/questions/31156613/is-it-possible-to-use-in-clause-in-plain-sql-slick-for-integers

timzaak commented 7 years ago

当 sql 语句中 包含 ? 时,要转义 ??

timzaak commented 6 years ago

关于 db 句柄和相关隐士转换的处理:

我们一般会在 service 层事务,这就导致一些在 dao 层用的辅助 API 以及 sql 语句构造,在 service 层也需要用到。

所以,辅助 api 要与 dao 脱离出来,方便 service 层处理。 dao 层要给 service 层提供 sql 构造器,方便执行。

这个地方会牵扯以后的分库分表,应该通过中间件去做事务。然后尽量不用关联查询

timzaak commented 6 years ago
case class AB()
implicit val a = MappedColumnType.base[AB, String]( ab=> "", str => AB())

数据类型隐式转换。。 方便 table 描述。

timzaak commented 6 years ago

使用总结

由于目前所在公司使用的是 slick functional mapping program. 所以对 slick 有一个更全面的了解了。 目前对其使用方式是:

最后,能用 slick functional 就用它,用不了再换 plain sql。 目前代码中 plain sql 最终需要迁移的。

timzaak commented 5 years ago

最后的最后。选型为 skinny-framwork orm