要防止 MyBatis 中的 SQL 注入,可以通過以下方式來動態構建表名:
public interface MyMapper {
List<MyEntity> selectByTableName(@Param("tableName") String tableName);
}
<select id="selectByTableName" resultType="MyEntity">
SELECT * FROM ${tableName}
</select>
<select id="selectByTableName" resultType="MyEntity">
<choose>
<when test="tableName == 'table1'">
SELECT * FROM table1
</when>
<when test="tableName == 'table2'">
SELECT * FROM table2
</when>
<otherwise>
SELECT * FROM defaultTable
</otherwise>
</choose>
</select>
這樣可以確保表名參數不會被直接拼接到 SQL 語句中,并且對傳入的表名進行了校驗和處理,從而防止 SQL 注入攻擊。