温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何用Dynamic SQL批量

发布时间:2026-09-08 23:16:10 来源:亿速云 阅读:94 作者:小樊 栏目:数据库

你的问题里“批量”后面没说完,我按最常见的几种 Dynamic SQL 批量场景给你一个通用说明,你可以直接对号入座。


一、什么是 Dynamic SQL

Dynamic SQL = SQL 在运行时拼接 / 生成,而不是写死在代码里。
常见用途:

  • 批量插入
  • 批量更新
  • 动态条件查询
  • 批量建表 / 删表

二、MyBatis 中的 Dynamic SQL 批量(最常用)

1️⃣ 批量插入

<insert id="batchInsert">
  INSERT INTO user (name, age)
  VALUES
  <foreach collection="list" item="u" separator=",">
    (#{u.name}, #{u.age})
  </foreach>
</insert>

2️⃣ 批量更新(按条件)

<update id="batchUpdate">
  <foreach collection="list" item="u" separator=";">
    UPDATE user
    SET age = #{u.age}
    WHERE id = #{u.id}
  </foreach>
</update>

⚠️ 需要开启:

allowMultiQueries=true

3️⃣ 动态条件批量查询

<select id="query">
  SELECT * FROM user
  WHERE 1=1
  <if test="ids != null">
    AND id IN
    <foreach collection="ids" item="id" open="(" close=")" separator=",">
      #{id}
    </foreach>
  </if>
</select>

三、Java 原生(手动拼 SQL)

StringBuilder sql = new StringBuilder("INSERT INTO user VALUES ");
for (User u : list) {
    sql.append("('").append(u.getName()).append("'),");
}

⚠️ 容易 SQL 注入,不推荐


四、存储过程里的 Dynamic SQL(MySQL

SET @sql = 'DELETE FROM log WHERE create_time < ?';
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

五、你可能是想问哪一种?

你可以直接告诉我:

  • 批量插入 / 更新 / 删除?
  • 用 MyBatis / JDBC / JPA / 存储过程?
  • 数据库是 MySQL / Oracle / PostgreSQL?

我可以给你完整可直接用的示例

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI