MyBatis: замена параметров сопоставления времени компиляции, сохранение подготовленного stmt, но настройка имен таблиц?

MyBatis 3.1.1 допускает либо #{...} для подготовленных параметров операторов, либо ${...} для замены каждый раз.

Я упускаю что-то, что позволило бы параметризовать части оператора SQL, но все еще оставил его подготовленным; т.е. заменить во время настройки.

Как я могу это сделать? Может быть, с использованием некоторых фрагментов SQL?

Обновить:

Я нашел:

<sql id="userColumns"> id,username,password </sql>
<select id="selectUsers" parameterType="int" resultType="hashmap">
    SELECT <include refid="userColumns"/> some_table WHERE id = #{id}
</select>

См. http://www.mybatis.org/core/sqlmap-xml.html Это было бы, если ${...} может быть использовано внутри него.

3 ответа

Я думаю, что нашел это...

<sql id="userColumns"> id,username,password </sql>

А потом

<select id="selectUsers" parameterType="int" resultType="hashmap">
    SELECT <include refid="userColumns"/>
    FROM some_table
    WHERE id = #{id}
</select>

Так что я буду использовать ${...} в этом, и это должно привести меня туда.

См. http://www.mybatis.org/core/sqlmap-xml.html

В моем проекте у нас есть очень простое решение для этого случая.

У нас есть строка с именем TABLENAME в объектах данных. Когда мы конструируем Объекты, мы инициализируем имя таблицы. и в sqls у нас есть имя таблицы enquoutet.

в DataObject:

String TABLENAME;
public String getTABLENAME() {return TABLENAME;}
public void setTABLENAME(String tablename) {this.TABLENAME = TABLENAME;}

в sqls:

<delete id="simpleDelete" parameterClass="Integer">
    delete from ${jdbc.schema}.$TABLENAME$ 
    WHERE ID = #ID#
</delete>

Я не знаю, является ли это лучшим решением, но оно работает довольно хорошо. Я открыт для лучших решений.

Поскольку <sql> не работает, как нужно для этой цели, я заполнил запрос функции. http://code.google.com/p/mybatis/issues/detail?id=627

Другие вопросы по тегам