首页 > 其他分享 >mapper 向后端传集合出错

mapper 向后端传集合出错

时间:2023-12-03 20:59:18浏览次数:37  
标签:gd mapper GOODS NAME TREE gt CODE 出错 集合

  • 批量查询

    <select id="selectGoods" parameterType="cn.com.xxx.xx.entity.Goods" resultMap="goodsResultMap">
        select g.GOODS_ID, g.GOODS_NAME, g.GOODS_CODE, g.GOODS_DATE, g.GOODS_STATE, g.GOODS_NUM_STOCK, g.GOODS_PRICE, g.GOODS_BRAND, g.GOODS_TEL,
        gd.GOODS_DICTIONARY_NAME, gd.GOODS_DICTIONARY_CODE, gd.GOODS_DICTIONARY_PCODE, gd.GOODS_DICTIONARY_TYPE,
        gt.TREE_CODE, gt.TREE_PARENT_CODE, gt.TREE_NAME
        from goods_info g
        left join goods_dictionary gd on g.GOODS_CODE = gd.GOODS_DICTIONARY_CODE
        left join goods_tree gt on g.GOODS_TREE_CODE = gt.TREE_CODE
        <where>
            <if test="goodsName!=null and goodsName != ''">
                AND g.GOODS_NAME like CONCAT('%',#{goodsName},'%')
            </if>
            <if test="treeCodeList!= null and treeCodeList.size() > 0">
                AND g.GOODS_TREE_CODE in
                <foreach collection="treeCodeList" open="(" close=")" separator="," item="treeCode">
                    #{treeCode}
                </foreach>
            </if>
        </where>
        ORDER BY GOODS_NAME
    </select>
    
    • 注意 foreach 标签中 collection 指向的是传来的集合参数名,item 后就是接下来操作的每一个集合元素
    • 在是否为空的判断中:<if test="treeCodeList!= null"> 只用不等于 null 不够严谨,建议再加上 .size > 0.isEmpty()(更直观)
  • 批量删除同理:

    <delete id="deleteSomeGoodsByIds" parameterType="list" >
        delete from goods_info
        where GOODS_ID in
        <foreach collection="list" open="(" close=")" separator="," item="id">
            #{id}
        </foreach>
    </delete>
    
  • 提一嘴:

    • 前端传来集合为空:两种方式都不会报错(集合就相当于:List<String> emptyList = new ArrayList<>(); 只实例化但不包含任何元素)
    • 后端指定集合为 null:两种方式都会抛出 NullPointerException 异常,所以一般搭配 !=null 做一个额外的检查
    • 但 mapper 不会,mapper 里的动态 sql 会自动处理这种 NullPointerException 空指针异常并判断为 false,但最好还是指明
  • 再提一嘴(仅供参考):

    • sql 语句时建议 ——> 单一范围用 like + %,小指定范围用 between xx and xx,大范围用 in(xx)

标签:gd,mapper,GOODS,NAME,TREE,gt,CODE,出错,集合
From: https://www.cnblogs.com/zhu-ya-zhu/p/17873712.html

相关文章

  • python基础-集合
    1、集合的创建用{}进行创建用内置函数set()进行创建示例代码#第一种创建方式s={1,2,3,3,4,5,6,7}print(s,type(s))#第二种创建方式s1=set(range(6))#根据范围进行集合的创建print(s1)s2=set([1,23,34,12,23])#将列表转换为为集合print(s......
  • 学习笔记4:JavaSE & API(集合)
    1、集合综述(1)定义:集合与数组一样,可以保存一组元素,并且提供了操作元素的相关方法,使用更方便。(2)java集合框架中相关接口java.util.Collection接口:所有集合的顶级接口。Collection下面有多种实现类,因此我们有更多的数据结构可供选择。java.util.List:线性表。是可重复集合,并且有......
  • 什么叫做有序集合?
    有序集合是一种数据结构,其中元素是有序排列的。这种“有序”可以有不同的含义,通常指的是元素按照某种明确的顺序存放,这个顺序在集合被创建时就确定了,并且通常会保持不变。在不同的编程语言和上下文中,有序集合可以有不同的特性和实现方式。以下是有序集合的一些关键特征:顺序性:元素的......
  • 集合框架(三)ArrayList的常见使用
    ArrayList是什么?ArrayList是Java集合中的数组列表,实现了List接口,是用来存储数据的容器之一,底层的数据结构是数组。 ArrayList有什么特点?有序:按照顺序添加元素不唯一:同一元素可以存放多次查找和访问速度较快,增删元素较慢 ArrayList和LinkedList的区别有哪些?数据机构:Arr......
  • java集合框架(二)之LinkedList的常见使用
     常用的方法定义LinkedList对象  新增  删除 获取元素 修改 ......
  • java集合框架(二)LinkedList的常见使用
    LinkedList常用方法定义LinkedList对象LinkedList<String>list=newLinkedList<>(); 插入元素list.push("张三");//在此列表的前面插入元素list.addLast("新增到最后一个元素");//将指定的元素追加到此列表的末尾。list.addFirst("新增到第......
  • java集合框架(三)之ArrayList的常见使用
      常见方法语句  三种输出语法  for循环输出   迭代器输出  foreach循环输出   ......
  • Java使用三种方式循环输出Map集合
    先新建一个Map集合 1、通过entrySet获取到键值实现对象 2、通过keySet()获取键值的集合获取值3、迭代器 ......
  • 集合框架(三)ArrayList的常见使用
    1.ArrayList是什么?ArrayList是Java中的一个集合类,实现了List接口,可以动态地添加、删除和修改其中的元素。和普通的数组不同,ArrayList可以自动扩容,而且不需要手动去维护其大小。另外,ArrayList还提供了访问和操作元素的方法,如get()、set()、add()、remove()等。 2.ArrayLsit的使......
  • 集合框架介绍
    1.集合框架的概述1.集合、数组都是对多个数据进行存储操作的结构,简称Java容器。说明:此时的存储,主要指的是内存层面的存储,不涉及到持久化的存储。1.1、集合体系集合一共分为两部分:Collection(单列集合)每个元素(数据)只包含一个值。Map(双列集合)每个元素包含两个值(键值对)。1.2、什么......