создать динамический запрос Ibatis - PullRequest
0 голосов
/ 06 октября 2011

Есть ли способ передачи динамических имен столбцов?

мы можем передавать значения, используя ##

value #

Где # columnName # = # value #

не работает для меня

Ответы [ 2 ]

1 голос
/ 31 января 2012

Это мое решение путем генерации динамических запросов из 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>
0 голосов
/ 06 октября 2011

Вы можете построить строку для всего предложения WHERE, поместить ее в свой объект параметров, а затем сослаться на нее в iBATIS XML следующим образом:

select *
from blah
where ?whereClause?

'?'на концах параметра указывает iBATIS использовать его содержимое как есть.Это может открыть путь к потенциальным рискам (SQL-инъекция и т. Д.), Поэтому обязательно тщательно проверьте ваши параметры, прежде чем продолжить работу с этим методом.

...