MyBasis批量插入(foreach)
比如批量插入 user,我们先创建 DAO 方法
What is DAO?
DAO(Data Access Object) 模型就是写一个类,把访问数据库的代码封装起来,DAO在数据库与业务逻辑(Service)之间。Dao是数据访问层,Dao的作用是封装对数据库的访问:增删改查,不涉及业务逻辑,只是达到按某个条件获得指定数据的要求。
package com.youkeda.comment.dao;
import com.youkeda.comment.dataobject.UserDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.time.LocalDateTime;
import java.util.List;
@Mapper
public interface UserDAO {
int batchAdd(@Param("list") List<UserDO> userDOs);
}
我们来看一下 foreach 语法
<insert id="batchAdd" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id">
INSERT INTO user (user_name, pwd, nick_name,avatar,gmt_created,gmt_modified)
VALUES
<foreach collection="list" item="it" index="index" separator =",">
(#{it.userName}, #{it.pwd}, #{it.nickName}, #{it.avatar},now(),now())
</foreach >
</insert>
foreach 相当于执行了 Java 的 for 循环,它有几个属性
- collection 指定集合的上下文参数名称,比如这里的 list,对应的是
@Param("list")
- item 指定遍历中的每一个数据的变量,一般我们用 it 命名,所以就可以使用
it.userName
这种获取具体的值啦 - index 集合的索引值,从0开始
- separator 遍历每条记录并添加分隔符
上面的 SQL 最终执行会变成
INSERT INTO user (user_name, pwd, nick_name,avatar,gmt_created,gmt_modified)
VALUES
(?, ?, ?,?,now(),now()),
(?, ?, ?,?,now(),now()),
(?, ?, ?,?,now(),now())
MyBatis 会自动优化最后一个 ,
确保 SQL 是正确的。
批量插入在实际工作场景中使用的是非常多,我们用好 foreach 语句即可,有的时候面试官也会问批量插入的问题
MyBasis批量查询(SQL in;Foreach)
还是先创建 DAO 方法
package com.youkeda.comment.dao;
import com.youkeda.comment.dataobject.UserDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.time.LocalDateTime;
import java.util.List;
@Mapper
public interface UserDAO {
List<UserDO> findByIds(@Param("ids") List<Long> ids);
}
然后,我们再完善 SQL XML
<select id="findByIds" resultMap="userResultMap">
select * from user
<where>
id in
<foreach item="item" index="index" collection="ids"
open="(" separator="," close=")">
#{item}
</foreach>
</where>
</select>
这里多了两个参数
-
open
表示的是节点开始时自定义的分隔符
-
close
表示的是节点结束时自定义的分隔符
上面的 SQL 执行后会变成
select * from user where id in (?,?,?)
标签:XML,DAO,Param,3.2,user,SQL,MyBatis,import,now
From: https://www.cnblogs.com/T-double/p/18522962