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怎么接收值