晋南讲堂之持久层框架Mybatis—(六)mybatis的参数处理

1.单个参数

  当传递单个参数的时候,则#{}里的值可以随意写,如下所示,就算写成idefb它也能正确传输数据。
在这里插入图片描述
晋南讲堂之持久层框架Mybatis—(六)mybatis的参数处理_第1张图片
在这里插入图片描述

1.多个参数

  在EmployeeMapper.java接口中新增如下抽象方法用以测试mybatis如何处理多个参数:
晋南讲堂之持久层框架Mybatis—(六)mybatis的参数处理_第2张图片
  mybatis会把多个参数封装成一个map,它的key是从param1,param2,…paramN,或者arg0,arg1,…,argN-1,而value就是我们要传入的参数的值,即#{ }就是从map中获取指定key的value。sql映射文件如下所示:
在这里插入图片描述
  或者采用如下的形式:
在这里插入图片描述
  都能得到如下的正确结果,测试类中的代码如下:
晋南讲堂之持久层框架Mybatis—(六)mybatis的参数处理_第3张图片
晋南讲堂之持久层框架Mybatis—(六)mybatis的参数处理_第4张图片
  但是采用arg0,arg1,param1,param2这种方式是不直观的,有的时候参数过多导致不好区分,所以推荐采用命名参数的方式,可以明确的指定map中的key。在接口的抽象方法中的形参列表里采用注解“@Param(" ")”来给参数命名。如下所示:
晋南讲堂之持久层框架Mybatis—(六)mybatis的参数处理_第5张图片
  则相应的sql映射文件中#{ }中的值可以改成如下,这样看起来可达到见名知意的效果。
在这里插入图片描述
  如果JavaBean中的参数特别多,则接口中的抽象方法的签名看起来很长:
晋南讲堂之持久层框架Mybatis—(六)mybatis的参数处理_第6张图片
  如果多个参数正好是业务逻辑的数据模型,就可以直接传入POJO,则用**#{属性名}**可以直接取出传入的POJO的属性值。如下示例:
晋南讲堂之持久层框架Mybatis—(六)mybatis的参数处理_第7张图片
在EmployeeMapper.java接口中新增抽象方法:
晋南讲堂之持久层框架Mybatis—(六)mybatis的参数处理_第8张图片
MybatisTest.java新增测试方法:
晋南讲堂之持久层框架Mybatis—(六)mybatis的参数处理_第9张图片
在EmployeeMapper.xml中新增如下代码:


则可以取用POJO里的一个属性或者多个属性去取数据库中的对应的值,但大括号里面的变量名必须和POJO里一致,否则报错。
  如果多个参数不是业务模型中的数据。没有对应的POJO,为了方便,也可以传入map。#{key}用来取出map中对应的值。

你可能感兴趣的:(ORM框架---Mybatis,mybatis,ORM,参数)