动态SQL之<foreach>

发布时间 2023-08-15 14:31:37作者: 九段教会

举例说明

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);
        }
    }
}