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

Posted 伊甸园

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于mybatis中的查询语句in用法的相关问题的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis中动态sql的模糊搜索foreach实现In集合的用法

select-sql语句in的用法,在mybatis中sql中in是怎么用的

mybatis sql in 查询(mybatis sql语句传入参数是list)mybatis中使用in查询时in怎么接收值

Mybatis 中 foreach 用法

Mybatis使用IN语句查询(模糊查询)

Mybatis使用IN语句查询(模糊查询)