Closed timzaak closed 6 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
当 sql 语句中 包含 ?
时,要转义 ??
关于 db 句柄和相关隐士转换的处理:
我们一般会在 service 层事务,这就导致一些在 dao 层用的辅助 API 以及 sql 语句构造,在 service 层也需要用到。
所以,辅助 api 要与 dao 脱离出来,方便 service 层处理。 dao 层要给 service 层提供 sql 构造器,方便执行。
这个地方会牵扯以后的分库分表,应该通过中间件去做事务。然后尽量不用关联查询
case class AB()
implicit val a = MappedColumnType.base[AB, String]( ab=> "", str => AB())
数据类型隐式转换。。 方便 table 描述。
由于目前所在公司使用的是 slick functional mapping program. 所以对 slick 有一个更全面的了解了。 目前对其使用方式是:
最后,能用 slick functional 就用它,用不了再换 plain sql。 目前代码中 plain sql 最终需要迁移的。
最后的最后。选型为 skinny-framwork orm
不使用
select *
这种语句。需要将 case class field name 放进去。目前 Dao 层 DSL 已经实现。如果封装,需要费大工夫,那还不如使用其他的一些框架呢
skinny-framwork orm 或许可以看看。