题
我试图通过在 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我会后什么我输入了反正用一个简单的例子虽然你找到你想找的。我例如路由相关配置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>
希望这会有所帮助。
其他提示
您可以使用内置的parametertype'map'
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中,不使用参数型属性。
不能发表评论,
找到答案,谢谢。
此链接被打破了,目前正确的一个是 https://github.com/mybatis/mybatis-3/wiki/faq#how-do-i-i-i-is-mustiple-parameters-in-a-mapper
复制此Wiki的粘贴
Java反射无法提供一种方法来了解方法参数的名称,因此Mybatis默认情况下将它们命名为:param1,param2 ...如果您想给他们一个名称,请使用@param notation the @param注释:
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)
不隶属于 StackOverflow