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>
Так что я буду использовать ${...} в этом, и это должно привести меня туда.
В моем проекте у нас есть очень простое решение для этого случая.
У нас есть строка с именем 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