Mybatis处理List参数

前言:

本篇博客仅仅作为笔录,避免每次网络搜索

前期准备:
  1. sql :
CREATE TABLE `tb_student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_bin NOT NULL,
  `age` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8 COLLATE=utf8_bin ROW_FORMAT=DYNAMIC;

INSERT INTO `work`.`tb_student` (`id`, `name`, `age`) VALUES ('25', ' Ben ', '23');
INSERT INTO `work`.`tb_student` (`id`, `name`, `age`) VALUES ('26', 'Jack', '24');
INSERT INTO `work`.`tb_student` (`id`, `name`, `age`) VALUES ('27', 'Tom', '24');
INSERT INTO `work`.`tb_student` (`id`, `name`, `age`) VALUES ('28', 'Jerry', '19');
INSERT INTO `work`.`tb_student` (`id`, `name`, `age`) VALUES ('29', 'Lilian', '18');
  1. 实体类 StudentInfo:
public class StudentInfo {

    private Integer id;

    private String name;

    private Integer age;
    
    // 省略 get、set 方法
}
示例:
  1. 通过 两种不同数据类型的List 不同查询:

StudentDao :

/**
     * 通过年龄和名称查询结果
     * @param ages
     * @param name
     * @return
     */
    List<StudentInfo> getListByAgesAndName(@Param("ages") List<Integer> ages, @Param("name") String name);
    
  /**
     * 通过年龄【实体中获取】和名称查询结果
     * @param studentInfos
     * @param name
     * @return
     */
    List<StudentInfo> getListByStudentInfoAndName(@Param("studentInfos") List<StudentInfo> studentInfos, @Param("name") String name);

StudentMapper.xml

<!-- 通过年龄和名称查询结果 -->
    <select id="getListByAgesAndName"  resultType="com.morning.all.entity.StudentInfo">
        select * from  tb_student
        where name like CONCAT('%',#{name},'%')
        and age in
        <foreach collection="ages" item="age" index="index" open="(" close=")" separator=",">
            #{age}
        </foreach>
    </select>

    <!-- 通过年龄【实体中获取】和名称查询结果 -->
    <select id="getListByStudentInfoAndName"  resultType="com.morning.all.entity.StudentInfo">
        select * from  tb_student
        where name like CONCAT('%',#{name},'%')
        and age in
        <foreach collection="studentInfos" item="studentInfo" index="index" open="(" close=")" separator=",">
            #{studentInfo.age}
        </foreach>
    </select>

以上就是关于Mybatis List传参以及使用!

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Mybatis中的foreach标签用于遍历集合类型的参数,例如List、Set、数组等。可以在SQL语句中使用foreach标签来动态生成多个参数,从而实现批量操作。foreach标签有多种属性,可以根据需求进行配置,例如item、index、collection、open、close、separator等。使用foreach标签可以简化代码,提高效率。 ### 回答2: MyBatis中的foreach是一个非常有用的标签,用于在SQL查询中循环遍历一个集合类型的参数。 首先,我们可以使用foreach标签将一个List类型的参数传递给SQL查询。例如,假设我们有一个名为users的List对象,其中包含了一些用户的ID,我们希望通过这些ID来查询相应的用户信息。我们可以使用foreach标签来实现这个功能: <select id="getUserInfoByIds" resultType="User"> SELECT * FROM user WHERE id IN <foreach collection="users" item="id" open="(" separator="," close=")"> #{id} </foreach> </select> 在上述代码中,collection属性指定了要遍历的集合对象,item属性指定了在循环中每次迭代的对象名,open属性指定了循环的开始字符,separator属性指定了每次迭代的分隔符,close属性指定了循环的结束字符。 在代码中,我们使用了IN操作符来查询满足条件的用户信息,并使用foreach标签将用户ID集合传递给查询语句。在每次循环迭代中,我们将使用#{id}来替换查询语句中的占位符。 当在Java代码中调用该查询语句时,我们只需将users参数传递给MyBatis即可。例如: List<Integer> users = Arrays.asList(1, 2, 3); List<User> userList = sqlSession.selectList("getUserInfoByIds", users); 这样,MyBatis就会根据传递的用户ID列表执行查询,并返回相应的用户信息列表。 通过使用MyBatis的foreach标签,我们可以灵活地在SQL查询中处理集合类型的参数,实现更加便捷和高效的数据操作。 ### 回答3: mybatis中的foreach标签用于在SQL语句中循环遍历一个集合(List)并执行相应的操作。 使用foreach标签的格式如下: ```xml <foreach collection="list" item="item" separator="," open="(" close=")"> #{item} </foreach> ``` 其中,collection属性指定要遍历的集合,item属性指定在遍历过程中每个元素的别名,separator属性指定了元素之间的分隔符,open和close属性指定了循环区块的起始和结束符号。 通过foreach标签,我们可以将一个List中的元素逐个取出,并在SQL语句中进行处理。在foreach标签内部,我们可以使用`#{item}`占位符来引用每个元素的值。 例如,假设有一个List<String>类型的集合,其中包含了一些商品的名称,我们想要根据这个集合查询商品的详细信息,可以使用foreach标签来循环遍历这个集合,并执行SQL查询操作: ```xml <select id="getProductDetails" resultType="Product"> SELECT * FROM product WHERE name IN <foreach collection="list" item="item" separator="," open="(" close=")"> #{item} </foreach> </select> ``` 在上述例子中,我们使用foreach标签遍历了一个名称集合,并将名称以逗号分隔的形式传递给SQL语句的IN子句,以实现根据名称查询商品详情的功能。 总之,mybatis中的foreach标签提供了一种便捷的方式来在SQL语句中循环遍历一个集合,并根据集合元素执行相应的操作。这对于处理动态的、可变数量的参数非常有用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值