<select id="selectSingleQuestion" resultType="remarkPaper">
        select
FrontTitle as fontTitle,BackTitle as backTitle, Answer as answer
from fillblankproblem
where ID
<foreach item="item" index="index" collection="list" open= " in (" separator="," close=")">
#{item.titleId}
</foreach>
</select>
多对一

package com.abc.beans; public class Country {
private Integer cid;
private String cname; public Country() {
super();
// TODO Auto-generated constructor stub
} public Country(String cname) {
super();
this.cname = cname;
} public Integer getCid() {
return cid;
} public void setCid(Integer cid) {
this.cid = cid;
} public String getCname() {
return cname;
} public void setCname(String cname) {
this.cname = cname;
} @Override
public String toString() {
return "Country [cid=" + cid + ", cname=" + cname + "]";
} }
package com.abc.beans;

public class Minister {
private Integer mid;
private String mname;
// 关联属性
private Country country; public Minister() {
super();
// TODO Auto-generated constructor stub
} public Minister(String mname) {
super();
this.mname = mname;
} public Integer getMid() {
return mid;
} public void setMid(Integer mid) {
this.mid = mid;
} public String getMname() {
return mname;
} public void setMname(String mname) {
this.mname = mname;
} public Country getCountry() {
return country;
} public void setCountry(Country country) {
this.country = country;
} @Override
public String toString() {
return "Minister [mid=" + mid + ", mname=" + mname + ", country=" + country + "]";
} }
<!-- 多表连接查询 -->

    <!-- 定义结果映射关系 -->
<resultMap type="Minister" id="ministerMap">
<id column="mid" property="mid" />
<result column="mname" property="mname" />
<association property="country" javaType="Country">
<id column="cid" property="cid" />
<result column="cname" property="cname" />
</association>
</resultMap> <select id="selectMinisterById" resultMap="ministerMap">
select mid,mname,cid,cname
from minister, country
where countryId=cid and mid=#{xxx}
</select>

多对一(2)

package com.abc.beans;

public class Country {
private Integer cid;
private String cname; public Country() {
super();
// TODO Auto-generated constructor stub
} public Country(String cname) {
super();
this.cname = cname;
} public Integer getCid() {
return cid;
} public void setCid(Integer cid) {
this.cid = cid;
} public String getCname() {
return cname;
} public void setCname(String cname) {
this.cname = cname;
} @Override
public String toString() {
return "Country [cid=" + cid + ", cname=" + cname + "]";
} }
package com.abc.beans;

public class Minister {
private Integer mid;
private String mname;
// 关联属性
private Country country; public Minister() {
super();
// TODO Auto-generated constructor stub
} public Minister(String mname) {
super();
this.mname = mname;
} public Integer getMid() {
return mid;
} public void setMid(Integer mid) {
this.mid = mid;
} public String getMname() {
return mname;
} public void setMname(String mname) {
this.mname = mname;
} public Country getCountry() {
return country;
} public void setCountry(Country country) {
this.country = country;
} @Override
public String toString() {
return "Minister [mid=" + mid + ", mname=" + mname + ", country=" + country + "]";
} }
    <!-- 多表单独查询 -->

    <select id="selectCountryByMinister" resultType="Country">
select cid,cname from country where cid=#{jjj}
</select> <!-- 定义结果映射关系 -->
<resultMap type="Minister" id="ministerMap">
<id column="mid" property="mid" />
<result column="mname" property="mname" />
<association property="country"
javaType="Country"
select="selectCountryByMinister"
column="countryId"/>
</resultMap> <select id="selectMinisterById" resultMap="ministerMap">
select mid,mname,countryId from minister where mid=#{xxx}
</select>

使用mybatis进行foreach遍历

2017年03月14日 00:26:09 IT成长之路. 阅读数:5604
 
 版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/weixin_37173488/article/details/61956875

在SQL开发过程中,我们会经常使用到in进行搜索,Mybatis中提供了foreach功能,它允许你指定一个集合,然后对集合中的数据进行迭代赋值,如何使用这一功能,很简单,主要是细节要注意。我们先看下foreach的语法

  1. <foreach item="item" index="index" collection="list"
    
    open="(" separator="," close=")">
    
    #{item}
    
    </foreach>

foreach元素的属性包含 item,index,collection,open,separator,close。
    item表示集合中每一个元素进行迭代时的别名,非限定词
    index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,
    open表示该语句以什么开始,这边使用"(",则会在sql进行拼接加上"(", 如where id in (
    separator表示在每次进行迭代之间以什么符号作为分隔 符,如如where id in ( 1,
    close表示以什么结束,这边使用"(",则会在list遍历后进行拼接加上")",如where id in (1,2)

collection表示要遍历的集合

针对collection参数,我们需要考虑入参,而不能随便写,如果如参数List<String>则这样设定

  1. 如果参数的类型是List集合, 则在使用时,collection属性要必须指定为 list
    
    <select id="findByIds" resultMap="User">
    
    Select
    
    id ,name
    
    from t_a where id in
    
    <foreach item="item" index="index" collection="list"
    
    open="(" separator="," close=")">
    
    #{item}
    
    </foreach>
    
    </select>
  2.  

以上的查询,最终会转换成这样的sql,

select id ,name  from t_a where id in (1,2)

但是实际开发中,我们不能局限于list集合,也有可能是数组,数组的方式只要做一下修改即可

<foreach item="item" index="index" collection="array" ....

in最好写在open里面,写在外面有些时候有问题。

最新文章

  1. thinkphp在模型中自动完成session赋值
  2. Hibernate5.2之QBC查询
  3. Windows下 maven3.3.1的安装步骤+maven配置本地仓库
  4. Atitit.阿里云c盘 系统盘爆满解决方案
  5. json 解析
  6. webview--网络超时
  7. mysql数据库同步
  8. Ubuntu离线安装VSCode(附带前期准备工作)
  9. CentOS 7部署ASP.NET Core应用程序
  10. 线段树(单标记+离散化+扫描线+双标记)+zkw线段树+权值线段树+主席树及一些例题
  11. Visual Studio编译时报错“函数名:重定义;不同的基类型”
  12. appium操作微信公众号H5 web页面
  13. 算法 - 最小m段和问题
  14. 学生信息管理系统(C语言版本)
  15. Node.js nvshens图片批量下载爬虫1.01
  16. JavaScript常见的内存泄漏原因
  17. Android ADB工具-操作手机和获取手设备信息(四)
  18. 省选九省联考T2 IIIDX(线段树)
  19. @b.windows.last.use
  20. 123apps-免费网络应用

热门文章

  1. NOIP 模拟 $27\; \rm 牛半仙的妹子图$
  2. 【AI】TorchVision_DataLoad
  3. .NET Core 微服务学习与实践系列文章目录索引(2019版)
  4. Acwing 883高斯消元法的运用
  5. tcmalloc jemalloc glibc内存分配管理模块性能测试对比
  6. [bug]spring项目通过反射测试私有方法时,注入对象异常
  7. JSTL标签报错-http://java.sun.com/jsp/jstl/core
  8. WHY IS A BYTE 8 BITS? OR IS IT?
  9. Selenium系列(十九) - Web UI 自动化基础实战(6)
  10. HCNP Routing&amp;Switching之IS-IS报文结构和类型