关于 mybatis 中写法

转自:https://www.cnblogs.com/xuehuashanghe/p/12882762.html

使用 mybatis 时,如果要使用到 in 写法,要使用  foreach ,里面几个参数,看了很多地方,都说的不清不楚,自己最后各种测试,这里详细说下:

(1)collection = “” ,这个参数是 dao 层(mapper)接口方法里面传过来的集合参数,如果dao 层传的参数只有一个,这里写关键字 list(如果是数组,写 array)

例子:

  dao 层:User getInfo(List<Integer> user_ids)
       collection = "list"

如果有多个参数,并且使用了 @Param 注解(import org.apache.ibatis.annotations.Param),则这里要写注解里面的参数!

例子: dao 层  :User getInfo(@Param("user_ids")List<Integer> user_ids,@Param("xxx")String xxx)

  collection = "user_ids"   

(2)item = “” ,集合里面的单个值,给下面  #{ } 用

(3)index = "" ,这个是遍历的下标,举个简单的例子立刻明白,就是平时 for 循环,我们定义的 i 一样

例子: for(int i = 0 ;i < 10 ; i ++){

   }

因此这个参数随便定义都可以,有就行

(4)open  separator  close  这3个比较好理解,就是  ( , , ,) 这样子啦,拼接括号,中间逗号隔开的意思

### MyBatis 中使用 `IN` 关键字的 SQL 写法MyBatis 中,当需要处理动态参数列表时,可以利用 `<foreach>` 标签来生成带有 `IN` 条件的 SQL 查询。以下是具体的写法: #### XML 配置方式 如果传递的是一个集合类型的参数(如 `List` 或者数组),可以通过 `<foreach>` 标签遍历该集合,并将其拼接成 `IN` 子句。 ```xml <select id="findUsersByIds" parameterType="java.util.List" resultType="com.example.User"> SELECT * FROM users WHERE id IN <foreach collection="list" item="id" open="(" separator="," close=")"> #{id} </foreach> </select> ``` 上述代码中: - `collection` 属性指定了要迭代的集合名称,在这里假设传入的参数是一个名为 `list` 的 `List` 对象[^3]。 - `item` 定义了每次循环中的单个元素变量名。 - `open` 和 `close` 分别定义了整个子句的起始和结束字符。 - `separator` 则用于分隔多个值之间的连接符号。 #### 注解方式 对于注解风格的 Mapper 接口开发模式下,也可以通过 `${}` 插入原始字符串的方式来完成同样的效果,不过这种方式存在潜在的安全隐患,因此建议仅限于受控环境下的简单场景。 ```java @Select({ "<script>", "SELECT * FROM users", "WHERE id IN ", "<foreach collection='ids' item='id' open='(' separator=',' close=')'>#{id}</foreach>", "</script>" }) public List<User> findUsersByIds(@Param("ids") List<Integer> ids); ``` 此例展示了如何结合 MyBatis 动态 SQL (`<script>`) 以及 `<foreach>` 实现更灵活的功能[^1]。 #### 使用 MyBatis-Plus 简化操作 借助 MyBatis-Plus 提供的强大封装能力,可以直接调用其内置 API 构建复杂的查询逻辑而无需手动编繁琐的 XML 文件或复杂脚本。 ```java @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { public List<User> getUsersByIds(List<Long> userIds) { return this.list(new QueryWrapper<User>() .in(CollectionUtils.isNotEmpty(userIds), "id", userIds)); } } ``` 在此处我们运用到了 MyBatis-Plus 的链式调用特性,其中 `.in()` 方法能够方便快捷地指定字段与目标值集匹配的关系[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值