当前位置: 首页 > news >正文

mybatis传递多个不同类型的参数到mapper xml文件

在业务中查询某张表时需要设置多个查询条件,并且还要根据id列表进行权限过滤,这时推荐采用Map<String, Object>作为参数进行查询,因为:Object可以设置成不同的类型,比如:List<Integer> ids, Map<String, Object>

我们看一个例子:

<select id="getByParam" resultMap="CrowdManageResult" parameterType="java.util.Map">select <include refid="Base_Column_List"/>from t_crowd_manage where 1=1<if test="crowd.name != null">and name like concat('%',#{crowd.name, jdbcType=VARCHAR},'%')</if><if test="crowd.type != null">and type = #{crowd.type, jdbcType=INTEGER}</if><if test="crowd.status != null">and status = #{crowd.status, jdbcType=INTEGER}</if><if test="crowd.noStatus != null">and status != #{crowd.noStatus, jdbcType=INTEGER}</if><if test="ids != null and ids.size() > 0">and id in<foreach item="id" collection="ids" open="(" separator="," close=")">#{id, jdbcType=BIGINT}</foreach></if>order by update_time desc
</select>

service层查询代码:

Map<String, Object> param = new HashMap<>(2);
Map<String, Object> crowdEntity = new HashMap<>(); // xml if 判断不会报错
crowdEntity.put("name", "test");
crowdEntity.put("type", 1);
crowdEntity.put("noStatus", -1);Set<Integer> idList = //....param.put("crowd", crowdEntity);
param.put("ids", idList);

注意:这个sql条件查询条件主要设计两个部分:

  1. 一般的查询条件,这里可以使用Bean对象,也可以使用map。推荐使用后者,因为在sql的条件中有一个noStatus字段判断,通常Bean定义的时候只有status字段(没有noStatus),如果这里使用定义Bean来当查询参数,在xml中<if test="crowd.noStatus != null"> 这句会报错。原因是mybatis的xml采用ONGI查询来解析,所以如果Bean中没有定义这个字段,就会报错
  2. in条件查询,这里使用的是foreach

相关文章:

  • 本地大模型编程实战(28)查询图数据库NEO4J(1)
  • 苍穹外卖心得体会
  • 笔试专题(十二)
  • 【动态导通电阻】 GaN PiN二极管电导调制对动态 RON 的影响
  • PDF编辑器:Foxit PDF Editor Pro 版功能解析
  • Ubuntu如何查看硬盘的使用情况,以及挂载情况。
  • 浏览器自动化工具:Selenium 和 Playwright
  • 什么是全景相机?
  • 机器人--相机
  • 学习海康VisionMaster之线圆测量
  • stm32wb55rg (4) 启用usart串口
  • OpenAI Embedding 和密集检索(如 BERT/DPR)进行语义相似度搜索有什么区别和联系
  • transformer-实现单层Decoder 层
  • 【探寻C++之旅】第十二章:异常
  • RTDETRv2 pytorch训练
  • 部署一个自己的Spring Ai 服务(deepseek/通义千问)
  • kotlin flatMap 变换函数的特点和使用场景
  • 亚远景-ASPICE认证:如何优化软件开发流程?
  • 极客天成受邀参加2050大会,共赴人工智能科技盛宴
  • IDEA新版本Local Changes
  • 辽宁省全力开展辽阳一饭店火灾事故救援处置工作
  • 习近平访问金砖国家新开发银行
  • 今年一季度全国社会物流总额达91万亿元,工业品比重超八成
  • 李祥翔评《孔子哲学思微》︱理性秩序与美学秩序的碰撞
  • 体坛联播|利物浦提前4轮夺冠,安切洛蒂已向皇马更衣室告别
  • 四川邻水县县长石国平拟任县(市、区)党委书记