<select id="selectByCommaSeparatedIds" parameterType="map" resultType="..."> SELECT * FROM my_table WHERE FIND_IN_SET(id, #{ids}) > 0</select>优化这段代码
时间: 2023-06-27 11:02:12 浏览: 85
Mybatis动态SQL之if、choose、where、set、trim、foreach标记实例详解
5星 · 资源好评率100%
这段代码使用了 MySQL 中的 FIND_IN_SET 函数,可以在给定的字符串中查找给定值的位置。然而,这个函数的性能并不是很高,因为它需要对字符串进行逐个比较。
一种优化方式是将参数改为数组形式,然后使用动态 SQL 生成 IN 子句。例如,在 Java 中,可以使用 String.join() 方法将数组中的元素连接成字符串,然后将其插入到查询语句中:
```xml
<select id="selectByCommaSeparatedIds" parameterType="map" resultType="...">
SELECT * FROM my_table WHERE id IN
<foreach collection="ids" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</select>
```
这样可以避免使用 FIND_IN_SET 函数,从而提高查询性能。同时,也可以避免 SQL 注入攻击,因为参数的值会被转义。
阅读全文