Lambdaj (và một số thư viện tương tự khác) cung cấp một chức năng having
cho phép tôi để xác định vị như vậy (ví dụ trực tiếp từ trang lambdaj Features):Có thư viện Java nào để định nghĩa các biến vị ngữ như các chuỗi giống SQL không?
List<Person> oldFriends =
filter(having(on(Person.class).getAge(), greaterThan(30)), meAndMyFriends);
tôi đã khá thích để có thể xác định Java của tôi ngữ đối tượng sử dụng một cú pháp đơn giản chuỗi, "age > 30"
- tương tự như một SQL mệnh đề where - vì vậy bộ lọc trên trở thành một cái gì đó như:
List<Person> oldFriends =
filter(having(Person.class, "age > 30"), meAndMyFriends);
có một thư viện như vậy tồn tại, hoặc bất cứ ai có thể giới thiệu một số khối xây dựng cho phần truy vấn phân tích cú pháp Tôi đồng uld sử dụng để xây dựng một bản thân mình? Tôi không thực sự tâm trí những loại vị ngữ (hamcrest, ổi vv) nó tạo ra. Tôi có thể nghĩ đến một số điều tuyệt vời để hỗ trợ: sự cân bằng và bất bình đẳng, về các loại tùy chỉnh và nguyên thủy, và/hoặc/không, dấu ngoặc đơn, LIKE
(đối với Strings) , in(...)
, diễn giải tên enum, thuộc tính của thuộc tính.
Dưới đây là một ví dụ về một vị phức tạp hơn:
"salesCount > 10 and (country='UK' or city='New York')
and attitude not in (MENACING, RUDE)
and product.name <> 'Widget' "
(Ví dụ này giả định rằng các lớp ngữ được áp dụng cho (nói một lớp SalesPerson
) có phương pháp getSalesCount(), getCountry(), và getCity(), cũng như getAttitude() (trả về một enum). Nó cũng có một thuộc tính getProduct trả về một kiểu với phương thức getName).
Động lực: chúng tôi có hệ thống máy khách-khách hàng có nhiều API ngôn ngữ (hiện tại là Java & C#); Tôi đang tìm một cách bất khả tri về ngôn ngữ để người dùng chỉ định vị từ lọc trên một tập hợp các đối tượng mà nội dung chính xác chỉ được biết đến quy trình máy chủ (được viết bằng Java).
Điều tra về việc tạo DSL đặc biệt là Nội bộ trong trường hợp của bạn. –
Chủ đề này có thể giúp http://stackoverflow.com/questions/5620985/is-there-any-good-dynamic-sql-builder-library-in-java –
Bạn dường như tìm kiếm một thứ gì đó giống như LINQ dường như không tồn tại (chưa). Có thể bạn sẽ tìm thấy một cái gì đó ở đây: http: //stackoverflow.com/questions/1217228/what-is-the-java-equivalent-for-linq –