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

    package com.abc.beans;
  2.  
  3. public class Country {
  4. private Integer cid;
  5. private String cname;
  6.  
  7. public Country() {
  8. super();
  9. // TODO Auto-generated constructor stub
  10. }
  11.  
  12. public Country(String cname) {
  13. super();
  14. this.cname = cname;
  15. }
  16.  
  17. public Integer getCid() {
  18. return cid;
  19. }
  20.  
  21. public void setCid(Integer cid) {
  22. this.cid = cid;
  23. }
  24.  
  25. public String getCname() {
  26. return cname;
  27. }
  28.  
  29. public void setCname(String cname) {
  30. this.cname = cname;
  31. }
  32.  
  33. @Override
  34. public String toString() {
  35. return "Country [cid=" + cid + ", cname=" + cname + "]";
  36. }
  37.  
  38. }
  1. package com.abc.beans;
  2.  
  3. public class Minister {
  4. private Integer mid;
  5. private String mname;
  6. // 关联属性
  7. private Country country;
  8.  
  9. public Minister() {
  10. super();
  11. // TODO Auto-generated constructor stub
  12. }
  13.  
  14. public Minister(String mname) {
  15. super();
  16. this.mname = mname;
  17. }
  18.  
  19. public Integer getMid() {
  20. return mid;
  21. }
  22.  
  23. public void setMid(Integer mid) {
  24. this.mid = mid;
  25. }
  26.  
  27. public String getMname() {
  28. return mname;
  29. }
  30.  
  31. public void setMname(String mname) {
  32. this.mname = mname;
  33. }
  34.  
  35. public Country getCountry() {
  36. return country;
  37. }
  38.  
  39. public void setCountry(Country country) {
  40. this.country = country;
  41. }
  42.  
  43. @Override
  44. public String toString() {
  45. return "Minister [mid=" + mid + ", mname=" + mname + ", country=" + country + "]";
  46. }
  47.  
  48. }
  1. <!-- 多表连接查询 -->
  2.  
  3. <!-- 定义结果映射关系 -->
  4. <resultMap type="Minister" id="ministerMap">
  5. <id column="mid" property="mid" />
  6. <result column="mname" property="mname" />
  7. <association property="country" javaType="Country">
  8. <id column="cid" property="cid" />
  9. <result column="cname" property="cname" />
  10. </association>
  11. </resultMap>
  12.  
  13. <select id="selectMinisterById" resultMap="ministerMap">
  14. select mid,mname,cid,cname
  15. from minister, country
  16. where countryId=cid and mid=#{xxx}
  17. </select>

多对一(2)

  1. package com.abc.beans;
  2.  
  3. public class Country {
  4. private Integer cid;
  5. private String cname;
  6.  
  7. public Country() {
  8. super();
  9. // TODO Auto-generated constructor stub
  10. }
  11.  
  12. public Country(String cname) {
  13. super();
  14. this.cname = cname;
  15. }
  16.  
  17. public Integer getCid() {
  18. return cid;
  19. }
  20.  
  21. public void setCid(Integer cid) {
  22. this.cid = cid;
  23. }
  24.  
  25. public String getCname() {
  26. return cname;
  27. }
  28.  
  29. public void setCname(String cname) {
  30. this.cname = cname;
  31. }
  32.  
  33. @Override
  34. public String toString() {
  35. return "Country [cid=" + cid + ", cname=" + cname + "]";
  36. }
  37.  
  38. }
  1. package com.abc.beans;
  2.  
  3. public class Minister {
  4. private Integer mid;
  5. private String mname;
  6. // 关联属性
  7. private Country country;
  8.  
  9. public Minister() {
  10. super();
  11. // TODO Auto-generated constructor stub
  12. }
  13.  
  14. public Minister(String mname) {
  15. super();
  16. this.mname = mname;
  17. }
  18.  
  19. public Integer getMid() {
  20. return mid;
  21. }
  22.  
  23. public void setMid(Integer mid) {
  24. this.mid = mid;
  25. }
  26.  
  27. public String getMname() {
  28. return mname;
  29. }
  30.  
  31. public void setMname(String mname) {
  32. this.mname = mname;
  33. }
  34.  
  35. public Country getCountry() {
  36. return country;
  37. }
  38.  
  39. public void setCountry(Country country) {
  40. this.country = country;
  41. }
  42.  
  43. @Override
  44. public String toString() {
  45. return "Minister [mid=" + mid + ", mname=" + mname + ", country=" + country + "]";
  46. }
  47.  
  48. }
  1. <!-- 多表单独查询 -->
  2.  
  3. <select id="selectCountryByMinister" resultType="Country">
  4. select cid,cname from country where cid=#{jjj}
  5. </select>
  6.  
  7. <!-- 定义结果映射关系 -->
  8. <resultMap type="Minister" id="ministerMap">
  9. <id column="mid" property="mid" />
  10. <result column="mname" property="mname" />
  11. <association property="country"
  12. javaType="Country"
  13. select="selectCountryByMinister"
  14. column="countryId"/>
  15. </resultMap>
  16.  
  17. <select id="selectMinisterById" resultMap="ministerMap">
  18. select mid,mname,countryId from minister where mid=#{xxx}
  19. </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"
    2.  
    3. open="(" separator="," close=")">
    4.  
    5. #{item}
    6.  
    7. </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
    2.  
    3. <select id="findByIds" resultMap="User">
    4.  
    5. Select
    6.  
    7. id ,name
    8.  
    9. from t_a where id in
    10.  
    11. <foreach item="item" index="index" collection="list"
    12.  
    13. open="(" separator="," close=")">
    14.  
    15. #{item}
    16.  
    17. </foreach>
    18.  
    19. </select>
  1.  

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

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

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

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

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

