2011-11-24 2 views
1

업데이트스칼라 콩 강압 :: 누락 LINQ

모두 JDBC 래퍼하지으로 ORMs 인 것을 투덜 거리는 비슷한 것 같다 ANORM을 특징으로합니다 2.0의 스칼라 버전을 재생합니다. 여기 ANORM 쿼리 강제는 파서 콤비와 직장에서의 :

은 멀티 라인 쿼리 "" "SQL은" ""좋은
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 } 
       ) 
     } ? 
    ) 

, 나는 것을 좋아하지만, 강제, 제발, 더 ;-) 그루비에서,하지 스칼라는 일부() 옵션 [] 콤보를 요구하는 것, 그루비에서 매우 편리

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

널 안전 연산자 (.might - 수 - 널은?) : 동일한 쿼리와 콩 강제는 1 라이너 가능한 null 결과를 처리합니다. Scala 코더는 Scala에서 null 처리를 수행합니까?

이 게시물의 일반적인 추측은 다음과 같습니다. 스칼라는 컴파일러 유형 안전 코드를 유지하면서 스크립팅 언어의 간결성을 제공 할 수 있습니까? 스칼라가 C# (의도하지 않은 화염)보다 더 강력한/표현력을 가지면 Scala LINQ가 가능해야합니다. 게다가 Scala는 기능적 객체 지향 패러다임에 걸쳐 있기 때문에 Groovy 수준의 간결함 (예 : 위의 1-liner query-bean-coercion)을 달성 할 수 있어야합니다.

이러한 가정이 사실이라면 기존의 스칼라 ORM과 jdbc 래퍼가 C#의 groovy와 LINQ에 비해 많은 보일러 플레이트를 필요로하는 이유는 무엇입니까? 분명히 나는 ​​구현이 믿을 수 없을만큼 간결하거나, (LINQ-to-SQL에서와 같이) 그들이 표현하는 기본 언어를 밀접하게 반영하는 맨손의 뼈대 DSL을 찾는 이상 주의자이다.

통해 실행을 복용 한 적이 원래 다양한 스칼라으로 ORMs (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")) 
} 

내가 컴파일러는 당신이 일 때마다 "개체"의 종류를 알 필요가 있음을 이해하지만, "지정해야하는 비 DRY 보인다 row.getInt ('id') "도메인 클래스 자체가 이미 ID가 Int 유형임을 선언 할 때.

그래서 무지에서 벗어나서 스칼라 ORM과 SQL 도우미 프레임 워크가 개발자에게 유추 또는 암시 적 결과 집합을 허용하는 구현 모델을 제공하지 않는 이유는 무엇입니까?

그냥 문맥에 넣으려면, 다른 프레임 워크 좋은 - 투 - haves 중, imo, 우수한 도메인/검증 모델을 가지고 있지만 지방 언어 입력 시간을 낭비하는 뚱뚱한 손가락 타이핑 (시작 시간 고통 스럽다.) 그래서 Scala 프레임 워크를 탐색하고있다.

+0

typesafe stack에 통합 될 예정이다 이해를 참조 Scala Integrated Query ORM 프레임 워크 (예 : 최대 절전 모드)! – aishwarya

+0

귀하의 질문이 Squeryl에 어떻게 적용되는지 잘 모르겠습니다. 일반적인 질의는 (entity) (e => where (e.value === "something") select (e)) 또는 from (entity) (e => 여기서 e.value === "something") select (e.otherValue)). 두 경우 모두 Squeryl은 명시 적으로 지정하지 않아도 적절한 유형을 반환합니다. –

+0

@ aishwarya, 그렇지만 똑바로 동면 할 경우 xml로 내려와야합니다. GORM, grails ORM을 만드는 이유 중 하나는 개발자가 도메인 클래스와 스키마 매핑, xml을 전혀 사용하지 않고 모델링과 관련하여 최대 절전 모드가 효과적으로 숨겨져 있다는 것입니다. – virtualeyes

답변

4

난 당신이 자바를 사용할 수 있습니다, 당신이 당신의 엔티티에 스칼라 유형이 해달라고하면 스칼라 언어 통합 연결 키트 (SLICK)

enter image description here

+0

매우 인상적입니다! – aishwarya

+0

좋은 소식입니다. SIQ 개발은 10 월 3 일 (Vogt와 Zeiger가 Laussane에서 스칼라 솔루션으로 작업하기 시작했을 때)으로 전방위 속도로 나타납니다. http://stackoverflow.com/questions/7429999/are-there-plans- 스카이 링크 (SIQ LINQ)에 대한 지원 유형 공급자 - scalas-siq-scalaintegratedquer – virtualeyes

+0

및 +1 – virtualeyes