mybatisplus 批量插入 注解版
时间: 2025-02-03 11:06:26 浏览: 46
### MyBatisPlus 批量插入使用注解实现
为了提高批量插入效率并解决前端请求超时问题,可以采用MyBatisPlus提供的`@InsertProvider`注解来实现自定义SQL语句。这种方式允许更灵活地控制批量插入逻辑。
#### 自定义批量插入方法
创建一个继承于`BaseMapper<T>`的接口,在其中声明带有`@InsertProvider`注解的方法:
```java
public interface UserMapper extends BaseMapper<User> {
@InsertProvider(type = SqlProvider.class, method = "batchInsert")
int batchInsert(@Param("list") List<User> userList);
}
```
上述代码定义了一个名为`batchInsert`的新方法用于处理批量插入操作[^1]。
#### SQL提供者类
接着编写具体的SQL构建逻辑,通常放在单独的一个类里作为静态工具类存在:
```java
import org.apache.ibatis.jdbc.SQL;
import java.util.List;
public class SqlProvider {
public String batchInsert(List<User> list){
return new SQL(){{
INSERT_INTO("users");
INTO_COLUMNS("name", "age");
for (User user : list) {
INTO_VALUES("#{item.name}", "#{item.age}");
}
}}.toString();
}
}
```
这段Java代码片段展示了如何动态生成适合大批量记录插入的SQL语句[^2]。
#### 调用批量插入服务层
最后可以在Service层调用这个新加入的批量插入API:
```java
@Service
public class UserServiceImpl implements IUserService {
private final UserMapper userMapper;
@Autowired
public UserServiceImpl(UserMapper userMapper) {
this.userMapper = userMapper;
}
@Override
public boolean saveUsersInBatch(List<User> users) {
try {
return userMapper.batchInsert(users) > 0 ? true : false;
} catch (Exception e) {
log.error(e.getMessage());
throw new RuntimeException("Failed to insert records.");
}
}
}
```
此部分实现了业务逻辑中的异常捕获以及日志记录功能[^3]。
阅读全文
相关推荐
















