Mybatis foreach 请求参数是对象集合

需求 参数是对象集合

/**
 * 查询对应客户的联系人信息
 * @param qeury
 * @return
 */
public List<CustomerContactInfoList>  getCustomerContactInfoList(List<CustomerContactInfoList> qeury);

对应实现

<select id="getCustomerContactInfoList"  parameterType="java.util.List" resultType="com.zhongan.crm.dataobject.extend.CustomerContactInfoList">
  select
         tci.name as "customerName",
         tcp.name as "name",
         tcp.phone as "phone"
         FROM t_customer_info tci
         join t_contact_person tcp ON tci.id=tcp.customer_info_id
   where 1=1
      <if test="list!=null">
         <foreach collection="list" item="item" index="index"  open="and (" separator="or " close=")">
            <if test="item.customerName!=null and ''!=item.customerName">
               tci.name=#{item.customerName}
            </if>
            <if test="item.name!=null and ''!=item.name">
               and    tcp.name=#{item.name}
            </if>
            <if test="item.phone!=null and ''!=item.phone">
               and    tcp.phone=#{item.phone}
            </if>
         </foreach>
      </if>
</select>
  • foreach元素的属性主要有 item,index,collection,open,separator,close。 
    • item表示集合中每一个元素进行迭代时的别名,
    • index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,
    • open表示该语句以什么开始,
    • separator表示在每次进行迭代之间以什么符号作为分隔符,
    • close表示以什么结束。
  • 在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的,主要有一下3种情况:

    • 1.如果传入的是单参数且参数类型是一个List的时候,collection属性值为list

    • 2.如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array

    • 3.如果传入的参数是多个的时候,我们就需要把它们封装成一个Map或者Object。


  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. MyBatis是什么?有什么优点? MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集的工作。MyBatis可以通过XML或注解方式进行配置。 MyBatis的优点包括: - 简单易学:MyBatis的API非常简单,易于上手。 - 灵活性高:MyBatis可以灵活定制SQL,支持存储过程和高级映射。 - SQL和Java代码分离:MyBatis使用XML或注解方式进行SQL配置,使得Java代码和SQL代码分离,易于维护。 - 缓存机制:MyBatis支持一级缓存和二级缓存,提高了查询效率。 - 映射灵活:MyBatis支持多种映射方式,包括自动映射和手动映射。 2. MyBatis的工作流程是什么? MyBatis的工作流程如下: - 首先,应用程序通过MyBatis API请求Mapper接口中的方法。 - 然后,MyBatis根据Mapper接口中的方法名和参数信息生成对应的SQL语句。 - 接着,MyBatis通过JDBC执行SQL语句,并将结果集转换为Java对象。 - 最后,MyBatis返回查询结果给应用程序。 3. MyBatis的一级缓存和二级缓存是什么? MyBatis的缓存机制分为一级缓存和二级缓存。 - 一级缓存:MyBatis的一级缓存是在SqlSession对象中的缓存。当SqlSession对象被关闭之前,所有查询的结果都会被存储在这个缓存中。一级缓存的作用域是SqlSession级别的,同一个SqlSession中相同的查询语句只会执行一次,并且将结果缓存到一级缓存中,下次执行相同的查询语句时就可以直接从缓存中获取结果。 - 二级缓存:MyBatis的二级缓存是在Mapper命名空间级别的缓存。当SqlSession关闭时,SqlSession中的缓存将被清空,但是Mapper命名空间级别的缓存会被存储在一个全局的缓存中,多个SqlSession可以共享这个缓存。如果开启了二级缓存,当查询同一条SQL语句时,MyBatis会先从二级缓存中查找,如果缓存中存在,则直接返回结果,否则才会去查询数据库。 4. MyBatis中的动态SQL是什么?有哪些动态SQL标签? MyBatis中的动态SQL是指在SQL语句中根据不同的条件动态拼接SQL语句的技术。MyBatis中有以下几种动态SQL标签: - if:判断条件为true时执行。 - choose:类似于Java中的switch语句,根据条件匹配执行。 - when:choose标签下的子标签,表示匹配的条件。 - otherwise:choose标签下的子标签,表示没有匹配的条件。 - trim:去掉SQL语句中的一部分。 - where:添加WHERE子句。 - set:添加SET子句。 - foreach:遍历集合并执行SQL语句。 5. MyBatis中的ResultMap是什么? ResultMap是MyBatis中用来映射查询结果集的标签。ResultMap标签定义了如何将结果集映射到Java对象中。MyBatis中的ResultMap可以通过XML或注解方式进行配置。ResultMap标签包含以下元素: - id:ResultMap的唯一标识。 - type:映射结果集的Java类型。 - result:定义Java对象的属性和查询结果集的列之间的映射关系。 - association:定义Java对象的属性和另一个Java对象之间的映射关系。 - collection:定义Java对象的属性和另一个Java对象集合之间的映射关系。 - discriminator:定义映射结果集的条件。 6. MyBatis中如何进行分页查询? MyBatis中可以使用插件或者手动编写SQL语句来进行分页查询。 - 使用插件:MyBatis提供了一个分页插件PageHelper,可以非常方便地进行分页查询。在Mapper接口中定义方法时,只需传入页码和每页的记录数,PageHelper插件会自动进行分页。 - 手动编写SQL语句:手动编写SQL语句时,可以使用MySQL中的LIMIT关键字进行分页查询。例如:SELECT * FROM table LIMIT (page-1)*pageSize,pageSize。 7. MyBatis中如何实现多表关联查询? MyBatis中实现多表关联查询的方式有以下几种: - 嵌套查询:在SQL语句中使用嵌套查询,将查询结果作为子查询的条件进行查询。例如:SELECT * FROM table1 WHERE id IN (SELECT table1_id FROM table2 WHERE condition)。 - 连接查询:使用SQL语句中的JOIN关键字进行连接查询。例如:SELECT * FROM table1 JOIN table2 ON table1.id=table2.table1_id WHERE condition。 - 使用ResultMap:在ResultMap中使用association和collection标签进行多表关联映射。 8. MyBatis中有哪些执行器(Executor)? MyBatis中有三种执行器: - SimpleExecutor:每次执行SQL语句时,都会创建一个新的Statement对象。 - ReuseExecutor:在执行SQL语句之前会检查Statement是否已经存在,如果存在则复用Statement对象,否则创建新的Statement对象。 - BatchExecutor:在执行大量SQL语句时,使用批处理方式进行执行。 9. MyBatis中如何进行事务管理? MyBatis中的事务管理使用JDBC的事务管理方式。在MyBatis中,可以使用SqlSession对象的commit()和rollback()方法来提交和回滚事务。同时,MyBatis也支持Spring框架的事务管理,可以通过配置Spring的事务管理器来实现事务管理。 10. MyBatis中如何进行多数据源配置? MyBatis中实现多数据源配置的方式有以下几种: - 使用多个SqlSessionFactory:每个SqlSessionFactory配置不同的数据源,通过SqlSessionFactory的openSession()方法获取SqlSession对象。 - 使用第三方数据源管理框架:例如Druid、C3P0等,可以通过这些框架来管理多个数据源。 - 自定义数据源:自定义数据源时,需要实现javax.sql.DataSource接口,并配置DataSourceTransactionManager来管理事务。MyBatis提供了一个AbstractRoutingDataSource抽象类,可以实现动态切换数据源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值