- Mybatis中的@param注解的使用场景:
- 问题1:动态sql中参数是非自定义pojo类型不使用@param注解会怎么样?
- 问题2:动态sql中参数是非自定义pojo类型使用@param注解有什么作用,为什么就解决了报错
1、方法有多个参数
2、方法参数要取别名
3、XML 中的 SQL 使用了 $
4、动态sql中参数是非自定义pojo类型
当方法的参数为非自定义pojo类型,且使用了动态sql,需要在参数前加上@Param注解。
问题1:动态sql中参数是非自定义pojo类型不使用@param注解会怎么样?不使用时报错:here is no getter for property named ‘name’ in 'class (非自定义pojo类没有目标属性的get方法)
问题2:动态sql中参数是非自定义pojo类型使用@param注解有什么作用,为什么就解决了报错mybatis处理参数的源码
public Object getNamedParams(Object[] args) {
final int paramCount = names.size();
//1、参数为null直接返回
if (args == null || paramCount == 0) {
return null;
//2、如果只有一个元素,并且没有Param注解;args[0]:单个参数直接返回
} else if (!hasParamAnnotation && paramCount == 1) {
return args[names.firstKey()];
//3、多个元素或者有Param标注
} else {
final Map param = new ParamMap
总结:使用@Param时会封装map,map.entry可以get map的key/value键值对,有了目标属性的get方法,解决了报错



