我是关于myBatis的新手,我需要在我的查询中放置where语句。
我的映射器以这种方式定义:
<select id="findMyTableByWhereCondition" parameterType="map" resultMap="mytable">
SELECT *
FROM mytable m
<where>#{whereCondition}</where>
</select>
我的道:
public List<MyTalbe> findMyTableByWhereCondition(String whereCondition) {
Map<String, Object> param = new HashMap<String, Object>();
param.put("whereCondition", "m.name = 'Test' and m.surname= 'Test'");
return sqlSession.selectList("findMyTableByWhereCondition", param );
}
当尝试执行此查询时,我得到“无效的关系运算符”。处理此类查询的最佳做法是什么?我需要在“where”上替换它,因为这可能会经常变化,甚至可能非常复杂。
提前致谢
答案 0 :(得分:0)
尝试使用${...}
引用参数whereCondition
:
<select id="findMyTableByWhereCondition" parameterType="map" resultMap="mytable">
SELECT *
FROM mytable m
<where>${whereCondition}</where>
</select>
文件写道:
默认情况下,使用#{}语法将导致MyBatis生成PreparedStatement属性,并根据PreparedStatement参数(例如?)安全地设置值。虽然这更安全,更快速且几乎总是首选,但有时您只想将未修改的字符串直接注入SQL语句。例如,对于ORDER BY,您可以使用以下内容:
ORDER BY ${columnName}
这里MyBatis不会修改或转义字符串。
注意: 使用$
会导致SQL注入攻击,您最好从官方文档中读取Dynamic SQL并尝试构建类似的SQL这一点。