SpringMVC常用注解

分享知识 传递快乐

 

组件型注解

@Controller

用于控制层注解,在SpringMVC中,控制器Controller负责处理由DispatcherServlet分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。注解到类名上,表示该类是控制器。

@Service

用于对业务逻辑层进行注解。

@Repository

用于注解dao层,一般用于DAO的实现类上。

@Component

在类定义之前添加@Component注解,他会被spring容器识别,并转为bean。相当于通用的注解,当不知道一些类归到哪个层时使用,但是不建议。

以上四种注解都是注解在类上的,被注解的类将被spring初始话为一个bean,然后统一管理。

 


请求和参数型注解

@RequestMapping

用于处理请求地址映射,可以作用于类和方法上,表示访问请求该方法时的url。

RequestMapping注解有六个属性:

  • value:指定请求的实映射地址;
  • method:指定请求的method类型,GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE等,默认接受get请求;
  • consumes:指定处理请求的提交内容类型(Content-Type),例如application/json,text/html;
  • produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
  • params:指定request中必须包含某些参数值。
  • headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。
@Controller
@RequestMapping ( "/myTest" )
public class MyController {
	@RequestMapping(value="/myIndex.do",params = {"name=myindex"},headers = {"Accept-Encoding=gzip, deflate, br"},method = RequestMethod.GET)
    public String myIndex() {
       System. out .println( "my index" );
       return "index" ;
    }  
}

@Resource和@Autowired

@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。

  • 共同点:两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。
  • 不同点:@Autowired为Spring提供的注解,按照byType注入。@Resource默认按照ByName自动注入,也可以按byType注入。

@Resource装配顺序:

  • 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。
  • 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。
  • 如果指定了type,则从上下文中找到类似匹配的唯一bean进行装配,找不到或是找到多个,都会抛出异常。
  • 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。

@Resource的作用相当于@Autowired,只不过@Autowired按照byType自动注入。

 

@RequestParam

用于获取传入参数的值。属性:

  • value:参数的名称
  • required:定义该传入参数是否必须,默认为true,(和@RequestMapping的params属性有点类似)
@RequestMapping("/requestParams1.do")
public String requestParams1(@RequestParam(required = false) String name){
	System.out.println("name = "+name);
	return "index";
}
@RequestMapping("/requestParams2.do")
public String requestParams2(@RequestParam(value = "name",required = false) String names){
	System.out.println("name = "+names);
	return "index";
}

@PathVariable

用于将请求URL中的模板变量映射到方法的参数上,即取出url模板中的变量作为参数。属性:

  • value:参数的名称
  • required:定义传入参数是否为必须值
@Controller  
public class TestController {  
     @RequestMapping(value="/user/{userId}/roles/{roleId}",method = RequestMethod.GET)  
     public String getLogin(@PathVariable("userId") String userId,  
         @PathVariable("roleId") String roleId){  
         System.out.println("User Id : " + userId);  
         System.out.println("Role Id : " + roleId);  
         return "hello";  
     }  
     @RequestMapping(value="/product/{productId}",method = RequestMethod.GET)  
     public String getProduct(@PathVariable("productId") String productId){  
           System.out.println("Product Id : " + productId);  
           return "hello";  
     }
}

@ResponseBody

作用于方法上,可以将整个返回结果以某种格式返回,如json或xml格式。

@CookieValue

用于获取请求的Cookie值。

@RequestMapping("/requestParams.do")
public String requestParams(@CookieValue("JSESSIONID") String cookie){
	return "index";
}

@ModelAttribute和 

用于把参数保存到model中,@ModelAttribute可注解方法或参数。

注解在方法上:该方法将在处理器方法执行之前执行,然后把返回的对象存放在 session(前提时要有@SessionAttributes注解)或模型属性中,@ModelAttribute(“attributeName”) 在标记方法的时候指定,若未指定,则使用返回类型的类名称(首字母小写)作为属性名称。

@ModelAttribute("user")
public UserEntity getUser(){
	UserEntity userEntityr = new UserEntity();
	userEntityr.setUsername("asdf");
	return userEntityr;
}

@RequestMapping("/modelTest.do")
public String getUsers(@ModelAttribute("user") UserEntity user){
	System.out.println(user.getUsername());
	return "/index";
}

@SessionAttributes

即将值放到session作用域中,写在class上面。可以使得模型中的数据存储一份到session域中。配合@ModelAttribute("user")使用的时候,会将对应的名称的model值存到session中。

@Controller
@RequestMapping("/test")
@SessionAttributes(value = {"user","test1"})
public class LoginController{
    @ModelAttribute("user")
    public UserEntity getUser(){
        UserEntity userEntityr = new UserEntity();
        userEntityr.setUsername("asdf");
        return userEntityr;
    }

    @RequestMapping("/modelTest.do")
    public String getUsers(@ModelAttribute("user") UserEntity user ,HttpSession session){
        System.out.println(user.getUsername());
        System.out.println(session.getAttribute("user"));
        return "/index";
    }
}

注意:加了@SessionAttributes注解时,第一次session中不存在值,第二次请求的时候session中才会有值。这是因为第一次请求时,model数据还未保存到session中请求结束返回的时候才保存,在第二次请求的时候已经可以获取上一次的model了。

@Transactional

用于在方法上对该方法添加事务。

@Param

作用是在DAO层给参数命名。

实例一:

dao层示例

Public User selectUser(@param(“userName”) String name, @param(“userpassword”) String password);

xml映射对应示例

<select id=" selectUser" resultMap="BaseResultMap">  
    select  *  from user_user_t 
        where user_name = #{userName,jdbcType=VARCHAR} and user_password=#{userPassword,jdbcType=VARCHAR}  
</select>

实例二:

dao层springboot中使用

@Query(value="UPDATE DS_IPAY_PAY T SET T.PAY_STATUS = :payStatus WHERE T.status = 1 and T.BILL_ID = :billId",nativeQuery = true)
public void update(@Param("billId") Long billId,@Param("payStatus") Integer payStatus);

 

 

 

 

 

 

 

 

———————————
相互学习,共同进步
如有不足请留言指正

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旷野历程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值