MyBatis如何进行双重foreach循环

目录
  • 进行双重foreach循环
    • 使用场景
  • mybatis foreach循环,传入多个参数
    • 上代码

进行双重foreach循环

mapname是一个Map<String,Map<String,Object>> 对象

<foreach collection="mapname" index="key1" item="value1" separator=",">
    <foreach collection="value1" index="key2" item="value2" separator=",">
        #{key1},
        #{key2},
        #{value2}
    </foreach>
</foreach>

使用场景

比如说一个付款人下面对应的运单的金额,那么key1就是付款人编号,key2是运单编号,value2是分摊的金额

mybatis foreach循环,传入多个参数

上代码

controller:

@RequestMapping(value = "/findPage", method = RequestMethod.POST)
    @ResponseBody
    public Object findPage(@RequestParam(required=false) String jobCategory,@RequestParam(required=false) String ids,@RequestParam(required=false) String cities) {
        try {
            List<Integer> listJob = new ArrayList<Integer>();
            List<Integer> listIds = new ArrayList<Integer>();
            List<String> listCities = new ArrayList<String>();
            //按照城市名称和工种查询
            if(StringUtils.isNotBlank(jobCategory) && StringUtils.isNotBlank(cities)){
                String[] temp = jobCategory.split(",");
                String[] cityTemp = cities.split(",");
                for(int i=0;i<temp.length;i++){
                    listJob.add(Integer.valueOf(temp[i]));
                }
                for(int i=0;i<cityTemp.length;i++){
                    listCities.add(cityTemp[i]);
                }
                List<WebsitesJob> list = jobService.findPage(listJob, listIds, listCities);
                return new ExtGridReturn(list.size(), list);
            }
            //按照工种查询
            if(StringUtils.isNotBlank(jobCategory)){
                String[] temp = jobCategory.split(",");
                for(int i=0;i<temp.length;i++){
                    listJob.add(Integer.valueOf(temp[i]));
                }
            }
            //按照职位名称查询
            if(StringUtils.isNotBlank(ids)){
                String[] temp = ids.split(",");
                for(int i=0;i<temp.length;i++){
                    listIds.add(Integer.valueOf(temp[i]));
                }
            }
            //按照城市查询
            if(StringUtils.isNotBlank(cities)){
                String[] temp = cities.split(",");
                for(int i=0;i<temp.length;i++){
                    listCities.add(temp[i]);
                }
            }
            List<WebsitesJob> list = jobService.findPage(listJob, listIds, listCities);
            return new ExtGridReturn(list.size(), list);
        } catch (Exception e) {
            LOGGER.error("分页获取信息出错", e);
            return new ExceptionReturn(e);
        }
    }

mapper

/**
     * 描述:根据工种查询列表
     * @param jobCategorys
     * @return
     */
    List<WebsitesJob> findPage(@Param("jobCategorys") List<Integer> jobCategorys,@Param("ids") List<Integer> ids,@Param("workPlace") List<String> workPlace);

xml

