複雑なオブジェクトを使用せずに複数の引数をSelectに渡す

StackOverflow https://stackoverflow.com/questions/9308210

  •  25-10-2019
  •  | 
  •  

質問

私は渡そうとしています startSequenceId, stopSequenceId, orderNumber ただし、SQLマップには、入力されたオブジェクトを使用したくありません。 parameterType="com.abc.Order", 、そうすることはできますか?

<select id="getSequenceIdByOrderNumber" parameterType="?" resultType="int">
    select *
    from log
    where seq_id
    between #{startSequenceId} and #{stopSequenceId}
    and order_no = #{orderNumber}
    and rownum = 1
</select>
役に立ちましたか?

解決

@chinあなたが探しているものを見つけましたが、私がとにかくタイプしたものを簡単な例で投稿します。 ibatis 2.3.4を使用した私の例

<select id="retrieveTestXXX" parameterClass="java.util.Map" resultClass="java.lang.Integer">
    SELECT
    example_table.id
    FROM example_table
    WHERE example_table.xx_id = #testId# AND example_table.xx_id = #test2Id#
</select>

お役に立てれば。

他のヒント

組み込みのパラメータ型「マップ」を使用できます。

Map<String, Object> parms = new HashMap<String, Object>();
parms.put("name", "abc");
parms.put("phone", "123");
parms.put("email", "123@email.com");

List<Contact> list = myBatis.selectList("getContacts",parms);


<!-- in xml mapper -->
<select id="getContacts" parameterType="map" resultMap="Contact">
  SELECT * FROM CONTACT 
  WHERE CONTACT_NAME = ${name}
  AND CONTACT_PHONE = ${phone}
  AND CONTACT_MAIl = ${email}
</select>

MyBatis 3では、使用できます @Param マッパークラス(インターフェイス)メソッドでの注釈:

public getSequenceIdByOrderNumber(@Param("seqId") int sequenceId,@Param("orderId") int orderNo);

その後、使用できます #{seqId}, #{orderId} パラメータ型属性を使用せずにSQLで。

コメントできません、

答えを見つけました、ありがとう。

http://code.google.com/p/mybatis/wiki/howtoselectmultipleparams

このリンクは壊れており、現在正しいものです https://github.com/mybatis/mybatis-3/wiki/faq#how-do-ise-multiple-parameters-in-a-mapper

このwikiからコピー +貼り付けます

Java Reflectionはメソッドパラメーターの名前を知る方法を提供しないので、MyBatisは次のようにデフォルトで名前を付けます。Param1、Param2 ...名前を付けたい場合は、この方法で@Param Annotationを使用します。

import org.apache.ibatis.annotations.Param;
public interface UserMapper {
   User selectUser(@Param("username") String username, @Param("hashedPassword") String hashedPassword);
}

これで、次のようにXMLでそれらを使用できます。

<select id=”selectUser” resultType=”User”>
    select id, username, hashedPassword
    from some_table
    where username = #{username}
    and hashedPassword = #{hashedPassword}
</select>

tl; dr

標準のJava構造の代わりにインターフェイスでメソッドを宣言するとき

Type methodName (
    ParamType1 paramName1,
    ParamType2 paramName2,
    … ); (this is interface so no method body)

使用(@paramを追加)

Type methodName (
    @Param("name1 available in xml") ParamType1 paramName1,
    @Param("name2 available in xml") ParamType2 paramName2,
    …); (this is still interface so no method body)

答えを見つけました、ありがとう。

http://code.google.com/p/mybatis/wiki/howtoselectmultipleparams

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top