mybatis关系表的更多相关文章

  1. MyBatis 关系映射XML配置

    关系映射 在我看来这些实体类就没啥太大关联关系,不就是一个sql语句解决的问题,直接多表查询就完事,程序将它设置关联就好 xml里面配置也是配置了sql语句,下面给出几个关系的小毛驴(xml) 一对多 ...

  2. MyBatis 多表查询

    1.多表设计 多表查询 a.多表设计 (1)一对一 在任意一方设计外键保存另一张表的主键,维系表和表的关系 (2)一对多 在多的一方设计外键保存一的一方的主键,维系表和表的关系 (3)多对多 设计一张 ...

  3. Mybatis多表操作

    一:引言 在学习完前面的mybatis基本语法后,大家都有个认知,这个Mybatis太强大了,比之前使用JDBC写方便多了,但是你们当初在使用原生JDBC写SQL查询的时候有没有遇到过多表查询呢?肯定 ...

  4. 【MyBatis】MyBatis 多表操作

    MyBatis 多表操作 文章源码 一对一查询 需求:查询所有账户信息,关联查询下单用户信息. 注意:因为一个账户信息只能供某个用户使用,所以从查询账户信息出发关联查询用户信息为一对一查询.如果从用户 ...

  5. 三、mybatis多表关联查询和分布查询

    前言 mybatis多表关联查询和懒查询,这篇文章通过一对一和一对多的实例来展示多表查询.不过需要掌握数据输出的这方面的知识.之前整理过了mybatis入门案例和mybatis数据输出,多表查询是在前 ...

  6. mysql 关系表 分组读取的方法

    关系表 是一个一对多的表 我们用的时候往往希望得到 array( a=>array(1,2,3,4....), b=>array(3,4,5,6,7...) ) 这样的数组 所以我们可以使 ...

  7. EF架构~关系表插入应该写在事务里,但不应该是分布式事务

    回到目录 这个标题很有意思,关系表插入,就是说主表和外表键在插入时,可能会有同步插的情况,如在建立主表时,扩展表需要同步完成数据的初始化工作,而对于多表插入时,我们为了保证数据的一致性会针它写在事务中 ...

  8. EF架构~关于多对多关系表无法更新与插入的问题

    回到目录 在EF里,我们设计模型时,会设计到多对多关系,在EF里会把这种关系会转成两个一对多的关系表,这是比较友好的,因为多对多来说,对于业务本身没什么意思,所以隐藏了,没什么坏处,但对于这个隐藏来说 ...

  9. 基于.net mvc的校友录(七、文件上传以及多对多关系表的LINQ查询实现)

    图片的上传与调用 图片的上传就是文件的上传,在前台使用的是type="file"的input,但是,要将表单声明为multipart/form-data模式,方法是在BeginFo ...

随机推荐

  1. Java小题,通过JNI调用本地C++共享库中的对应方法实现杨辉三角的绘制

    1.在Eclipse中配置Javah,配置如下 位置是你javah.exe在你电脑磁盘上的路径 位置:C:\Program Files\Java\jdk1.8.0_112\bin\javah.exe ...

  2. 旅游景点 Tourist Attractions 题解

    题面在这里 再次破了纪录,连做了3天... 让我们从头来一点一点分析 1.预处理 先看题面,乍一看貌似是个图论题,有n个点m条边,给定一些必须经过的点和强制经过顺序,求一条最短路 我们发现n和m都比较 ...

  3. WPF 中的DataTemplate 的嵌套

    <Window x:Class="WPF.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xa ...

  4. WPF Tree多级绑定

    <Window x:Class="TreeTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/20 ...

  5. 模拟文件上传(三):使用apache fileupload组件进行文件批量上传

    其中涉及到的jar包 jsp显示层: <%@ page language="java" import="java.util.*" pageEncoding ...

  6. 转:JAVA 参数传递

    转自:http://blog.sina.com.cn/s/blog_5dd380b90100bvel.html 网络上有太多关于JAVA参数传递是传值还是传引用的讨论,其实大多是概念不清,混淆视听.从 ...

  7. java 查询当天0点0分0秒

    由于业务需求,要计算客户今日收益,本周本月,本年等收益, 1.查询当天0点0分0秒 2.查询本月一号0点0分0秒 ...... Calendar calendar = Calendar.getInst ...

  8. 每天迁移MySQL历史数据到历史库Python脚本

    #!/usr/bin/env python # coding:utf-8 #__author__ = 'Logan'      import MySQLdb import sys import dat ...

  9. Photoshop 批量修改图像大小

  10. PyPDF2.py 合并pdf时报错问题

    报错如下: Traceback (most recent call last): File "./pdf_merge.py", line 68, in <module> ...