用了@Param(“param”) ,那么@Param里的值"param" 就要用在sql语句里。建议 写成 @Param(“name”) String name ,@Param里的name和入参变量名保存一致。方便看代码。实际上sql里的name 就是@Param(“name”) 里的name。
如果 入参是Param 类,List getGoods(@Param(“param”) Param param); Param 类里有属性name, 动态sql用@Param(“param”)里的 param.属性
写法一:用if标签判断传入的变量是否为null或空字符串(传的是" "那就不加上if标签里的条件)
String name = null;
list2 = goodsMapper.getGoods(name);
List getGoods(@Param(“param”) String name);
select
*
from goods
where data_status = ‘0’
and good_name = #{param}
sql日志:select *from goods where data_status = ‘0’
如果是 List getGoods(@Param(“id”) String name); sql语句里要是(@Param(“id”) 里的id才不报错
select
*
from goods
where data_status = ‘0’
and good_name = #{id}
写法二:不用if标签判断传入的变量是否为null或空字符串
建议 写成 @Param(“name”) String name ,方便看代码。实际上sql里的name 就是@Param(“name”) 里的name。
List getGoods(@Param(“name”) String name);
select
*
from goods
where data_status = ‘0’
and good_name = #{name}
如果传入的 String name = null ,不报错,打出的sql日志:
select* from goods where data_status = ‘0’ and good_name = null 什么都查不出
成功
写法三:不用 @Param(“name”)
List getGoods(String name);
select
*
from goods
where data_status = ‘0’
and good_name = #{name}
成功
4、sql里的name 要是@Param(“name”) 里的name
List getGoods(@Param(“param”) String name);
select
*
from goods
where data_status = ‘0’
and good_name = #{param}
成功,不报错。
错误写法:
5、报错
List getGoods(@Param(“param”) String name);
<select id="getGoods" resultMap="BaseResultMap">
select
*
from goods
where data_status = '0'
and good_name = #{name}
</select>
报错:
org.apache.ibatis.binding.BindingException: Parameter ‘name’ not found. Available parameters are [param, param1]
6、报错
List getGoods(@Param(“param”) String name);
select
*
from goods
where data_status = ‘0’
and good_name = #{param.name}
报错 org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘name’ in ‘class java.lang.String’
写成 and good_name = #{name.name} 也是报这个错