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

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

http://www.xdnf.cn/news/3042.html

相关文章:

  • MAC安装unar并解压.rar文件
  • 实现在h5中添加日历提醒:safari唤起系统日历,其它浏览器跳转google日历
  • 数据资产如何产生价值与发挥价值:从认知到实践的全景指南
  • 智慧交警系统架构设计方案
  • k8s学习笔记
  • echo 1 > /proc/sys/kernel/nmi_watchdog报错
  • 在阿里云实例上部署通义千问QwQ-32B推理模型
  • outlook for mac本地邮件存放在哪儿?
  • 【趣谈】Cyber、Web、Network都是网络有什么区别
  • 正则基础与进阶
  • 【报错问题】 macOS 的安全策略(Gatekeeper)阻止了未签名的原生模块(bcrypt_lib.node)加载
  • 6.4 内部协作与知识管理:智能助手与企业知识库的集成
  • VPN访问SAP组服务器报登陆负载均衡错误88:无法连接到消息服务器(RC=9)
  • 蓝桥杯 11. 最大距离
  • idm 禁止自动更新提示(修改注册表)
  • JAVA使用Apache POI导出Word,支持向表格动态添加多行数据
  • linux中由于编译选项-D_OS64BIT导致的核心已转储问题
  • gitee 如何修改提交代码的邮箱
  • C++ 中自主内存管理 new/delete 与 malloc/free 完全详解
  • gradle 下载的tencent的镜像
  • 为什么 Vite 速度比 Webpack 快?
  • STM32单片机入门学习——第49节: [15-2] 读写内部FLASH读取芯片ID
  • 【行业特化篇3】制造业简历优化指南:技术参数与标准化流程的关键词植入艺术
  • 在Spark中通过jps命令看到的进程名,是哪个命令产生有什么作用
  • 亚远景-ASPICE认证:如何优化软件开发流程?
  • js 正则中的$0,1,2,3 是怎么用的
  • 解析表观遗传学的工具——ChIP-seq(二)
  • 博客打卡-小易喜欢的数列-动态规划
  • python数据分析(六):Pandas 多数据操作全面指南
  • JAVA 枚举类的ordinal用法