分享知识 传递快乐
组件型注解
@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);
———————————
相互学习,共同进步
如有不足请留言指正