2015-06-22 89 views
1

我在本地SQL查詢,像這樣:爲什麼要使用addscalar?

SQLQuery query = session.createSQLQuery("select emp_id, emp_name, emp_salary from Employee"); 

查詢結果可以用來設置員工對象。 在類似的線上,我有相同的查詢附加addscalar(entity_colname)。

query = session.createSQLQuery("select emp_id, emp_name, emp_salary from Employee") 
     .addScalar("emp_id", new LongType()) 
     .addScalar("emp_name", new StringType()) 
     .addScalar("emp_salary", new DoubleType()); 

這裏我們也有獲得類似的方法的結果,那麼什麼是使用addscalar的優勢在哪裏?

問候 周杰倫

+0

它改善如果您正在處理大量數據,則可以提高性能。它們都返回Object數組。 – ganeshvjy

+0

你可以幫助你從對象投射到我們指定的類型。 – Babel

回答

0

你並不真的需要使用addScalar,如果你映射了響應DTO:

public class EmployeeDTO { 
    private final Long id; 
    private final String name; 
    private final Double salary; 

    public EmployeeDTO(Long id, String name, Double salary) { 
     this.id = id; 
     this.name = name; 
     this.salary = salary; 
    } 

    public Long getId() { 
     return id; 
    } 

    public String getName() { 
     return name; 
    } 

    public Double getSalary() { 
     return salary; 
    } 
} 

的查詢變爲:

List<EmployeeDTO> = (List<EmployeeDTO>) session.createSQLQuery(
    "select new my.package.EmployeeDTO(emp_id, emp_name, emp_salary) from Employee") 
.list(); 
+0

這也可以使用addentity來完成,但是addscalar提供了什麼優勢? –

+0

解析參數類型只有輕微的優勢。但是,這種優勢只是微乎其微,因爲setParameter的工作原理是一樣的。 –

+0

如果你喜歡它,你可以接受答案。 –