Mybatis默认接收一个参数,通过#{value}
可以方便的取出;此参数可以是对象,可以是基本类型,集合。
1、传入多个参数
虽然默认只接收一个参数,但是此参数可以是一个对象;故而传入多个参数可以通过借助包装类,将这些参数封装成一个包装类,即可达到目的。然而,Mybatis其实也提供了相应的方法,那就是org.apache.ibatis.annotations.Param
包下面@Param
注解。使用方法也很简单,类似于springmvc的@RequestParam
注解,只是格式上面有些小区别而已。Mybatis的这个注解有一个属性是value
,与上面提到的#{value}
是同一个单词。没错,Mybatis的这个注解就是给这个value重新赋值。示例:
在mapper中:
OrdersUser selectBingoByOrdersId(@Param(value = "ordersId") String ordersId, @Param(value = "userId") String userId);
下面,在.xml文件中,我们只需要通过取值运算符取出刚才设置的值即可。#{ordersId},#{userId}
在xml文件中:
<select id="selectBingoByOrdersId" resultMap="BaseResultMap" parameterType="java.lang.String">
select
<include refid="Base_With_User_Column_List"/>
from orders_user ou
LEFT JOIN user_paixi u ON ou.user_id = u.id
where ou.orders_id = #{ordersId} AND ou.user_id = #{userId} AND ou.category = 2
limit 1
</select>
2、传入集合,List,Set,Map
传入集合主要是取值的时候有些繁琐 ,需要借助foreach collection。
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。
foreach元素的属性主要有 item,index,collection,open,separator,close。
- item表示集合中每一个元素进行迭代时的别名
- index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置
- open表示该语句以什么开始
- separator表示在每次进行迭代之间以什么符号作为分隔 符
- close表示以什么结束
在使用foreach的时候collection属性是必须指定的,即parameterType必须写明传入的类型
示例:
在mapper中:
List<UserPaixi> selectByKeySet(@Param(value = "idSet") Set<String> idSet);
在xml文件中:
<select id="selectByKeySet" resultMap="BaseResultMap" parameterType="java.util.Set">
SELECT
<include refid="Base_Column_List"/>
FROM user_paixi
WHERE
id in
<foreach collection="idSet" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
List,Map的也类似