Mybatis传递多个参数的几种方式

Mybatis传递多个参数的几种方式:

方法1:顺序传参法

public User selectUser(String name, int age);

#{}里面的数字代表你传入参数的顺序

这种方法不建议使用,sql层表达不直观,且一旦顺序调整容易出错。

 

方法2:@Param注解传参法

public User selectUser(@Param("userName") String name, @Param("userAge") int age);


#{}里面的名称对应的是注解@Param括号里面修饰的名称

这种方法在参数不多的情况还是比较直观的,推荐使用。

 

方法3:Map传参法

把接口的形参改为Map

// 接口
public interface UserMapper {
    public User selectUser(Map params);
}

 把需要的参数封装在map中

Map params = new HashMap();
params.put("userName", "lelly110");
params.put("age", 32);

XMl查询


#{}里面的名称对应的是Map里面的key名称。

这种方法适合传递多个参数,且参数易变能灵活传递的情况。

方法4:Java Bean传参法

//实例化user对象并赋值

private String userName;

private int age;

User user = new User();

user.setUserName = "123";

user.setAge = 22;
//接口方法

public User selectUser(User user);
//xml查询

#{}里面的名称对应的是User类里面的成员属性

这种方法很直观,但需要建一个实体类,扩展不容易,需要加属性,看情况使用。

方法五:

selectList()只能传递一个参数,但实际所需参数既要包含String类型,又要包含List类型时的处理方法:

将参数放入Map,再取出Map中的List遍历。如下:

List list_3 = new ArrayList(); Map map2 = new HashMap(); list.add("1");

list.add("2");
map2.put("list", list); //网址id

map2.put("siteTag", "0");//网址类型
 
public List getSysInfo(Map map2) {
  return getSqlSession().selectList("sysweb.getSysInfo", map2);
}

拓展(接口中传入参数的各种情况)

5.1 当只有一个参数时

使用arg0,param1获得参数是一直有效的,但是个人不推荐这样做,毕竟看起来不优雅


5.1.1 参数是基本类型

xml中标签内的变量名可以随便写,#{id},#{ids},#{123},#{xxgdsgdg},等都可以获得到参数。

5.1.2 参数是javabean

xml中标签内直接填写Javabean中的属性名

5.1.3 参数是数组

使用array获得参数,再用foreach循环

5.1.4 参数是List

使用list或collection获得参数,再用foreach循环

5.1.5 参数是Set

使用collection获得参数,再用foreach循环

5.2 当有多个参数时

使用argN、paramN或@param定位到某个参数,再使用ognl就ok了。比如#{user.name}、#{users[0].name}。
 

 

你可能感兴趣的:(mybatis)