MyBatis实现In查询


 

1.MyBatis提供foreach语句实现In查询。foreach语法如下:

 

 

  collection:该属性的对应方法的参数类型可以是List、数组、Map。如果方法的参数类型不属于前三种,则必须和方法参数@Param指定的元素名一致。

 

 

  item: 表示迭代过程中每个元素的别名。可以随便起名,但是必须跟元素中的#{}里面的名称一致。

 

 

  index:表示迭代过程中每次迭代到的位置(下标)

 

 

  open:前缀

 

 

  close:后缀

 

 

  separator:分隔符,表示迭代时每个元素之间以什么分隔。

 

 2.当Dao层方法的参数只有一个时,有两种方式实现:

  法1:如果参数类型是List, 则mapper.xml文件中collection值必须为list。

  法2:如果参数类型是Array,则mapper.xml文件中collection值必须为array。

3.实现示例

public interface UserInfoDao { // 法1:参数类型是List List<UserInfoDO> getUserInfobyNames1(List<String> names); // 法2:参数类型是Array List<UserInfoDO> getUserInfobyNames2(String[] names); }
<!-- 法1:参数类型是List --> <select id="getUserInfobyNames1" resultType="com.zijikanwa.model.UserInfoDO"> SELECT * FROM user_info WHERE user_name in <foreach collection="list" item="name" index="index" open="(" close=")" separator=","> #{name} </foreach> </select> <!-- 法2:参数类型是Array --> <select id="getUserInfobyNames2" resultType="com.zijikanwa.ssmspringboottest.model.UserInfoDO"> SELECT * FROM user_info WHERE user_name in <foreach collection="array" item="name" index="index" open="(" close=")" separator=","> #{name} </foreach> </select>

当Dao层方法的参数有多个时,有两种方式实现:

法1:使用@Param(“xxx”)进行参数绑定
public interface UserInfoDao { List<UserInfoDO> getUserInfobyIdAndName1(@Param("id") int id, @Param("names") String[] names); }
<select id="getUserInfobyIdAndName1" resultType="com.zijikanwa.ssmspringboottest.model.UserInfoDO"> SELECT * FROM user_info WHERE user_info_id=#{id} and user_name in <foreach collection="names" item="name" index="index" open="(" close=")" separator=","> #{name} </foreach> </select>

法2:通过Map来传参数
public interface UserInfoDao { List<UserInfoDO> getUserInfobyIdAndName2(Map<String,Object> params); }
 
<select id="getUserInfobyIdAndName2" resultType="com.zijikanwa.ssmspringboottest.model.UserInfoDO"> SELECT * FROM user_info WHERE user_info_id=#{id} and user_name in <foreach collection="names" item="name" index="index" open="(" close=")" separator=","> #{name} </foreach> </select> 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM