Mybatis中foreach的用法简介

原创 2018年04月15日 21:27:39

Mybatis是Apache公司产品.使用起来非常的方便.好,废话不多说直接进入正文

<!-- 传入多个id,查询多个用户 -->
<select id="findMulUserByIds" parameterType="com.jin.viewObject.VOUser" resultType="user">
<!-- sql语句是select * from user where id in (param1,param2,param3,,,) -->
select * from user
<where>
<foreach collection="ids" item="id" open="id in(" separator="," close=")">
#{id}
</foreach>
</where>

</select>

大家先来看看这个配置.首先id属性是<select>查询标签的唯一标识符.parameterType是一个VO.也就是一个view层的bean对象.

他的代码是这样的

public class VOUser implements Serializable {    //实现Serializable的原因是为了反序列化,此处用不到.
/**

*/
private static final long serialVersionUID = 7137345595072626969L;        //这一行加不加都行.

private List<Integer> ids;                //这是定义一个List集合.当有一个需求,要传入多个用户id,查询出多个用户对象时,要用到.如果此处不理解,请耐心往下看,(兄弟,请静下心来,急躁是解决不了问题的)


//提供setter和getter方法,

/*

此处多说一点,当你使用eclipse和MyEclipse这样的IDE(IDE:Integrated Development Environment,翻译为集成开发环境)开发工具时,当你定义一个变量.比如: private Integer id;    你要快速创建该属性的setter和getter方法时,可以按快捷键 Alt+shift+s+r.

*/

public List<Integer> getIds() {
return ids;
}
public void setIds(List<Integer> ids) {
this.ids = ids;
}

}

自己写一个测试方法


SqlSessionFactoryUtil是自己封装的一个工具类,为了获取Mybatis的session会话方便,是这样定义的

public class SqlSessionFactoryUtil {

private static SqlSessionFactory sessionFactory;

private SqlSessionFactoryUtil(){}
static{
String resource = "SqlMapConfig.xml";
try {
InputStream inputStream = Resources.getResourceAsStream(resource);
sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

} catch (IOException e) {
e.printStackTrace();
}

}
public static SqlSession getSession(){
return sessionFactory.openSession();

}

}


自己定义测试方法.

@Test
public void testFindUsersByIds(){
SqlSession session = SqlSessionFactoryUtil.getSession();
try{
/*
* 利用Mybatis的Mapper动态代理获取接口的实例类


*/
UserDao userDao = session.getMapper(UserDao.class);
List<Integer> ids = new ArrayList<>();
ids.add(1);
ids.add(8);
ids.add(9);
ids.add(26);


VOUser voUser = new VOUser();
voUser.setIds(ids);

List<User> users = userDao.findMulUserByIds(voUser);

System.out.println(users.size());
if(!users.isEmpty()){
for(User u : users){
System.out.println(u);
}
}
}finally{
session.close(); //关闭打开的session
}

}

下面再来看UserDao.xml(配置文件)


<!-- 传入多个id,查询多个用户 -->
<select id="findMulUserByIds" parameterType="com.jin.viewObject.VOUser" resultType="user">
<!-- sql语句是select * from user where id in (param1,param2,param3,,,) -->
select * from user
<where>
<foreach collection="ids" item="id" open="id in(" separator="," close=")">
#{id}
</foreach>
</where>

</select>

这里是foreach的用法:首先有一个<select>查询,id特性,是唯一标识符.parameterType是参数类型的总称,这里用到的是引用类型.resultType是返回值类型.

下面是一个select 查询语句,

然后是拼接where查询语句.

下面是foreach标签.这个时候,foreach标签的collection属性值要和parameterType参数类型VOUser的字段ids一致,也就是说collection属性值为VOUser的字段ids.刚好ids变量类型为List,是collection集合.

item:是每次循环遍历出来的集合的元素,也就是List集合的每个元素值,

open是拼接字符串的前端部分,比如:sql语句 select * from customer where id in (1,8,9,5);这个是open的值就为 id in (

注意,包括后面那个左括号

separator:是运算符,在这个例子中就是逗号.

close:是结尾的字符串.在本例中相当于右括号



测试mybatis里foreach用法

1.介绍 链接:http://www.mybatis.org/mybatis-3/zh/dynamic-sql.html foreach 动态 SQL 的另外一个常用的必要操作是需要对一个集合进行...
  • qq_39162733
  • qq_39162733
  • 2017-11-29 14:23:37
  • 136

mybatis中foreach用法

and username like '%${userCustom.username}%' and sex = #{userCustom.sex} ...
  • sdzhangshulong
  • sdzhangshulong
  • 2016-06-27 13:29:06
  • 1415

mybatis中的foreach的使用

foreach一共有三种类型,分别为List,[](array),Map三种。 foreach属性 属性 描述 item 循环体中的具体对象。...
  • yinbucheng
  • yinbucheng
  • 2017-08-02 10:58:59
  • 821

【Mybatis】——foreach使用方式

最近参加了一个SSM的项目,在项目中经常需要循环遍历集合,而mybatis也能很好的支持数组和List,Set接口的集合,对此提供遍历集合。本文主要是对foreach元素使用的详细说明,希望能对大家有...
  • jiadajing267
  • jiadajing267
  • 2017-09-03 20:28:19
  • 691

MyBatis动态SQL之foreach用法

首先简单说下foreach六个属性 item  每一次迭代结果     collection  循环集合成指定类型    separator 元素之间的分隔符,可选 open 开始符号,可选   ...
  • xujiangdong1992
  • xujiangdong1992
  • 2017-06-05 11:05:00
  • 362

MyBatis:SQL语句中的foreach的详细介绍

MyBatis:SQL语句中的foreach的详细介绍
  • WUUUSHAO
  • WUUUSHAO
  • 2016-11-04 19:52:55
  • 9673

Mybatis最入门---动态查询(foreach)

[一步是咫尺,一步即天涯] 本文,我们来介绍使用Mybatis提供的标签实现我们某些循环增改删差的需求。官方文档中的内容过于简陋,于是,博主筛选出比较全面讲述foreach用法的的内容,并且配有例子。...
  • ABCD898989
  • ABCD898989
  • 2016-04-23 22:08:34
  • 15040

MyBatis中foreach元素用法解析

动态SQL,MyBatis中foreach元素的使用详解
  • qq_25827845
  • qq_25827845
  • 2017-04-29 12:24:25
  • 1426

Mybatis的foreach标签详解

MyBatis的foreach语句详解1人收藏此文章, 我要收藏 发表于3个月前 , 已有113次阅读 共0个评论foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。fore...
  • u013036792
  • u013036792
  • 2015-09-06 16:57:33
  • 952

mybatis_mybatis 中 foreach collection的三种用法

mybatis_mybatis 中 foreach collection的三种用法 mybatis动态查询 foreach标签的解释 与常用之处 历遍数组,...
  • icecoola_
  • icecoola_
  • 2017-09-20 02:40:37
  • 281
收藏助手
不良信息举报
您举报文章:Mybatis中foreach的用法简介
举报原因:
原因补充:

(最多只允许输入30个字)