标签: anorm

NodeJS vs Play Framework适用于大型项目

我真的在两个不同的堆栈之间撕裂,用于构建一个大型应用程序.一方面有这个选项:

  • Node.js的
    • 表达
    • 咖啡脚本
    • coffeekup
    • 猫鼬/ mongodb或
    • presistencejs/MySQL的


  • 使用Scala播放框架
    • Anorm w/mysql
    • 或mongodb

node.js路径对我很有吸引力,因为我可以在coffeescript中编写所有服务器端代码,视图和客户端代码,我已经知道了.如果我沿着这条路走下去,我仍然不能100%确定我会采取哪种数据库路径.mongoose使得存储数据变得快速而简单,但考虑到我想到的数据模型(非常SQLish),缺乏真正的关系可能更难以工作.

Play Framework路径也很有吸引力,因为我在使用Java时非常了解框架,但我对Scala知之甚少,因此在学习该语言的过程中会对生产力产生影响.Anorm数据库访问层很吸引人,因为我可以手工编写我喜欢的SQL,并将结果自动映射到对象,这样可以省去很多工作.

我一直倾向于node.js,但我并没有在最好的数据库访问层上出售.任何人都有任何经验,可以分享一些见解?

mongodb node.js coffeescript playframework anorm

55
推荐指数
2
解决办法
2万
查看次数

哪里可以看到play2中记录的sql语句?

我发现有这样的配置application.conf:

# If enabled, log SQL statements being executed.
db.default.logStatements=true
Run Code Online (Sandbox Code Playgroud)

我已启用它,但我找不到任何记录执行的sqls的日志文件.

我在哪里可以找到它,或者我会错过什么?

sql logging anorm playframework-2.0

36
推荐指数
2
解决办法
1万
查看次数

an in中的"In"条款?

在anorm中使用"in"子句似乎并不容易:

