mybatis中的查询语句in用法的相关问题

  在开发的时候,mybatisl中使用in的时候会遇到一些问题,如果我们传的参数是String类型,以“,”来进行隔开的,例如:参数是0,1,2字符串,mybatis中的语句如下

 <select id="findByName" parameterType="string" resultType="com.domain.Factory">
   SELECT * FROM FACTORY WHERE ID IN (#{ids})
 </select>

如果用#{}来传递参数的话,执行sql语句的时候mybatis的时候它会解析为

SELECT * FROM FACTORY WHERE ID IN ('0,1,2')

分析:mybatis中传入的参数它会自动加上‘’把它包裹起来解析成字符串,而我们希望的sql语句是下面的:

SELECT * FROM FACTORY WHERE ID IN (0,1,2)

我们可以使用${}来传递参数可以实现上面的sql语句。

 

#{}: 解析为一个 JDBC 预编译语句(prepared statement)的参数标记符,一个 #{ } 被解析为一个参数占位符 。

${}: 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换。

注意:${}有sql注入的危险

在mybatis中运用in语句的时候,如果传递的参数是String类型的,例子如上面的情况,可以使用${}来解析传递的参数,但是用这种方法有sql注入的危险。也可以把传递的参数改为Array、List类型,详情请看http://www.cnblogs.com/xusir/archive/2013/07/24/3210286.html里面有介绍。

 

  其实,我们在使用模糊查询的时候也可以使用${}来解析,例子如下:

<select id="findByName" parameterType="string" resultType="com.domain.Factory">
     SELECT * FROM FACTORY WHERE NAME LIKE "%${parameter}%"
</select>

eg.

  select id,name from student where name=#{name}   -- name='ha'

       select id,name from student where name=${name}    -- name=ha

模糊查询这是一种方法,还有一种方法见:http://www.cnblogs.com/javJoker/p/7260195.html

posted @ 2017-08-11 12:22  壹尘  阅读(505)  评论(0编辑  收藏  举报