今天工作呀,把这个@Param与@RequestParam的注解混淆了
我今晚在来熟练下:
@Param
背景:
这个注解是@Param是MyBatis所提供的(org.apache.ibatis.annotations.Param),作为Dao层的注解,作用是用于传递参数,从而可以与SQL中的的字段名相对应,一般在2=<参数数<=5时使用最佳。
原始方法
当只有一个参数时,没什么好说的,传进去一个值也只有一个参数可以匹配。当存在多个参数时,传进去的值就区分不开了,可以考虑用Map,例如接口:
- xml的图片
- 测试的代码:
RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
Map<String, Object> parameter = new HashMap<>();
parameter.put("roleName", "剑士");
parameter.put("note", "决战紫禁之巅");
List<Role> roles = roleMapper.findRolesByMap(parameter);
使用的@param后:
- 使用的注解后,差异是不知道这个注解的作用是啥,少了xml的那么的可读性高了,但是这提高了开发的效率,参数的类型上,并且也不能限定其传递的数据类型了。
- 这个我们就可以传入参数了
- 当然也可以使用Java Bean来传递多个参数,定义一个POJO
- 这是接口就是
这样对应的xml文件与1处的区别就在于id和parameterType发生了变化,id对应的方法和parameterType对应该类的权限定名。 - 使用多的场景可以是这样了,对应多个POJO类
这样的xml是:
注意此时并不需要写出parameterType属性,Mybatis会进行自动搜索。
@RequestParam
首先是@RequestParam是springmvc的注解:
@RequestParam:将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)
- 语法:
语法:@RequestParam(value=”参数名”,required=”true/false”,defaultValue=””)
value:参数名
required:是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就报错。
defaultValue:默认参数值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,就使用默认值
步骤1、2、3、参考:SpringMvc入门案例:教程
5、业务处理器HelloController.java
package com.woniuxy.test4;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
/**
* @ Author :ShaoWei Sun.
* @ Date :Created in 20:58 2018/11/16
*/
@Controller
@RequestMapping("hello")
public class HelloController2 {
/**
* 接收普通请求参数
* http://localhost:8080/hello/show16?name=linuxsir
* url参数中的name必须要和@RequestParam("name")一致
* @return
*/
@RequestMapping("show16")
public ModelAndView test16(@RequestParam("name")String name){
ModelAndView mv = new ModelAndView();
mv.setViewName("hello2");
mv.addObject("msg", "接收普通的请求参数:" + name);
return mv;
}
/**
* 接收普通请求参数
* http://localhost:8080/hello/show17
* url中没有name参数不会报错、有就显示出来
* @return
*/
@RequestMapping("show17")
public ModelAndView test17(@RequestParam(value="name",required=false)String name){
ModelAndView mv = new ModelAndView();
mv.setViewName("hello2");
mv.addObject("msg", "接收普通请求参数:" + name);
return mv;
}
/**
* 接收普通请求参数
* http://localhost:8080/hello/show18?name=998 显示为998
* http://localhost:8080/hello/show18?name 显示为hello
* @return
*/
@RequestMapping("show18")
public ModelAndView test18(@RequestParam(value="name",required=true,defaultValue="hello")String name){
ModelAndView mv = new ModelAndView();
mv.setViewName("hello2");
mv.addObject("msg", "接收普通请求参数:" + name);
return mv;
}
}
效果图:
总结
- 1.这个@param是myabtis的注解
@RequestParam是springmvc的注解 - 2这个是写在mapper层了,当参数用,绑定参数传值,是xml的另一种简单写法
而@RequestParam是springmvc的Contoller就是接收请求转发层的注解
语法:@RequestParam(value=”参数名”,required=”true/false”,defaultValue=””)
写在方法的参数里。 - 3@param:将参数绑定到mapper上,
@RequestParam:将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)
不好的请大家多多提出了,谢谢