Passing multiple arguments into a SELECT without using a complex object

后端 未结 5 2069
轻奢々
轻奢々 2020-12-15 11:39

I am trying to pass in startSequenceId, stopSequenceId, orderNumber into the SQL map, however, i don\'t wish to use a typed object, i.

相关标签:
5条回答
  • 2020-12-15 12:17

    cant comment,

    Found the answer, thanks.

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

    this link is broken, currently correct one is https://github.com/mybatis/mybatis-3/wiki/FAQ#how-do-i-use-multiple-parameters-in-a-mapper

    copy + paste from this wiki

    Java reflection does not provide a way to know the name of a method parameter so MyBatis names them by default like: param1, param2... If you want to give them a name use the @param annotation this way:

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

    Now you can use them in your xml like follows:

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

    tl;dr

    when you declare method in your interface instead of standard java structure

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

    use (add @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)
    
    0 讨论(0)
  • 2020-12-15 12:19

    You can use the built in parameterType 'map' eg

    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>
    
    0 讨论(0)
  • 2020-12-15 12:20

    @Chin I'll post what I had typed anyway with a simple example though you found what your looking for. My example using 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>
    

    Hope this helps.

    0 讨论(0)
  • 2020-12-15 12:24

    In MyBatis 3, you can use @Param annotation in your mapper class(interface) method:

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

    Then you can use #{seqId}, #{orderId} in the SQL without using parameterType attribute.

    0 讨论(0)
  • 2020-12-15 12:27

    Found the answer, thanks.

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

    0 讨论(0)
提交回复
热议问题