`

ibatis传入数组或List类型参数小结

 
阅读更多

小结一下ibatis框架下,传入参数为数组类型或者是List类型的sql写法。标签里面都不需要表名

1.传入字符串数组,不需要标明parameterClasss,数组和List类型对象一样都可以用<iterate>标签进行遍历。

1
2
3
4
5
6
7
8
9
10
<select id="selectOrgIdByNameStr" resultClass="Integer">
        SELECT id
        FROM org
        WHERE name IN
        <iterate close=")" open="("  conjunction=",">
            <![CDATA[
                 #[]#
            ]]>
       </iterate>
    </select>

java调用代码(注意空指针问题):

1
2
3
4
@Override
    public List<Integer> selectOrgIdByNameStr(String[] orgArchArr) {
         return baseDao.queryForList("org.selectOrgIdByNameStr", orgArchArr, Integer.class);
    }

2.传入List<Integer>,这个时候parameterClass传的是List接口的类路径,而不是List的泛型参数的类路径!

1
2
3
4
5
6
7
8
9
10
<select id="searchWaiters" parameterClass="java.util.List" resultClass="com.chat.domain.zone.WaiterCgExt">
        SELECT w.id, pin as userName, org_id as orgId, w.name, erp, job_no as jobNo, level, max_csu, gid,cg.name chatGroupName, r.yn groupYn, cg.yn chatGroupYn
        FROM waiter w left join waiter_relation r on  w.id = r.wid LEFT JOIN chat_group cg on r.gid = cg.id, org o
        WHERE o.id = w.org_id
            AND w.yn = 1
            AND o.yn = 1
            AND w.id IN <iterate open="(" close=")" conjunction=",">
                #wid[]#
            </iterate>
    </select>

java调用代码如下,注意空指针问题。

1
2
3
4
5
6
7
8
@Override
    public List<WaiterCgExt> searchWaiters(ModAccManVo vo) {
        List<Integer> widList = baseDao.queryForList("zone.waiter.searchWaitersId", vo, Integer.class);
        if(CollectionUtils.isEmpty(widList)) {
            return new ArrayList<WaiterCgExt>();
        }
        return baseDao.queryForList("zone.waiter.searchWaiters", widList, WaiterCgExt.class);
    }


3.传入的List的元素是复杂的对象类型,类型类型里面包含id属性。同样,parameterClass传入的是List接口的类路径,而不是List的泛型参数的类路径。遍历的时候,用#list[].id#就行了,“.”后面跟上要枚举的属性名称

1
2
3
4
5
6
7
8
9
<select id="selectWaitersByOrgList" resultClass="com.chat.domain.zone.Waiter" parameterClass="java.util.List">
        SELECT id, pin as userName
        FROM waiter
        WHERE org_id IN
            <iterate open="(" close=")" conjunction=","
                #list[].id# 
            </iterate>  
            AND yn = 1
    </select

以上代码在本机都正常运行。

分享到:
评论

相关推荐

    ibatis 处理数组

    在IT行业中,Ibatis是一个非常流行的Java持久层框架,它为开发者提供了灵活的SQL映射...两者结合,能够有效地处理和展示数组类型的数据,提升开发效率。在实际应用中,还需要根据具体业务需求进行适当的调整和优化。

    java~springboot~ibatis数组in查询的实现方法

    Java@Spring Boot@iBatis数组in查询的实现方法 在本文中,我们将详细介绍Java@Spring Boot@iBatis数组in查询的实现方法。这种查询方法在实际开发中非常有用,特别是在需要从数组中查询符合条件的集合时。 首先,让...

    ibatis教程 输入参数详解

    参数可以通过`#{}`语法在SQL语句中引用,ibatis会自动进行类型转换和值绑定。 ### resultMap `resultMap`是ibatis中一个重要的概念,用于描述SQL查询结果与Java对象之间的映射关系。通过`resultMap`可以实现复杂的...

    ibatis中输入输出各种类型的参数分析及#与$区别

    ### ibatis中输入输出各种类型的参数分析及#与$区别 #### iBatis简介与特点 iBatis作为一款轻量级的Java持久层框架,以其简洁、灵活的特点,在众多框架中占据一席之地。相较于知名的Hibernate框架,iBatis在实现上...

    ibatis小结

    **Ibatis小结** Ibatis,一款轻量级的Java持久层框架,是MyBatis的前身,由Clinton Begin在2003年创建。它致力于解决Java应用程序中的数据访问层(DAL)问题,提供了SQL映射框架,使得开发者可以直接编写SQL语句,...

    ibatis学习文档

    1. **传入参数仅有数组**: 在这种情况下,`&lt;iterate&gt;`标签用于构建SQL的`IN`子句。`open`属性定义了`IN`子句的开始括号,`close`属性定义了结束括号,而`conjunction`属性定义了元素间的分隔符,通常是逗号。`#[]#...

    ibatis入门与ibatis迭代的用法

    6. **结果映射**:返回的结果可以通过ResultMap进行自动映射到Java对象,或者使用resultType或resultMap指定返回类型。 **iBatis迭代的用法** 在处理查询结果时,iBatis提供了迭代的用法,可以方便地遍历查询结果...

    ibatis总结 ibatis ibatis ibatis ibatis

    在Ibatis中,参数可以通过`#`或`$`符号传递。例如,`select * from PRODUCT where PRD_CAT_ID = #{value}`中的`#{value}`是预编译参数,能有效防止SQL注入。 总结,Ibatis提供了灵活的SQL映射机制,使得开发人员...

    ibatis 支持枚举类型

    在Ibatis中,我们不能直接将枚举类型作为参数传递给SQL语句,因为枚举类在数据库中没有对应的列类型。因此,我们需要创建一个枚举转换器来处理枚举和字符串(或其他数据库可识别的类型)之间的转换。这里我们可以...

    Ibatis

    2.3 参数绑定:调用 SqlSession 的方法时,传入参数对象或 Map,Ibatis 会自动将参数映射到 SQL 语句中。 2.4 结果处理:查询操作返回的结果会被自动映射到 Java 对象,更新操作返回受影响的行数。 **3. 动态 SQL*...

    ibatis 学习小结笔记

    ### ibatis 学习小结笔记 #### 一、ibatis 概述 ibatis 是一个基于 Java 的持久层框架,它提供了一种简便的方式来处理关系型数据库与 Java 对象之间的映射(O/R Mapping)。ibatis 在设计上强调的是 SQL 语句的...

    iBATIS实例小程序

    - **Parameter Class**: `java.util.Map`,表示传入参数为Map类型。 - **Result Class**: `java.lang.String`,表示返回结果为字符串类型。 - **SQL语句**: - 表名: `mbs_txn_dtll` - 条件: - 账户号: `l.orig_...

    ibatis list

    注意,这里的`parameterClass`被设置为`java.util.Map`,这意味着参数对象应为Map类型,其中`list`是Map的一个键,对应的值为List集合。 #### 批量查询 `&lt;select id="selectByIterate" parameterClass="java.util....

    ibatis与存储过程(带输出参数的应用)

    在IT行业中,数据库操作是应用程序不可或缺的一部分,而Ibatis作为一款优秀的持久层框架,极大地简化了Java应用与数据库之间的交互。本主题将深入探讨如何在Ibatis中使用存储过程,特别是涉及带有输出参数的存储过程...

    ibatis的多参数查询.doc

    ### ibatis多参数查询解析 #### 一、引言 在使用ibatis(现称为MyBatis)进行数据库操作时,经常会遇到需要处理多个输入参数的情况。然而,默认情况下ibatis只支持单个输入参数,这在实际开发中往往难以满足需求。...

    ibatis常用sql语句

    标题与描述概述的知识点主要集中在iBATIS框架的SQL映射技术上,特别是针对不同类型的输入参数如何在iBATIS中构建SQL语句。以下是对这些知识点的详细展开: ### iBATIS SQL映射技术概览 iBATIS是早期流行的Java持久...

    ibatis中iterate的例子

    - `property`: 指定要迭代的属性名,这个属性应该对应于传入参数对象的一个字段,该字段通常包含一个集合。 - `open`: 迭代开始时插入的字符,例如括号的开括号。 - `close`: 迭代结束时插入的字符,例如括号的闭...

    ibatis 读取oracle clob类型

    ibatis 读取oracle clob类型

    ibatis demo,ibatis例子,ibatis示例

    Ibatis提供了多种方式来实现映射,如自动类型匹配、自定义类型处理器、复杂关联映射等。 7. **缓存机制**:Ibatis内置了本地缓存和二级缓存,可以提高数据读取速度。本地缓存作用于单个SqlSession,而二级缓存则...

    Ibatis复杂查询语句.doc

    - `&lt;iterate&gt;`用于处理数组或集合类型的参数,如`dismissStatusList`,它可以生成逗号分隔的条件,如`m.DISMISS_STATUS in ( ... )`。 总结起来,这个Ibatis查询语句充分展示了Ibatis处理复杂查询的能力,包括动态...

Global site tag (gtag.js) - Google Analytics