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 != ‘’ 判断

总结

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

相关文章

  • 简单了解JAVA变量类型及代码实例

    简单了解JAVA变量类型及代码实例

    这篇文章主要介绍了简单了解JAVA变量类型及代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • jackson 实现null转0 以及0转null的示例代码

    jackson 实现null转0 以及0转null的示例代码

    这篇文章主要介绍了jackson 实现null转0 以及0转null的示例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • SpringBoot使用iText7实现将HTML转成PDF并添加页眉页脚水印

    SpringBoot使用iText7实现将HTML转成PDF并添加页眉页脚水印

    这篇文章主要为大家详细介绍了SpringBoot使用iText7实现将HTML转成PDF并添加页眉页脚水印的相关知识,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-03-03
  • SpringBoot+WebSocket+Netty实现消息推送的示例代码

    SpringBoot+WebSocket+Netty实现消息推送的示例代码

    这篇文章主要介绍了SpringBoot+WebSocket+Netty实现消息推送的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • redis分布式锁的实现原理详解

    redis分布式锁的实现原理详解

    这篇文章主要为大家详细介绍了redis分布式锁,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • java实现单链表倒转的方法

    java实现单链表倒转的方法

    这篇文章主要为大家详细介绍了java实现单链表倒转的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • JAVA(SpringBoot)集成Jasypt进行加密、解密功能

    JAVA(SpringBoot)集成Jasypt进行加密、解密功能

    Jasypt是一个Java库,专门用于简化加密和解密操作,提供多种加密算法支持,集成到SpringBoot等框架中,通过使用Jasypt,可以有效保护配置文件中的敏感信息,如数据库密码等,避免被未授权访问,Jasypt还支持自定义加密器,提高扩展性和安全性,适用于各种需要加密保护应用场景
    2024-09-09
  • Java通过在主循环中判断Boolean来停止线程的方法示例

    Java通过在主循环中判断Boolean来停止线程的方法示例

    这篇文章主要介绍了Java通过在主循环中判断Boolean来停止线程的方法,结合具体实例形式分析了java针对线程的判断与停止操作相关实现技巧,需要的朋友可以参考下
    2017-04-04
  • 一篇文章带你理解Java的SPI机制(图文并茂)

    一篇文章带你理解Java的SPI机制(图文并茂)

    本文详细介绍了Java的SPI机制,包括其定义、用途和实现方式,SPI(ServiceProviderInterface)是一种服务发现机制,用于实现框架或库的扩展点,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-10-10
  • 如何用java生成指定范围的随机数

    如何用java生成指定范围的随机数

    以生成[10,20]随机数为例,首先生成0-20的随机数,然后对(20-10+1)取模得到[0-10]之间的随机数,然后加上min=10,最后生成的是10-20的随机数
    2013-09-09

最新评论