码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-08-11 13:26:30      阅读:556      评论:0      收藏:0      [点我收藏+]

标签:传递   class   parameter   cto   isl   例子   编译   参数   替换   

  在开发的时候,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用法的相关问题

标签:传递   class   parameter   cto   isl   例子   编译   参数   替换   

原文地址:http://www.cnblogs.com/javJoker/p/7345318.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!