Mybatis的Mapper方法中传递map参数的写法

本文介绍了在Mybatis中实现分页查询并返回Map对象集合的三种方法:使用单个参数、使用带有@Param注解的Map对象以及使用不带@Param注解的Map对象。

Mybatis的Mapper方法中传递map参数的写法

当我们在进行数据分页查询时,如果想让Mybatis的分页查询返回Map对象的集合,我们需要在查询的方法上使用单个参数或者使用Map对象作为参数进行传递。

第一种方式:使用单个参数。

@Select({
    "select aab001,aab002 from ab01 where aad101 = #{aad101}",
    " order by aad101 desc"
})
public List<Map<String,Object>> selectPageList(Page<Map<String,Object>> page, @Param("aad101) String aad101);

第二种方式:使用Map对象。

@Select({
    "select aab001,aac002 from ab01 where aad101 = #{params.aad101}",
    " order by aad101 desc"
})
public List<Map<String,Object>> selectPageList(Page<Map<String,Object>> page, @Param("params") Map<String,Object> params);

第三种方式:使用Map对象但不加@Param注释

@Select({
    "select aab001,aac002 from ab01 where aad101 = #{aad101}",
    " order by aad101 desc"
})
public List<Map<String,Object>> selectPageList(Page<Map<String,Object>> page, Map<String,Object> params);

注意,此时返回的集合只能用Map对象接受,否则会报类型转换错误的哦!

MyBatis 中,如果需要编写支持多字段 `IN` 查询的 SQL 语句,可以通过 `<foreach>` 标签动态生成包含多个字段组合的 `IN` 子句。这种写法适用于传入一个包含多个对象的集合,每个对象包含多个字段,这些字段共同作为 `IN` 查询的条件。 以下是一个完整的示例: ```xml <select id="getResult" resultType="java.util.HashMap"> SELECT * FROM demo t WHERE (t.id, t.name) IN <foreach collection="list" item="item" open="(" close=")" separator=","> (#{item.id}, #{item.name}) </foreach> </select> ``` 在这个示例中: - `collection="list"` 表示传入的参数是一个名为 `list` 的集合。 - `item="item"` 表示集合中的每个元素是一个对象,命名为 `item`。 - `open="("` 和 `close=")"` 表示每次迭代生成的元素将被包裹在括号中。 - `separator=","` 表示每次迭代生成的元素之间用逗号分隔。 - `(#{item.id}, #{item.name})` 表示每个元素由两个字段组成,分别是 `id` 和 `name`。 此外,如果查询涉及更复杂的场景,例如关联查询或嵌套查询,可以结合 `<resultMap>` 和 `<collection>` 标签来处理多字段匹配的嵌套查询逻辑。例如: ```xml <resultMap id="WflowLogTableEntityDtoMap" type="com.xxx.dto.WflowLogTableEntityDto"> <id column="exec_id" property="execId"/> <id column="wflow_id" property="wflowId"/> <collection property="nodes" ofType="com.xxx.dto.WflowLogdetailTableEntityDto" javaType="ArrayList" column="{wflowId=wflow_id, execId=exec_id}" select="com.xxx.mapper.IWflowLogdetailTableMapper.getWflowNodeLogDetail"/> </resultMap> ``` 在这个例子中,`<collection>` 标签用于定义子查询,其中 `column` 属性使用了多个字段的映射关系,以支持多字段关联查询[^4]。 ### 注意事项 - 传入的参数类型应为 `List` 或 `Map`,并且字段名称需要与 `#{item.xxx}` 中的 `xxx` 保持一致。 - 如果查询结果集需要保持特定顺序,可能需要额外处理,因为 `IN` 查询返回的结果集通常是无序的[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值