You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将MySQL中的SELECT语句转换为Java可传入id参数的查询语句?

MySQL模糊查询转Java动态参数实现方案

以下是两种常用场景的实现方式,均可以避免SQL注入风险,支持动态传入id参数:

1. 原生JDBC实现

  • 核心思路是预编译SQL用占位符,参数赋值阶段拼接模糊匹配规则,不要直接把参数拼接到SQL字符串中
// 1. 定义预编译SQL模板
String sql = "select * from tbl_user where path like ?";
// 2. 获取动态传入的id参数
Long id = 1001L;
// 3. 拼接模糊查询需要的前后缀格式
String likeParam = "%," + id + ",%";
// 4. 预编译赋值执行
PreparedStatement pstmt = connection.prepareStatement(sql);
pstmt.setString(1, likeParam);
ResultSet rs = pstmt.executeQuery();

注意:直接拼接id到SQL字符串会存在SQL注入漏洞,禁止使用该写法

2. MyBatis实现

注解写法

@Select("select * from tbl_user where path like concat('%,', #{id}, ',%')")
List<TblUser> queryUserByPathId(@Param("id") Long id);

XML写法

<select id="queryUserByPathId" resultType="com.example.domain.TblUser">
  select * from tbl_user where path like concat('%,', #{id}, ',%')
</select>

如果使用的MySQL版本不支持多参数concat函数,也可以在业务层提前拼接好参数再传入Mapper:

// 业务层拼接模糊查询参数
String likeParam = "%," + id + ",%";
// 调用Mapper方法
List<TblUser> userList = mapper.queryUserByPathId(likeParam);

对应简化后的Mapper SQL:

<select id="queryUserByPathId" resultType="com.example.domain.TblUser">
  select * from tbl_user where path like #{likeParam}
</select>

内容的提问来源于stack exchange,提问作者bin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 04:06:08