mybatis中使用list作为参数方式

 更新时间:2026年01月07日 09:27:08   作者:HRX98  
在使用MyBatis时,若要在Mapper XML中使用List作为参数,并且collection属性值类型为List,需要注意传入的参数为List时不能使用lists!=null进行判断

mybatis中使用list作为参数

collection属性值类型为List

dao

@Override
    public Integer timeAnalyse(String customerId, LocalDateTime firstDay, LocalDateTime lastDay, String metric ,Integer type) {
        List<String> list = this.getMetrics(metric);
        return baseMapper.countByTime(customerId, firstDay, lastDay, list, type);
    }

    /**
     * 获取指标列表
     * @param metric 指标大类名称
     * @return 指标列表
     */
    private List<String> getMetrics(String metric) {
        List<String> list = new ArrayList<>();
        if (metric.equals(HealthRecordConstant.METRIC_TYPE_WEIGHT)) {
            list.add(HealthRecordConstant.METRIC_TYPE_WEIGHT);
            list.add(HealthRecordConstant.METRIC_TYPE_BMI);
        } else if (metric.equals(HealthRecordConstant.METRIC_TYPE_BLOODPRESSURE)) {
            list.add(HealthRecordConstant.METRIC_TYPE_DIASTOLICPRESSURE);
            list.add(HealthRecordConstant.METRIC_TYPE_HEARTPATEOFBP);
            list.add(HealthRecordConstant.METRIC_TYPE_SYSTOLICPRESSURE);
        } else {
            list.add(HealthRecordConstant.METRIC_TYPE_BGAFTERBREAKFAST);
            list.add(HealthRecordConstant.METRIC_TYPE_BGAFTERDINNER);
            list.add(HealthRecordConstant.METRIC_TYPE_BGAFTERLUNCH);
            list.add(HealthRecordConstant.METRIC_TYPE_BGBEFOREBEDTIME);
            list.add(HealthRecordConstant.METRIC_TYPE_BGBEFOREDAWN);
            list.add(HealthRecordConstant.METRIC_TYPE_BGBEFOREDINNER);
            list.add(HealthRecordConstant.METRIC_TYPE_BGBEFORELUNCH);
            list.add(HealthRecordConstant.METRIC_TYPE_FASTINGBLOODGLUCOSE);
        }
        return list;
    }

mapper

Integer countByTime(@Param("customerId") String customerId,
                     @Param("firstDay") LocalDateTime firstDay,
                     @Param("lastDay") LocalDateTime lastDay,
                     @Param("metrics") List<String> metrics,
                     @Param("type") Integer type);

xml

 <select id="countByTime" resultType="Integer">
        SELECT
            COUNT(*)
        from
            customer_body_metrics
        WHERE
        <if test="type == 0">
            HOUR(create_time) BETWEEN 0 and 8
        </if>
        <if test="type == 1">
            HOUR(create_time) BETWEEN 8 and 16
        </if>
        <if test="type == 2">
            HOUR(create_time) BETWEEN 16 and 24
        </if>

        and
            customer_id = #{customerId}
        and
            create_time > #{firstDay}
        and
            #{lastDay} > create_time
        <if test="metrics.size()>0">
        and
            metric IN
            <foreach collection="metrics" item="value" index="index"  open="(" close=")" separator=",">
                #{value}
            </foreach>
        </if>

    </select>

注意

传入参数为List不能用lists != ‘’ 判断

总结

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

相关文章

  • JavaWeb Servlet生命周期细枝末节处深究

    JavaWeb Servlet生命周期细枝末节处深究

    Servlet指在服务器端执行的一段Java代码,可以接收用户的请求和返回给用户响应结果,下面这篇文章主要给大家介绍了关于JavaWeb.servlet生命周期的相关资料,需要的朋友可以参考下
    2022-10-10
  • maven下载jar包改用阿里云maven库的方法

    maven下载jar包改用阿里云maven库的方法

    这篇文章主要介绍了maven下载jar包改用阿里云maven库的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • SpringBoot如何上传图片

    SpringBoot如何上传图片

    这篇文章主要介绍了SpringBoot如何上传图片,帮助大家更好的理解和学习springboot框架,感兴趣的朋友可以了解下
    2020-09-09
  • Kotlin语法学习-变量定义、函数扩展、Parcelable序列化等简单总结

    Kotlin语法学习-变量定义、函数扩展、Parcelable序列化等简单总结

    这篇文章主要介绍了Kotlin语法学习-变量定义、函数扩展、Parcelable序列化等简单总结的相关资料,需要的朋友可以参考下
    2017-05-05
  • Java 方法递归的思路详解

    Java 方法递归的思路详解

    程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。但是如果没终止条件会造成死循环,所以递归代码里要有结束自调自的条件,接下来讲解一下学习递归的思路
    2022-04-04
  • java实现快速排序的方法

    java实现快速排序的方法

    这篇文章主要介绍了java实现快速排序的方法,涉及java排序的相关操作技巧,需要的朋友可以参考下
    2015-05-05
  • SpringBoot用实体接收Get请求传递过来的多个参数的两种方式

    SpringBoot用实体接收Get请求传递过来的多个参数的两种方式

    本文主要介绍SpringBoot用实体接收Get请求传递过来的多个参数,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • Java中关于ThreadLocal的隐式引用详解

    Java中关于ThreadLocal的隐式引用详解

    这篇文章主要介绍了Java中关于ThreadLocal的隐式引用,从线程的角度看,每个线程都保持一个对其线程局部变量副本的隐式引用,只要线程是活动的,ThreadLocal实例就是可访问的,下面我们来具体看看
    2024-03-03
  • java: 无效的目标发行版: 20问题解决办法

    java: 无效的目标发行版: 20问题解决办法

    这篇文章主要给大家介绍了关于java: 无效的目标发行版: 20问题的解决办法,出现这个问题大多数是因为自己安装的jdk版本和你在运行项目时的所选的jdk版本不一致所导致的,需要的朋友可以参考下
    2024-03-03
  • SpringBoot整合Hmily实现TCC分布式事务

    SpringBoot整合Hmily实现TCC分布式事务

    这篇文章主要为大家详细介绍了SpringBoot如何整合Hmily实现TCC分布式事务,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-11-11

最新评论