2011-10-06 169 views

回答

0

您可以構建整個字符串WHERE子句,將其放入參數對象中,然後像這樣在您的iBATIS XML中引用它:

select * 
from blah 
where ?whereClause? 

'?'在參數的末尾告訴iBATIS按原樣使用它的內容。這可能會打開潛在風險(SQL注入等)的大門,因此在繼續使用此方法之前,請務必徹底檢查您的參數。

1

這是通過從IBatis生成動態查詢的解決方案。

用於查詢的配置對象:

[Serializable] 
    public partial class QueryHelper 
    { 
     private string _queryFields; 
     public string query_fields 
     { 
      get { return _queryFields; } 
      set { _queryFields = value; } 
     } 

     private string _queryFrom; 
     public string query_from 
     { 
      get { return _queryFrom; } 
      set { _queryFrom = value; } 
     } 

     private string _queryFilterDefa; 
     public string query_filter_defa 
     { 
      get { return _queryFilterDefa; } 
      set { _queryFilterDefa = value; } 
     } 

     private string _queryFilterId; 
     public string query_filter_id 
     { 
      get { return _queryFilterId; } 
      set { _queryFilterId = value; } 
     } 

     private string _queryJoins; 
     public string query_joins 
     { 
      get { return _queryJoins; } 
      set { _queryJoins = value; } 
     } 

     private string _queryFilter; 
     public string query_filter 
     { 
      get { return _queryFilter; } 
      set { _queryFilter = value; } 
     } 

     private string _queryOrder; 
     public string query_order 
     { 
      get { return _queryOrder; } 
      set { _queryOrder = value; } 
     } 
    } 

的XML

<?xml version="1.0" encoding="utf-8" ?> 
<sqlMap namespace="QueryHelper" 
    xmlns="http://ibatis.apache.org/mapping" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <alias> 
    <typeAlias alias="QueryHelper" type="Core.CustomEntities.QueryHelper" /> 
    </alias> 
    <statements> 
    <select id="ExecuteQuery" parameterClass="QueryHelper" resultClass="HashTable"> 
     SELECT $query_fields$ 
     FROM $query_from$ 
     <isNotEmpty property="query_joins" > 
     $query_joins$ 
     </isNotEmpty> 
     WHERE $query_filter_defa$ 
     <isNotEmpty prepend="AND" property="query_filter_id" > 
     $query_filter_id$ 
     </isNotEmpty> 
     <isNotEmpty prepend="AND" property="query_filter" > 
     $query_filter$ 
     </isNotEmpty> 
     <isNotEmpty prepend="ORDER BY" property="query_order" > 
     $query_order$ 
     </isNotEmpty> 
    </select> 
    </statements> 
</sqlMap>