<!-- 前台查询列表 -->
   <select id="findPage" resultType="cn.edu.hbcf.plugin.websites.pojo.WebsitesJob">
           select n.ID id,
              n.NAME name,
              n.WORKPLACE workPlace,
              n.JOBCATEGORY jobCategory,
              n.SALARY salary,
              n.RESPONSIBILITIES responsibilities,
              n.REQUIREMENTS requirements,
              n.ISHOT isHot,
              n.UPDATEDATE updateDate,
              n.UPDATEUSER updateUser,
              u.real_name updateName
         from websites_job n
         left join base_users u on n.updateUser = u.account
         <where>
             <if test="jobCategorys.size()!=0">
                 or    n.jobCategory in
                   <foreach collection="jobCategorys" index="index" item="item" open="(" separator="," close=")">
                    #{item}
                </foreach>
            </if>
            <if test="ids.size()!=0">
                or n.id in
                   <foreach collection="ids" item="item" index="index" open="(" separator="," close=")">
                    #{item}
                </foreach>
             </if>
             <if test="workPlace.size()!=0">
                or n.WORKPLACE in
                   <foreach collection="workPlace" item="item" index="index" open="(" separator="," close=")">
                    #{item}
                </foreach>
             </if>
         </where>
         order by n.ISHOT,n.ID desc
   </select>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • MyBatis实现批量插入数据,多重forEach循环

    目录 批量插入数据,多重forEach循环 下面是一个实际应用 mybatis insert foreach 项目场景 批量插入数据,多重forEach循环 在业务开发过程中,遇到批量插入时,需要进行多重forEach循环的情况. 下面是一个实际应用 public class SysRoleData extends DataEntity<SysRoleData> {    private static final long serialVersionUID = 1L;    private S

  • mybatis-plus  mapper中foreach循环操作代码详解(新增或修改)

    .循环添加 接口处: 分别是 void 无返回类型 :有的话是(resultType)返回类型,参数类型(parameterType) list , 如: 在mapper文件中分别对应ID,参数类型和返回类型. 循环处理,如下: <insert id="insertPack" parameterType="java.util.List"> insert into t_ev_bu_pack ( PACK_CODE, BIN, PACK_PROD_TIME,

  • mybatis多个区间处理方式(双foreach循环)

    目录 mybatis多个区间处理 思路 多个foreach同时使用问题 应用场景 注意事项 解决方案 mybatis多个区间处理 如图:要实现车辆数不同区间查询条件 思路 a.前端传数组,数组里面放"1-5"String类型值             b.后端mybatis用双foreach循环解析     后端代码如下: <!--图例车辆数区间--> <if test="countCargoList != null and countCargoList.s

  • mybatis错误之in查询 <foreach>循环问题

    目录 in查询 <foreach>循环问题 1.我就随便用了一种传list,再foreach循环 2.findByCaseNos(Long[] caseNos) 3.findByCaseNos(String name, Long[] caseNos) in查询和foreach标签使用 1.单参数List的类型 2.单参数Array的类型 3.多参数封装成Map的类型 4.嵌套foreach的使用 in查询 <foreach>循环问题 当我在做in查询的时候,发现在网上有很多种写法:

  • mybatis insert foreach循环插入方式

    mybatis insert foreach循环插入 @Insert("<script>" + "insert into driver_account_appeal_photo (appeal_id,appeal_photo_path) values\n" + "<foreach collection=\"photoList\" item=\"item\" index=\"index\&q

  • MyBatis中使用foreach循环的坑及解决

    目录 使用foreach循环的坑 正确写法为 忽现的Mybatis foreach失效记录 解决方案 使用foreach循环的坑 我们首先看一段MyBatis中使用foreach循环的sql: SELECT * FROM table where id in <foreach item="item" collection="ids1" open="(" close=")" index="0" separ

  • MyBatis如何进行双重foreach循环

    目录 进行双重foreach循环 使用场景 mybatis foreach循环,传入多个参数 上代码 进行双重foreach循环 mapname是一个Map<String,Map<String,Object>> 对象 <foreach collection="mapname" index="key1" item="value1" separator=",">     <foreach

  • mybatis foreach 循环 list(map)实例

    目录 foreach 循环 list(map) 整体需求就是 mybatis.foreach循环如下 使用foreach处理list中的map Mapper中的方法是 Mapper.xml的sql是 foreach 循环 list(map) 直接上代码: 整体需求就是 1.分页对象里面有map map里面又有数组对象 2.分页对象里面有list list里面有map map里面有数组对象. public class Page { private Map maps; private List li

  • MongoDB数据库forEach循环遍历用法

    MongoDB数据库forEach语句循环遍历功能是非常常用的一个功能. 采用foreach循环遍历,并每次循环允许执行一次回调函数. 此外,foreach循环遍历是for循环的一种扩展,对比同浏览器端的forEach用法是一致的. 示例如下: >var arr = ["ab","cd","ef"] >var show = function(value,index,ar){ print(value) } >arr.forEach

  • 详解JAVA中的for-each循环与迭代

    在学习java中的collection时注意到,collection层次的根接口Collection实现了Iterable<T>接口(位于java.lang包中),实现这个接口允许对象成为 "foreach" 语句的目标,而此接口中的唯一方法,实现的就是返回一个在一组 T 类型的元素上进行迭代的迭代器. 一.迭代器Iterator 接口:Iterator<T> public interface Iterator<E>{ boolean hasNext

  • Java for-each循环使用难题2例(高级使用方法)

    Java中,for-each循环简化了任何Collection或array的遍历过程,但并不是每个Java程序员都了解本文将要描述的for-each 循环的一些细节.与 Java5 发布的其他术语:释放别名泛型,自动封装和可变参数不同,Java开发者对for-each循环的使用比任何其他特性更加频繁,但当问及高级的for-each循环怎样工作,或什么是在for-each循环中使用Collection时的基本需求时,就不是每个人都能够回答的了. 本篇教程和例子旨在通过深入研究for-each 循环

随机推荐