scala - Anorm - 通用插入
问题描述
有没有办法像使用常规 ORM 一样使用 Anorm?我想要一个只插入提供的元素的方法。
def insert[T](element: T)(implicit connection: Connection) = {
element.insert(connection)
}
我绝对可以自己实现它,但感觉就像我在重新实现一个 ORM ......旧的 anorm 版本有这个Magic[T]但我现在看不到它
解决方案
文档明确指出 Anorm 不是 ORM(永远不会是)。
如前所述,要插入或更新值,必须提供类型类T
的实例。ToStatement
提供了一些宏来自动实现此类实例。
import anorm.{ Macro, SQL, ToParameterList }
import anorm.NamedParameter
case class Bar(v: Int)
val bar1 = Bar(1)
// Convert all supported properties as parameters
val toParams1: ToParameterList[Bar] = Macro.toParameters[Bar]
val params1: List[NamedParameter] = toParams1(bar1)
// --> List(NamedParameter(v,ParameterValue(1)))
val names1: List[String] = params1.map(_.name)
// --> List(v)
val placeholders = names1.map { n => s"{$n}" } mkString ", "
// --> "{v}"
val generatedStmt = s"""INSERT INTO bar(${names1 mkString ", "}) VALUES ($placeholders)"""
val generatedSql1 = SQL(generatedStmt).on(params1: _*)
推荐阅读
- java - 使用比较器接口对本地日期进行排序
- jquery - 如何通过 Javascript / jQuery 在按钮单击时显示引导警报?
- reactjs - 在 React 中解决生命周期差异测量 DOM 节点
- asp.net-mvc - 如何根据特定查询字符串参数的值路由到控制器操作?
- tableau-api - IF ELSE 函数通过不同的数据源
- c# - 关联动态生成的控件
- c++ - C++:对模板使用“extern”关键字有什么意义吗?
- python - 将 SQL 查询外包到自己的模块中好不好?
- sql-server - 识别通过 SQL Server 2014 中的前端填充的表或列
- typescript - 如何使用 Observable 和 turf.js 构建多边形?