sourcecode

Java용 LINQ 도구

codebag 2023. 9. 10. 12:13
반응형

Java용 LINQ 도구

자바용 LINQ가 유용한 도구가 될까요?자바 객체를 데이터베이스의 행에 매핑할 수 있는 도구를 개발 중입니다.

  1. 이것이 자바 프로그래머들에게 유용할까요?
  2. 어떤 기능이 유용할까요?

자바용 LINQ도 좋겠지만 문제는 언어 통합입니다.

자바에는 람다처럼 간결한 표현이 없고, 그것들은 LINQ의 기반 중 하나입니다.확장을 통해 익명의 내부 클래스를 생성하도록 함으로써 람다 식을 사용하지 않는 일반 Java 위에 쿼리 식을 지원하는 계층을 만들 수 있다고 생각합니다. 하지만 이는 매우 끔찍할 것입니다.LINQ에서 SQL로의 작업을 원하는 경우 식 트리도 필요합니다.

확인된 예외 사항들이 방해가 될 수도 있지만, 우리가 알아봐야 할 것 같습니다.IQueryable과 동등한 항목은 일종의 일반적인 검사 예외를 가져야 합니다. 또는 요소 유형과 예외 유형 모두에서 일반적일 수 있습니다.

어쨌든, 이것은 모두 속셈입니다. 자바 커뮤니티가 폐쇄로 어려움을 겪고 있는 것을 고려할 때, 2012년 이전에 자바 자체에서 LINQ와 같은 것을 기대하는 것은 어리석은 일이라고 생각합니다.물론, 그것이 "자바와 같은" 언어로는 불가능하다는 것은 아닙니다.예를 들어 그루비는 이미 어떤 유용한 측면을 가지고 있습니다.

라이브러리 측면에서 Hibernate는 이미 LINQ에서 SQL로의 많은 기능을 "통합되지 않은" 버전으로 제공하고 있습니다.LINQ to Objects의 경우 Google Java Collections API를 살펴보셔야 합니다. 이 API는 상당히 동일한 종류(필터링, 투영 등)입니다.물론 람다가 없으면 사용하기가 훨씬 더 까다롭지만, 그래도 정말, 정말 편리합니다. (저는 직장에서 구글 컬렉션 코드를 항상 사용하는데, 자바 컬렉션으로 다시 돌아가고 싶지는 않습니다.)

주목할 점은 스칼라 2.8이 LINQ를 지원한다는 것입니다.


실제로 스칼라 표준 아트 컬렉션은 어떤 의미에서 LINQ-for-Objects와 같이 작동하는 API를 제공합니다.예는 다음과 같습니다.

List("Paris","Berlin","London","Tokyo")
  .filter(c => c.endsWith("n"))
  .map(c => c.length) 
// result would be length of the words that ends 
// with "n" letter ("Berlin" and "London").

new-line-dot 구문을 두려워하지 마십시오. 코드를 기존 스타일로 작성할 수 있습니다.

Array(1,2,3,4,5,6).map(x => x*x)

또한 LINQ-to-SQL 구문에 가까운 여러 프로젝트가 있습니다.예를 들어, Squeryll에서 가져온 토막글:

import Library._
using(session) { 
  books.insert(new Author(1, "Michel","Folco"))            
  val a = from(authors)(a=> where(a.lastName === "Folco") select(a)) 
}
// but note that there is more code behind this example

이 문제에 대한 보다 일반적인 접근 방법은 Querydsl을 사용하는 것이 좋습니다.

JPA/Hibernate, JDO, SQL 및 Java Collection 백엔드를 지원하는 LINQ 스타일 구문을 제공합니다.

저는 Querydsl의 관리자이므로 이 답변은 편파적입니다.

Java LINQ에서 SQL로의 구현.에 비해 전체 언어 통합 및 더 큰 기능 집합을 제공합니다.NET LINQ.

최대 절전 모드는 HQL을 사용합니다.개체를 수행할 수 있지만 관계형 데이터베이스에 대해서만 수행할 수 있습니다.

LINQ-to-objects 기능을 제공하는 Java의 확장 버전은 SBQL4J입니다. 다음을 제공합니다.

  • 컴파일 시간 내의 안전 형식 안전성
  • LINQ보다 뛰어난 기능을 갖춘 강력한 쿼리 엔진
  • 현재 JVM과의 호환성(쿼리를 순수 Java 코드로 변환하기 위해 전처리를 사용함)
  • 성능이 좋음(시동 시 반사가 사용되지 않음)
  • 명확하고 정확한 의미론은 불필요하고 불분명한 통사당입니다.

걸음걸이:

첫 번째 접근 방식: 람다 대신 문자열을 표현에 사용하여 Java LINQ를 구현합니다.

쓰기 IQueryProviders문자열 표현을 기준으로 합니다.

그런 다음 언어로 직접 문자열 표현을 추가합니다.

우선,잘 되는 은: to way to write 는 하는 은 이지만 하는 입니다 를 은 을 로 을 을 : 입니다 은 을 IQueryProviders, 그런 다음 POJO의 공급자, Hibernate의 공급자, SQL Server 또는 Oracle의 공급자 등을 작성합니다.

시에나 프로젝트는 좋은 것 같습니다.

언급URL : https://stackoverflow.com/questions/346721/linq-for-java-tool

반응형