Mybatis接收参数的几种方式总结
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注入问题,所以尽量使用#{}