mybatis中if标签的使用

如下,程序不走if标签。想要实现type为空不走where语句,type为0,1,2时走my_type=#{type},type=3时走my_type为0,1

img

把判断语句中的=改成==

根据你提供的代码和描述,我猜测你的问题可能出在 SQL 语句拼接上。

在拼接 SQL 语句时,我们应该使用占位符(placeholder)来代替变量,然后将变量的值作为参数传递给 SQL 执行函数,以避免 SQL 注入等安全问题。在你的代码中,使用字符串拼接的方式将变量 type 直接嵌入 SQL 语句中,这个方法不仅容易出现语法错误,也存在 SQL 注入的风险。

另外,在 SQL 语句中,如果使用 = 进行比较时,需要使用单引号将字符类型的值括起来。因此,当 type 的值为 0、1 或 2 时,my_type=#{type} 应该改为 my_type='#{type}'。

以下是修改后的代码:

def my_query
  type = params[:type]
  cond = ""
  args = []
  if type.present?
    if type.to_i == 3
      cond = "AND my_type IN (0, 1)"
    elsif type.to_i >= 0 and type.to_i <= 2
      cond = "AND my_type=#{type}"
    end
  end
  sql = "SELECT * FROM my_table WHERE 1=1 #{cond}"
  @result = ActiveRecord::Base.connection.execute(sanitize_sql([sql, *args]))
end

回答整理自chatgpt,如果有帮助麻烦采纳一下,谢谢啦!