数据库 Dynamic SQL(动态 SQL)指的是在程序运行期间,根据条件动态拼接、生成并执行的 SQL 语句,而不是在代码中写死(静态 SQL)。
SELECT * FROM user WHERE id = 1;
sql = "SELECT * FROM user WHERE 1=1"
if name != null:
sql += " AND name = " + name
if age != null:
sql += " AND age > " + age
✅ 查询条件不确定
✅ 表名、字段名运行时才确定
✅ 需要根据不同业务拼接不同 SQL
✅ 减少大量 if-else 的重复 SQL 编写
SELECT * FROM product
WHERE 1=1
AND category = ?
AND price > ?
条件可能为空,需要动态拼接。
SELECT * FROM table_202501;
表名由时间动态决定。
INSERT INTO user VALUES (?,?),(?,?),(?,?);
插入数量不固定。
使用 <if>、<where>、<foreach> 等标签:
<select id="queryUser">
SELECT * FROM user
<where>
<if test="name != null">
AND name = #{name}
</if>
<if test="age != null">
AND age > #{age}
</if>
</where>
</select>
String sql = "SELECT * FROM user WHERE 1=1";
if (name != null) sql += " AND name = ?";
⚠️ 注意:容易引发 SQL 注入
EXECUTE IMMEDIATE 'SELECT * FROM ' || table_name;
错误示例:
sql = "SELECT * FROM user WHERE name = '" + name + "'";
✅ 正确做法:
Dynamic SQL 就是“运行时拼 SQL”,灵活但需注意安全。
如果你愿意,我可以:
你想深入哪一块?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。