SSM框架中Mybatis传递参数的几种方法

在实际使用SSM框架进行开发过程中,经常涉及到请求参数的传递,今将项目中常用的几种传值方法进行总结。

总体内容

总体内容

传递单个参数

传递单个参数的方法比较简单,咱们直接上代码。
本文以根据用户名查询用户为例:
Dao层:

List findByUsername (String username);

mapper.xml:


传递多个参数

以根据用户名和密码查询用户为例:

匿名传参法

Dao层:

User selectByUsernamePwd(String username,String pwd );

mapper.xml:
有两种方式:


或者


上述方法可读性不好,不推荐使用。

@Param传参法

该方法使用@Param注解显示的告诉mybatis参数的名字,然后在xml中就可以使用参数名去引用。
Dao层:

User selectByUsernamePwd(@Param("username") String username, 
   @Param("pwd") String pwd );

mapper.xml:


Map传参法

使用map来传递多个参数,可以直接使用参数名称进行引用。
在使用该方法进行传递参数的时候,需在controller层将接收到的参数转化成HashMap类型。
Controller层:

@GetMapping("selectByUsernamePwd")
public viod selectByUsernamePwd (String username,String pwd)
{
    Map params = new HashMap<>();
    params.put("username",username);
    params.put("pwd",pwd);
    User user = user. selectByUsernamePwd (params);
}

Dao层:

User selectByUsernamePwd(Map params);

mapper.xml:


实体类传参法

使用bean的方式来传递多个参数,使用时parameterType指定为对应的bean类型即可。
这就传参方式的优点是比较方便,controller层使用@RequestBody接收到实体类参数后,直接传递给mapper层调用即可,不需要在进行参数的转换。
controller层:

@PostMapping ("selectByUsernamePwd")
public viod selectByUsernamePwd (@RequestBody User user)
{
    User user = user. selectByUsernamePwd (user);
}

Dao层:

User selectByUsernamePwd(User user);

mapper.xml:


JSON传参法

使用该方法,controller层收到JSON型数据后,直接传递给Dao层进行查询操作,简单、方便。
controller层:

@PostMapping ("selectByUsernamePwd")
public viod selectByUsernamePwd (@RequestBody JSONObject user)
{
    User user = user. selectByUsernamePwd (user);
}

Dao层:

User selectByUsernamePwd(JSONObject user);

mapper.xml:


集合传参法

在一些复杂的查询中(如 sql中的 in操作),传统的参数传递已无法满足需求,这时候就要用到List、Set、Array类型的参数传递,下面以查询年龄为24,35,47岁的用户为例:
controller层:

@PostMapping ("selectByUserByAges")
public List selectByUserByAges (@RequestBody List ages)
{
List users = user. selectByUserByAges (ages);
return users;
}

Dao层:

List selectByUserByAges(List ages);

mapper.xml:


这里foreach表示循环操作,具体的参数含义如下:
foreach元素的属性主要有 item,index,collection,open,separator,close。item表示集合中每一个元素进行迭代时的别名,index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔符,
close表示以什么结束
在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的,主要有一下3种情况:
1.如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
2.如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
3.如果传入的参数是多个的时候,我们就需要把它们封装成一个Map或者Object

集合+对象传参法

该类参数与实体类传参法类似,只不过更复杂一些。下面以班级、学生为例进行说明:
实体类:

@Data
public class Class{
    private Long id;

    private String className;

    List students;
}

controller层:

@PostMapping("selectClass")
public List selectClass (@RequestBody Class class)
{
    List result= class.selectClass (class);
    return result;
}

Dao层:

List  selectClass (@Param("class")Class class);

mapper.xml:


你可能感兴趣的:(SSM框架中Mybatis传递参数的几种方法)