2011-01-05 28 views
14

Cách tốt nhất để truy vấn điều gì đó mà không sử dụng GORM trong grails là gì?Truy vấn Grails không sử dụng GORM

Tôi có truy vấn không dường như để vừa với mô hình GORM, truy vấn có truy vấn phụ và trường được tính toán. Tôi đã đăng trên stackoverflow đã không có phản hồi nên tôi quyết định thực hiện một cách tiếp cận khác. Tôi muốn truy vấn một cái gì đó không sử dụng GORM trong một ứng dụng grails. Có cách nào dễ dàng để có được kết nối và đi qua tập kết quả không?

Trả lời

37

Trong một dịch vụ hoặc bộ điều khiển, bạn có thể thêm một phụ thuộc tiêm cho đậu dataSource và sử dụng groovy.sql.Sql hoặc JDBC trực tiếp nếu bạn là một masochist.

import groovy.sql.Sql 

class DataService { 

    def dataSource 

    void runQuery(...) { 
     def sql = new Sql(dataSource) 
     sql.eachRow('select * from foo') { row -> 
     ... 
     } 
    } 
} 
+0

hoạt động tốt. Cảm ơn! – Tihom

+2

+1 cho masochist và cũng cho câu trả lời ... – fabien7474

-1

Trong hầu hết các trường hợp, tôi sử dụng truy vấn tiêu chí.

def c = Account.createCriteria() 
def results = c { 
    between("balance", 500, 1000) 
    eq("branch", "London") 
    or { 
     like("holderFirstName", "Fred%") 
     like("holderFirstName", "Barney%") 
    } 
    maxResults(10) 
    order("holderLastName", "desc") 
} 
+0

Điều này không hỗ trợ truy vấn phụ từ những gì tôi biết – Tihom

+0

@Tihon nó hỗ trợ truy vấn con bởi vì nó là một truy vấn-tiêu chuẩn-ngủ-truy vấn http://docs.jboss.org/ hibernate/core/3.3/reference/en/html/querycriteria.html # querycriteria-detachedqueries – Medrod

+0

@Igs GORM không phải là tiêu chí truy vấn. Truy vấn tiêu chí trông giống GROM hơn HSQL nhưng nó không giống nhau. GROM đang sử dụng các phương thức meta và các truy vấn tiêu chí sẽ sử dụng các truy vấn tiêu chuẩn ngủ đông. – Medrod

Các vấn đề liên quan