MyBatis:dinamic where condition

时间:2017-05-15 09:27:39

标签: java sql mybatis

我是关于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”上替换它,因为这可能会经常变化,甚至可能非常复杂。

提前致谢

1 个答案:

答案 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这一点。