文档章节

mybatis 的 In 查询,子查询 ,集合查询foreach 使用

之渊
 之渊
发布于 2016/07/22 18:04
字数 442
阅读 1237
收藏 0

在Mybatis的xml配置中使用集合,主要是用到了foreach动态语句。

foreach的参数:
foreach元素的属性主要有 item,index,collection,open,separator,close。
item表示集合中每一个元素进行迭代时的别名.
index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置.
open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔 符.
close表示以什么结束。

1. Mybatis生成select * from table where id in(1,2,...,n)语句的查询

我们一般的做法是在方法的参数处指定传入的参数名称,在xml中使用的时候,集合的名称要和方法的Param的名称一致,这样便于阅读和理解,然后是在对应的xml文件中使用foreach循环。

java代码如下:

public abstract List<Model> findByIds(@Param("ids")List<Integer> ids);

对应的xml代码如下:

select * from table
<where>
    id in <foreach collection="ids" item="item" index="index" 
open="(" separator="," close=")">#{item}</foreach>
</where>

2.Mybatis保存多条记录

我们同样是通过foreach的方法来实现,这里我们巧妙的利用了sql的语法规则用Mybatis的foreach动态语句来处理。

java代码:

public abstract void saves(@Param("tables")List<Model> tables);

xml代码:

insert into table(name,addtime) values
<foreach collection="tables" item="item" index="index" separator=",">  
    (#{item.name},#{item.addtime})
</foreach>

以上方法Mybatis会帮我们进行sql注入拦截,Mybatis如果采用#{xxx}的形式设置参数,Mybatis会进行sql注入的过滤。如果采用的是${xxx},Mybatis不会进行sql注入过滤,而是直接将参入的内容输出为sql语句。

判断集合是否有值

<if test="list!=null and list.size()>0"></if>

本文转载自:http://www.suyunyou.com/aid5.html

之渊
粉丝 14
博文 649
码字总数 200420
作品 0
佛山
程序员
私信 提问
Mybatis配置文件详解(4)

本次主要来了解: MyBatis数据库配置文件SqlMapConfig.xml SQL映射配置中输入映射的配置 SQL映射配置中输出映射的配置 SQL映射配置中动态SQL语句的配置 1. SqlMapConfig配置文件详解 主要来配...

LeaveStyle
2018/08/30
0
0
源码分析 Mybatis 的 foreach 为什么会出现性能问题

背景 最近在做一个类似于综合报表之类的东西,需要查询所有的记录(数据库记录有限制),大概有1W条记录,该报表需要三个表的数据,也就是根据这 1W 个 ID 去执行查询三次数据库,其中,有一...

TSMYK
2018/12/16
2K
13
Mybatyis foreache 中的BUG

标签在Mybatis的xml配置中使用集合,主要是用到了foreach动态语句。 foreach的参数: foreach元素的属性主要有 item,index,collection,open,separator,close。 item表示集合中每一个元素...

ahpome
2018/10/26
106
0
MyBatis动态SQL(认真看看, 以后写SQL就爽多了)

作者:阿进的写字台 cnblogs.com/homejim/p/9909657.html 0 一起来学习 mybatis PRIMARY KEY ()) ENGINE=InnoDB AUTOINCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb40900aici COMMENT=......

程序员小灰
02/21
0
0
mybatis递归,一对多代码示例

今天需要做一个功能,根据专业,有不同的章节,章节下面有对应的习题, 由于只有这么两级,可以不用使用递归,直接查询父集,之后foreach查询子集放入对应的list集合。 虽然实现了,感觉毕竟...

陈灬大灬海
2018/08/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

debian10使用putty配置交换机console口

前言:Linux的推广普及,需要配合解决实际应用方能有成效! 最近强迫自己用linux进行实际工作,过程很痛苦,还好通过网络一一解决,感谢各位无私网友博客的帮助! 系统:debian10 桌面:xfc...

W_Lu
33分钟前
10
0
aelf Enterprise 0.8.0 beta有奖公测,“Bug奖金计划”重磅开启

2019年9月30日,aelf Enterprise 0.8.0 beta版正式发布。aelf Enterprise 0.8.0 beta是一个完备的区块链系统, 包含完备的区块链系统、开发套件、开发文档、以及配套的基础应用和基础服务。 ...

AELF开发者社区
34分钟前
8
0
oracle 初始化数据库脚本

create user lpf identified by 123456; create tablespace lpf_ts_cms datafile '/opt/app/oracle/product/11.2.0/lpf.dbf' size 200M; alter user lpf default tablespace lpf_ts_cms; sel......

internetafei
39分钟前
6
0
《区块链DAPP开发入门、代码实现、场景应用》笔记1——天外飞仙DAPP

Solidity编程语言解决了编写智能合约的不友好的问题,但是当合约编译并部署之后,对与这些接口的访问,对于一般的使用者来说,门槛有点高, 对普通用户来说也是非常不友好,为了使广大用户理...

柯南和由美
43分钟前
6
0
流程图制作软件推荐_流程图制作软件哪个好

流程图(Flow Chart)是一种表示算法思路的图示,通过特定图形、图表可以直观的说明某一过程。这种过程既可以是生产线上的工艺流程图,也可以标明某项任务必需的管理过程。为了便于识别,绘制...

工具分享
46分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部