2011-11-24 70 views
1

更新斯卡拉豆强制::失踪的LINQ

玩2.0的版本斯卡拉将有ANORM,这似乎类似于哓在这两者都是JDBC包装和不奥姆斯。这里的ANORM查询强制在工作与解析器组合:

SQL(""" 
     select * from Country c 
     join CountryLanguage l on l.CountryCode = c.Code 
     where c.code = 'FRA'; 
    """ 
    ).as(
     str("name") ~< spanM(
      by=str("code"), str("language") ~< str("isOfficial") 
     ) ^^ { 
      case country~languages => 
       SpokenLanguages(
        country, 
        languages.collect { case lang~"T" => lang } headOption, 
        languages.collect { case lang~"F" => lang } 
       ) 
     } ? 
    ) 

多行查询“”“SQL‘’”很不错,我很喜欢这一点,但胁迫,请,没有;-)在Groovy中,豆强制使用相同的查询是1班轮:(?.might-是空的)

List[Country] c = sql.rows("select * from country")?.collect{ it.toRowResult() as Country } 

空安全操作在Groovy是很方便,斯卡拉似乎需要一些()选项[]组合处理可能的空效果。斯卡拉编码器像Scala中的空处理一样吗?

我猜这篇文章的总体目标是:Scala可以在保留编译器类型安全代码的同时提供脚本语言的简洁性吗?鉴于Scala可能比C#更强大/更有表现力(无意的火焰),那么一个完整的Scala LINQ必须是可能的。此外,由于Scala跨越了功能和OO范例,因此它还必须能够实现Groovy级别简洁(例如,上面的1-liner query-bean-coercion)。

如果这些假设是真实的,那么为什么现有的scala ORM和jdbc包装器需要如此多的样板,与groovy和LINQ on C#相比呢?很显然,我是一个理想主义者,他们正在寻找那些实现要么简明扼要,或者仔细反映他们所代表的底层语言(如在LINQ-to-SQL中)的裸骨架DSL。

原始

已率先通过运行各种斯卡拉的ORM(squeryl,daomapper,情侣别人会后填写)和SQL帮助框架(到目前为止哓)

作为新斯卡拉和一般强类型语言,有一点需要在每个查询结果中指定每个列的类型(String,Int等)。

即将坐上一夜的火车在这里,但我突然觉得刚才,因此把它在那里(会增加一些例子,当我重新恢复在线状态,使这个有点少了絮絮叨叨的)

现在,一个快速从哓的自述在GitHub上:

val users = queryEvaluator.select("SELECT * FROM users WHERE id IN (?) OR name = ?", List(1,2,3), "Jacques") { row => 
    new User(row.getInt("id"), row.getString("name")) 
} 

虽然我明白,编译器需要知道每一个“对象”和你一起工作的类型,似乎非干必须指定“ row.getInt('id')“当域类本身已经声明该id是Int类型时。

因此,我会问,为什么Scala ORM和SQL帮助程序框架不能为开发人员提供允许推断或隐式结果集的实现模型?

只是放在上下文中,我来自Grails,它有一个非常好的领域/验证模型,以及其他框架的好东西,但受到动态语言时间浪费胖手指输入(启动时间也是痛苦的),这就是我探索Scala框架的原因。

+0

,您可以使用Java ORM框架(例如休眠)! – aishwarya

+0

我不确定你的问题如何适用于Squeryl。典型的查询将是(实体)(e => where(e.value ===“something”)select(e))或from(entity)(e => where(e.value === “something”)select(e.otherValue))。在这两种情况下,Squeryl都会返回正确的类型,而不必显式指定它。 –

+0

@aishwarya,对,但是如果你直接休眠,你必须下降到xml。使得GORM(Grails ORM)非常好的一部分原因是,开发人员只是使用域类和模式映射工作,根本就没有任何xml,就建模而言,hibernate是有效隐藏的。 – virtualeyes

回答

4

Scala Integrated Query按照我的理解定,如果你没有斯卡拉类型的实体集成在typesafe stack如Scala语言集成连接套件(SLICK

enter image description here

+0

非常可观! – aishwarya

+0

好消息,截至10月3日,SIQ开发似乎全速前进(当时Vogt和Zeiger开始在Laussane工作,可能是Scala解决方案):http://stackoverflow.com/questions/7429999/are-there-plans-对于scalas-siq-scalaintegratedquer – virtualeyes

+0

和病态链接(SIQ LINQ)+1的支持类型提供商 – virtualeyes