动态SQL之<foreach>
举例说明
public class User {
private Long id;
private String username;
private String email;
// 构造器、getter 和 setter 方法省略
}
public interface UserMapper {
void batchInsertUsers(@Param("users") List<User> users);
}
<insert id="batchInsertUsers" useGeneratedKeys="true" keyProperty="users.id" parameterType="java.util.List">
INSERT INTO users (username, email)
VALUES
<foreach collection="users" item="user" separator=",">
(#{user.username}, #{user.email})
</foreach>
RETURNING id
</insert>
public class MyApp {
public static void main(String[] args) {
SqlSessionFactory sessionFactory = MyBatisUtil.getSqlSessionFactory();
try (SqlSession session = sessionFactory.openSession()) {
UserMapper userMapper = session.getMapper(UserMapper.class);
List<User> users = new ArrayList<>();
users.add(new User("user1", "user1@example.com"));
users.add(new User("user2", "user2@example.com"));
users.add(new User("user3", "user3@example.com"));
userMapper.batchInsertUsers(users);
// 获取插入后的主键列表
List<Long> generatedKeys = new ArrayList<>();
for (User user : users) {
generatedKeys.add(user.getId());
}
System.out.println("Generated keys: " + generatedKeys);
}
}
}