val ids = List("111", "222", "333")
val users = SQL("select * from users where id in ({ids})").on('ids-> ???).as(parser *)
Run Code Online (Sandbox Code Playgroud)

如何更换???零件?

我试过了:

on('ids -> ids)
on('ids -> ids.mkString("'","','","'"))
on('ids -> ids.mkString("','")
Run Code Online (Sandbox Code Playgroud)

但都没有效果.

我在讨论中看到了完全相同的问题:https://groups.google.com/d/topic/play-framework/qls6dhhdayc/discussion,作者有一个复杂的解决方案:

val params = List(1, 2, 3) 

val paramsList = for ( i <- 0 until params.size ) yield ("userId" + i) 

// ---> results in List("userId0", "userId1", "userId2") 

User.find("id in ({%s})"

    // produces "id in ({userId0},{userId1},{userId2})"
    .format(paramsList.mkString("},{")) 

    // produces Map("userId0" -> …
Run Code Online (Sandbox Code Playgroud)

scala anorm

26
推荐指数
3
解决办法
4602
查看次数

Scala Anorm字符串替换是否会消除输入?

我正在使用Play!框架以及Anorm访问数据库.我经常看到如下例子,其中对象成员直接注入SQL语句.

我的问题是,这些投入是否已消毒?大多数示例如下所示:

object Person {
    def save(p:Person) {
        DB.withConnection ("default") { implicit connection =>
            SQL("""
                 INSERT INTO person(firstName,lastName)
                 values ({firstName}, {lastName})
                """
               ).on(
                "firstName" -> p.firstName,
                "lastName"  -> p.lastName
            ).executeUpdate()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我会试图通过黑客行为找出答案,但很容易犯错,所以我觉得要求更合适,我可以借鉴人群的智慧.

sql scala anorm playframework-2.0

23
推荐指数
1
解决办法
2579
查看次数

如何在Anorm中保存新对象时检索主键

我正在使用Scala Play!使用Anorm将数据模型持久化到数据库的框架.我在这里遵循示例代码:

case class Bar(id: Pk[Long], name: String)

object Bar {

  val simple = {
    get[Pk[Long]]("id") ~
    get[String]("name") map {
      case id~name => Bar(id, name)
    }
  }

  def findAll(): Seq[Bar] = {
    DB.withConnection { implicit connection =>
      SQL("select * from bar").as(Bar.simple *)
    }
  }

  def create(bar: Bar): Unit = {
    DB.withConnection { implicit connection =>
      SQL("insert into bar(name) values ({name})").on(
        'name -> bar.name
      ).executeUpdate()
    }
  }

}
Run Code Online (Sandbox Code Playgroud)

试图扩展它,我想检索刚刚创建的主键并将其存储在案例类中.

如何检索主键?

sql scala playframework anorm playframework-2.0

18
推荐指数
1
解决办法
4396
查看次数

Play2的anorm无法在postgresql上运行

我发现play2的anorm的行解析器依赖于jdbc驱动程序返回的元数据.

所以在play提供的内置示例"zentasks"中,我可以找到这样的代码:

object Project {
  val simple = {
    get[Pk[Long]]("project.id") ~
    get[String]("project.folder") ~
    get[String]("project.name") map {
      case id~folder~name => Project(id, folder, name)
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

请注意,这些字段都有project.前缀.

它适用于h2数据库,但不适用于postgresql.如果我使用portgresql,我应该把它写成:

object Project {
  val simple = {
    get[Pk[Long]]("id") ~
    get[String]("folder") ~
    get[String]("name") map {
      case id~folder~name => Project(id, folder, name)
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

在Play的谷歌小组中问过这个问题,Guillaume Bort说:

是的,如果你使用postgres它可能是原因.postgresql jdbc驱动程序已损坏,并且不返回表名.

如果postgresql的jdbc驱动程序确实有这个问题,我认为anorm会有一个问题: 如果两个表有相同名称的字段,并且我查询它们join,anorm将无法获得正确的值,因为它不能找出哪个名称属于哪个表.

所以我写了一个测试.

1.在postgresql上创建表

create table a (
    id      text not null primary key,
    name    text not …
Run Code Online (Sandbox Code Playgroud)

postgresql scala playframework anorm playframework-2.0

16
推荐指数
1
解决办法
2833
查看次数

anorm的Pk的目的是什么?

我正在使用Scala和Anorm编写Playframework 2.0应用程序来访问db.

目前我使用Pk[Long]id领域,我很担心额外的get访问实际值所需要的呼叫.所以我开始使用普通Longid字段,一切仍然完美.

什么Pk是,我应该使用它而不是普通类型?Pk与普通类型相比,它能给我带来额外的功能吗?

types scala anorm playframework-2.0

15
推荐指数
1
解决办法
2701
查看次数

带有Anorm和Scala Play Framework的动态SQL参数

是否可以为anorm的"on"方法动态创建列表?

我有一个带有可选输入的表单,目前我检查每个选项并创建一个包含已定义选项的列表,并尝试将其传递给anorm.目前我收到此编译错误

type mismatch; found : List[java.io.Serializable] required: (Any, anorm.ParameterValue[_])
Run Code Online (Sandbox Code Playgroud)

我不确定如何创建此列表.当前代码:

val onList = List(
        'school_id = input.school,
        if(input.rooms isDefined)       ('rooms -> input.rooms) else "None" ,
        if(input.bathrooms isDefined)   ('bathrooms -> input.bathrooms) else "None" ,
        if(input.houseType isDefined)   ('houseType -> input.houseType) else "None" ,
        if(input.priceLow isDefined)    ('priceLow -> input.priceLow) else "None" ,
        if(input.priceHigh isDefined)   ('priceHigh -> input.priceHigh) else "None" ,
        if(input.utilities isDefined)   ('utilities -> input.utilities) else "None" 
).filter(_!="None")
SQL("SELECT * FROM Houses WHERE " + whereString).on(onList).as(sqlToHouse *)
Run Code Online (Sandbox Code Playgroud)

我试过这样做,因为最初我认为它会是一样的

.on('rooms -> input.rooms, 'bathroom …
Run Code Online (Sandbox Code Playgroud)

sql scala playframework anorm playframework-2.0

14
推荐指数
1
解决办法
4143
查看次数

anorm动态过滤器

我正在研究anorm文档(来自播放框架)并且不清楚它是否支持常见的查询用例:动态过滤器,即用户在10字段搜索表单上填写2或3个搜索条件.

在这种情况下,如何在没有经典字符串操作的情况下动态构造查询?

scala playframework anorm playframework-2.0

13
推荐指数
1
解决办法
1558
查看次数

斯卡拉玩!使用anorm或ORM

似乎Play提供的所有示例应用程序!框架利用anorm来持久化.在ORM上选择anorm的原因是什么?如果您使用的是ORM,您使用的是什么?为什么?

orm scala playframework anorm

12
推荐指数
2
解决办法
6108
查看次数