Passing multiple arguments to SELECT without using a complex object

I am trying to pass startSequenceId , stopSequenceId , orderNumber to an SQL map, however I do not want to use a typed object, i.e. parameterType="com.abc.Order" , can I do this?

 <select id="getSequenceIdByOrderNumber" parameterType="?" resultType="int"> select * from log where seq_id between #{startSequenceId} and #{stopSequenceId} and order_no = #{orderNumber} and rownum = 1 </select> 
+8
ibatis mybatis
source share
5 answers

@Chin I will post what I typed, in any case with a simple example, although you found what you were 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.

+7
source share

You can use the built-in parameter map Type 'map', for example

 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> 
+15
source share

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

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

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

+5
source share
0
source share

a comment,

Found the answer, thanks.

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

this link is broken, currently it is correct, 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 find out the name of a method parameter, so MyBatis calls them by default: param1, param2 ... If you want to give them a name, use the @param annotation as follows:

 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, as shown below:

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

TL; DR

when you declare a method in your interface instead of the 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) 
-one
source share

All Articles