zoukankan      html  css  js  c++  java
  • mybatis传入多个数组或者多个list的实现

    mybatis传入多个数组或多个list
    此博客给出了mybatis传入多个数组或者多个List,传入多个数组或者多个List,传入多个数组或者多个List,而非传入多个参数的一种实现。(PS:传入多个参数很简单,直接去搜会有大量相关博客)
    这几天实现一个小功能,需要在查询数据库时用到两次IN查询,发现直接使用两个list会报错,去搜集了相关资料终于解决了,在此记录一下,以免下次碰到类似问题手足无措。

    直接贴需求代码:
    dao:
    需要实现的是这样子的接口:

    public List<ExamIdAndSubjectId>getIds(@Param("examIds")List<String> examIds,@Param("subjectIds")List<String>subjectIds);
     
    然而实际是这样实现的:

    public List<ExamIdAndSubjectId>getIds(@Param("ids")Ids ids);
     
    POJO类Ids的内容如下(省略get,set,toString方法):

    public class Ids {
    List<String>examIds;
    List<String>subjectIds;
    ..............
    }
     
    mapper:

    <select id="getIds" resultType="cn.siti.domain.ExamIdAndSubjectId">
    SELECT DISTINCT EB_ID AS examId,SUB_CODE AS subjectId
    FROM eqe_exam_paper_new
    WHERE EB_ID IN
    <foreach item="item" collection="ids.examIds" index="idx" open="(" separator="," close=")">
    #{item}
    </foreach>
    AND SUB_CODE IN
    <foreach item="items" collection="ids.subjectIds" index="idx" open="(" separator="," close=")">
    #{items}
    </foreach>
    </select>
     
    简单来讲,在传入多个list时,最好将多个List封装在一个pojo类里面,然后将这个pojo类作为接口的参数传过来,在mapper里面用到list时,用pojo.list方式去取list参数。数组同理。
    至于为什么需要将多个List参数封装,可以参考mybatis jar包里的源码实现(binding文件夹下的MapperMethod.class)。


    已经有人分析过此源码,在此不再套用别人的成果。附上传送门http://www.zhongruitech.com/528480084.html

    https://blog.csdn.net/zh15732621679/article/details/79678363


    ————————————————
    版权声明:本文为CSDN博主「绝命响应」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_39762130/article/details/89670000

  • 相关阅读:
    物理初中电学套题犯傻题整理
    Ansible之playbook语法
    Ansible之安装-使用aliyun的epel源
    Ansible之批量执行简单指令
    Ansible之配置文件ansible.cfg
    k8s之harbor私有镜像仓库部署
    Ansible之inventory资源清单
    centos7 二进制部署kubernetes(v1.19.0) 高可用集群
    react用ref之坑 (react中findDOMNode)
    iOS开发申请组播广播权限
  • 原文地址:https://www.cnblogs.com/javalinux/p/15356820.html
Copyright © 2011-2022 走看看