Mybatis接收参数的几种方式总结

Mybatis接收参数的几种方式总结

96PandoraHearts 关注

2018.06.12 09:22 字数 286 阅读 950评论 1喜欢 9

当Mybatis中只有一个基本类型参数时,只能够使用 #{参数名} 来取参数,而不能够直接使用 ${参数名} 来取参数,否则会报错,如下:

mapper interface:

public interface Works1Mapper extends Mapper<Works1> {

   List<Works1> batSelect(String ids);
}

mapper xml

<select id="batSelect" parameterType="java.lang.String" resultMap="BaseResultMap">
      select * from works1 WHERE id in (#{ids}) 
      select * from works1 WHERE id in (${ids})  //这样会报错
  </select>

如果必须使用 ${ids} 的话

1.可以使用 ==_parameter== 作为替代。

(注:mybatis中内置了 ==_parameter== 参数来代替参数名)

正确的写法是:

<select id="batSelect" parameterType="java.lang.String" resultMap="BaseResultMap">
      select * from works1 WHERE id in (${_parameter})
  </select>

2.使用 @Param 注解

当使用了 @Param 注解时,${ids} 和 #{ids} 都可以使用

mapper interface:

public interface Works1Mapper extends Mapper<Works1> {

   List<Works1> batSelect(@Param("ids")String ids);
}

mapper xml

<select id="batSelect" parameterType="java.lang.String" resultMap="BaseResultMap">
      //都不会报错
      select * from works1 WHERE id in (#{ids}) 
      select * from works1 WHERE id in (${ids})  
  </select>

@Param注解也可以给参数起别名,例如:

public interface Works1Mapper extends Mapper<Works1> {

   List<Works1> batSelect(@Param("aaaaa") String ids);
}
<select id="batSelect" parameterType="java.lang.String" resultMap="BaseResultMap">
      select * from works1 WHERE id in (${aaaaa})
  </select>

3.获取对象中的值

如果传入的参数类型为JavaBean对象,那么获取值有两种方式

mapper interface:

public interface Works1Mapper extends Mapper<Works1> {

   List<Works1> batSelect(Works1 works);
}

第一种,直接使用对象内的属性取值,如Works1对象中有个id属性.这时候#{}和${}都不会报错

<select id="batSelect" parameterType="com.company.project.model.Works1" resultMap="BaseResultMap">
      //都不会报错
      select * from works1 WHERE id in = #{id} 
      select * from works1 WHERE id in = ${id}  
  </select>

第二种,使用@Param注解

public interface Works1Mapper extends Mapper<Works1> {
   List<Works1> QueryAllByBean(@Param("wk") Works1 works);
}
<select id="QueryAllByBean"  resultMap="BaseResultMap">
      select * from works1 where id = #{wk.id};
  </select>

4.#{} 和 ${} 的区别

用#{}取值时会默认加上双引号 ' '

order by 'name' desc

用${}取值则不会转义,而是会原样输出

order by name desc

由于${}有可能会引起Sql注入问题,所以尽量使用#{}

猜你喜欢

转载自blog.csdn.net/f45056231p/article/details/88844394
今日推荐