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

平时使用mybatis的过程中,总是记不住。有时候复制粘贴又来的麻烦,记录一下。

当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>

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注解也可以给参数起别名,例如:

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注入问题,所以尽量使用#{}

https://blog.csdn.net/f45056231p/article/details/88844394

标签: none

相关阅读

  • 测试信息
  • 开发商:阿里巴巴
  • 版本号:1.0
  • 配色:(企业家)” 推选活动结果
  • 测试信息
  • 测试信息
  • 测试信息