0

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#sqlを参照してください。 これは、その${...}内部で使用できる場合はそれです。

4

3 に答える 3

1

見つけた気がする…

<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#sqlを参照してください。

于 2012-07-16T00:54:50.400 に答える
1

私のプロジェクトでは、この場合の非常に簡単な解決策があります。

データ オブジェクトに TABLENAME という文字列があります。オブジェクトを構築するとき、テーブル名を初期化します。そして、SQL には tablename enquotet があります。

DataObject で:

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

SQLで:

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

これが最善の解決策かどうかはわかりませんが、非常にうまく機能します。私はより良い解決策を求めています。

于 2012-07-27T08:09:05.973 に答える
0

この<sql>目的のために必要に応じて機能しないため、機能要求を満たしました。 http://code.google.com/p/mybatis/issues/detail?id=627

于 2012-07-16T01:52:15.673 に答える