http://www.mybatis.org/mybatis-3/zh/dynamic-sql.html
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。
foreach元素的属性主要有 item,index,collection,open,separator,close。
item表示集合中每一个元素进行迭代时的别名,
index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,
open表示该语句以什么开始,
separator表示在每次进行迭代之间以什么符号作为分隔符,
close表示以什么结束。
foreach使用collection属性有三种情况:
1. 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
2. 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
3. 如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,会把它封装成一个Map的,
map的key就是参数名
,所以这个时候collection属性值
就是传入的List或array对象
在自己封装的map里面的key 。
//可变数组
public List<Userinfos> getUserArray(Integer...rids);
//list
public List<Userinfos> getUserArrayList(List<Integer> rids);
//Map
public List<Userinfos> getUserArrayMap(Map<String,Object> rids);
1.单参数
array数组的类型
<!--array-->
<select id="getUserArray" resultType="Userinfos">
select * from userinfos where userRole in
<foreach collection="array" item="rids" open="(" separator="," close=")">
#{rids}
</foreach>
</select>
2.单参数
List的类型
<!--list-->
<select id="getUserArrayList" resultType="Userinfos">
select * from userinfos where userRole in
<foreach collection="list" item="rids" open="(" separator="," close=")">
#{rids}
</foreach>
</select>
3.自己把参数封装成Map的类型
<!--collection的值为ids,是传入的参数Map的key
map.put("inss",inss);
<select id="getUserArrayMap" resultType="Userinfos">
select * from userinfos where userRole in
<foreach collection="inss" item="rids" open="(" separator="," close=")">
#{rids}
</foreach>
</select>
private static void all3() {
SqlSession session = MyBatisUtil.createSession();
//获得mapper接口
UsersMapper mapper = session.getMapper(UsersMapper.class);
//调用方法
List<Userinfos> list = null;
try {
//array
// list = mapper.getUserArray(1,2);
//list
// List<Integer> ins =Arrays.asList(1,3);
// list = mapper.getUserArrayList(ins);
//map
Map<String,Object> map =new HashMap<>();
//注意是个集合哦!
List<Integer> inss = Arrays.asList(1,2);
//map中存放的Value是集合
map.put("inss",inss);
list = mapper.getUserArrayMap(map);
for (Userinfos user : list
System.out.println(user);
MyBatisUtil.closeSession(session);
} catch (Exception e) {
e.printStackTrace();
http://www.mybatis.org/mybatis-3/zh/dynamic-sql.htmlforeach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。foreach元素的属性主要有 item,index,collection,open,separator,close。 item表示集合中每一个元素进行迭代时的别名, index指定一个名字...
首先定位问题,通过查找日志找到这部分内容
### Error querying database. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near 'IN'.
### The error may exist in com/qiyuesuo/org/role/relation/RoleRelationDao.xml
### T
Author:kak
MySql的动态语句foreach,当传入参数为数组或者集合时需要通过foreach标签进行遍历,其主要是在in条件中,可以在SQL语句中迭代一个集合;
<foreach collection="dto.orderStatusList" item="item" index="index" open="("
传入集合
使用场景
在实际开发过程中,我们往往需要编写复杂的SQL语句,拼接稍有不注意就会导致错误,Mybatis给开发者提供了动态SQL,大大降低了拼接SQL导致的错误。
动态标签
if标签通常用那个胡where语句,update语句,insert语句中,通过判断参数值来决定是否使用某个查询条件,判断是否更新某一个字段或插入某个字段
mybatis使用foreach遍历空list空指针,笨法子解决
今天在使用foreach遍历list时,因为需要在list中追加数据,先是实例化一个arrayList(),然后在while循环里查找数据,向arrayList()中插入数据,当查到10条数据后,退出循环。大概是下面这样
List<Map<String, Object>> result = new Array...
MyBatis动态SQL的
foreach标签用于对
集合进行遍历,常见的
使用场景是构建IN条件语句。通过将要
遍历的
集合传入collection属性,可以在
foreach标签内部
使用item和index来引用
集合中的元素和索引。可以
使用open、separator和close属性来指定循环体的开头、分隔符和结尾。其中,open属性用于指定循环体的开头,separator属性用于指定循环体中元素之间的分隔符,close属性用于指定循环体的结尾。在循环体内部,可以
使用#{item}来引用
集合中的元素。
举个例子,如果我们有
一个名为list的
集合,我们可以
使用foreach标签来构建
一个IN条件的
SQL语句:
SELECT * FROM table_name WHERE column_name IN
<
foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
</
foreach>
这样,
MyBatis会自动将
集合中的元素逐个替换到
SQL语句中,生成相应的查询语句。
Spring Boot运行发生异常:Factory method 'dataSource' threw exception; nested exception is org.springframe
51525
Spring+Mybatis 查询所有数据时发生异常:org.apache.ibatis.reflection.ReflectionException: There is no getter for
36064
Python 运行selenium发生异常: session not created: This version of ChromeDriver only supports Chrome versio
王权霸业s:
Java 华为真题-选修课
imyiligege: