public User selectUser(String name, int age);
#{}里面的数字代表你传入参数的顺序。
这种方法不建议使用,sql层表达不直观,且一旦顺序调整容易出错。
public User selectUser(@Param("userName") String name, @Param("userAge") int age);
#{}里面的名称对应的是注解@Param括号里面修饰的名称。
这种方法在参数不多的情况还是比较直观的,推荐使用。
把接口的形参改为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名称。
这种方法适合传递多个参数,且参数易变能灵活传递的情况。
//实例化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}。