动态sql之List<Map<String, String>>传参
时间: 2023-07-09 16:21:27 浏览: 58
如果您想在动态 SQL 中使用 List<Map<String, String>> 作为参数,可以使用 MyBatis 提供的 foreach 元素。
例如,如果您有一个List<Map<String, String>>类型的参数,可以使用以下代码:
```xml
<select id="queryUserByIds" resultType="User">
SELECT * FROM user WHERE id IN
<foreach collection="userList" item="user" open="(" separator="," close=")">
#{user.id}
</foreach>
</select>
```
在这个例子中,foreach 元素用于循环遍历 List<Map<String, String>> 参数,并生成一个 IN 子句,最终 SQL 语句会是这样的:
```sql
SELECT * FROM user WHERE id IN (1,2,3)
```
其中,1、2、3是List<Map<String, String>>中每个Map中id的值。
您可以根据实际需要调整 foreach 元素的属性,例如 collection、item、open、separator 和 close 等。
相关问题
<foreach>传参list<string>
在使用<foreach>标签传递List<String>参数时,可以使用以下两种方式。
第一种方式是在Mapper接口的方法参数前面添加@Param注解,并将List<String>参数命名为list。例如:
引用\[1\]中的示例代码:
```java
public List<Map<String, Object>> dynamicForeachTest(@Param("list") List<String> ids);
```
引用\[1\]中的示例代码:
```xml
<select id="dynamicForeachTest" resultType="java.util.Map">
select * from t_blog where id in
<foreach collection="list" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
```
第二种方式是直接将List<String>参数命名为ids,不需要添加@Param注解。例如:
引用\[2\]中的示例代码:
```java
public List<Map<String, Object>> dynamicForeach3Test(List<String> ids, @Param("contractId") String contractId);
```
引用\[2\]中的示例代码:
```xml
<select id="dynamicForeach3Test" resultType="java.util.Map">
select * from xxx where cid=#{contractId} and fID in
<foreach collection="ids" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
```
无论使用哪种方式,都可以通过<foreach>标签遍历List<String>参数中的每个元素,并将其作为SQL语句的参数进行查询。
#### 引用[.reference_title]
- *1* *2* *3* [MyBatis中in <foreach>的使用](https://blog.csdn.net/xujunkai66/article/details/81413818)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
List<Map<String,String>
List<Map<String, String>>是一个存储多个键值对的集合类型。当使用这个集合类型时,可以通过两个for循环来解析集合中的数据。第一个for循环用于获取列表中的每个Map对象,第二个for循环用于解析每个Map中的数据。通过m.keySet()可以获取查询出来的字段,然后使用get(key)方法获取对应的值对象,将值对象转换为字符串后即可显示出来。
示例代码如下:
```
for (Map<String, String> m : list) {
for (String k : m.keySet()) {
Object ob = m.get(k);
System.out.println(k + " : " + ob.toString());
}
}
```
在使用springjdbc、hibernate等框架进行SQL查询时,通常会得到一个List<Map<String, Object>>类型的结果集。如果需要将结果集转化为JavaBean对象,则需要使用一系列的map.get()和obj.set()操作。
通过学习Map的使用,我们可以方便地存储键值对。在以后的学习中,我们会进一步总结和应用Map。希望大家会喜欢。