SpringMVC常用注解有哪些

前言:
本次注解分3层讲解,先说明注解的用途,然后有对应层次的完整代码,代码中有对应的注解的实战用法(含详细注释)
本次所讲的层级结构截图:
SpringMVC常用注解有哪些_第1张图片

一.domian(实体类)

lombok家族注解用于实体类,帮助简化实体类的编写。

  1. @Setter
    用于实体类,自动生成setter方法
  2. @Getter
    用于实体类,自动生成getter方法
  3. @ToString
    用于实体类,自动重写toString()方法,返回所有属性变量名和变量值。
  4. @EqualsAndHashCode
    自动生成 equals(Object other) 和 hashcode() 方法,包括所有非静态变量和非 transient 的变量
  5. @AllArgsConstructor
    用于实体类,生成一个包含所有参数的构造器
  6. @NoArgsConstructor
    用于实体类,生成一个无参的构造器
  7. @RequiredArgsConstructor
    生成一个包含 “特定参数” 的构造器,特定参数指的是那些有加上 final 修饰词的变量们;
    如果所有的变量都是正常的,都没有用 final 修饰的话,那就会生成一个没有参数的构造器
  8. @Data
    整合包,只要加了 @Data 这个注解,等于同时加了以下注解:
    @Getter
    @Setter
    @ToString
    @EqualsAndHashCode
    @RequiredArgsConstructor

实体类例子:
domain包中的类:
在这里插入图片描述
Hero类完整代码:

package com.ysw.springboot01.domain;

import lombok.Data;

@Data
public class Hero {

    private int id;
    private String name;
    private int age;
    private String sex;
    private long price;
    private int type_id;

}

二.mapper层注解

  1. @Select("sql语句")
    mybatis家族注解,非spring家族注解,在mybatis中,mybatis的前身是ibatis。
    作用:自动把注解封装成jdbc里的sql语句,把sql提取出来,到数据库中查,查完以后把查询出的结果集封装到java对象中。

  2. @Mapper
    用在接口类上,在编译之后会生成相应的接口实现类,是mybatis的注解。
    位置:对应的某个接口类上面

  3. @Repository
    @Repository作用于mapper层,Repository注解会创建实现类的对象,存入spring容器中。

mapper层例子:
mapper层包中的类和接口:
在这里插入图片描述
IHeroMapper接口完整代码:

package com.ysw.springboot01.mapper;

import com.ysw.springboot01.domain.Hero;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.util.List;

/*
* @Mapper,用在接口类上,在编译之后会生成相应的接口实现类,是mybatis的注解。
* Repository注解,作用于mapper层,会创建实现类的对象,存入spring容器中
* */
@Mapper
@Repository
public interface IHeroMapper {


    /*
    * Select注解,该注解在mybatis中,mybatis的前身是ibatis;
    * 作用:自动把注解封装成jdbc里的sql语句,把sql提取出来,
    *      到数据库中查,查完以后把查询出的结果集封装到list集合中
    * */
    @Select("SELECT * FROM hero")
    //查询所有英雄数据
    List<Hero> selectAllHero();
}

3.service层注解

  1. @Autowired
    自动注入,它会自动从spring容器中搜索符合类型的对象,给作用的成员属性赋值。

  2. @Service
    @Service注解作用于service层,
    与上述注解@Repository实现过程类似,它的作用是自动创建实现类的对象并且存入spring容器中。

service层例子:
service层包中的类和接口:
在这里插入图片描述

IHeroService接口完整代码:

package com.ysw.springboot01.service;

import com.ysw.springboot01.domain.Hero;

import java.util.List;

public interface IHeroService {

    List<Hero> selectAllHero();
}

HeroServiceImpl实现类完整代码:

package com.ysw.springboot01.service.impl;

import com.ysw.springboot01.domain.Hero;
import com.ysw.springboot01.mapper.IHeroMapper;
import com.ysw.springboot01.service.IHeroService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

//@Service注解,创建service实现类的对象,并且存入spring容器中
@Service
public class HeroServiceImpl implements IHeroService {

    //用@Autowired直接从spring容器中取出mapper层存入spring容器的实现类的对象
    @Autowired
    private IHeroMapper mapper;

    @Override
    public List<Hero> selectAllHero() {
        //调用mapper层
        return mapper.selectAllHero();
    }
}

四.controller层

  1. @RequestMapping("/hero")
    映射请求路径,相当于servlet中的@WebServlet注解,用于Controller层的类和方法体,
    访问时是两层路径,类是一级路径,方法是二级路径。

  2. @Controller
    创建Controller类的对象,存入spring容器中,由服务器从spring容器中得到该对象,并调用其方法,
    与上述注解@Service,@Repository类似,他们都是创建类的对象并存入spring容器中。

  3. @ResponseBody
    这个注解通常使用在controller层,响应数据给客户端,类似于servlet中的response.getWrite().write()。
    它将java对象转为json格式的数据,其作用是将方法的返回值以特定的格式写入到response的body区域,进而将数据返回给客户端。假如返回值是字符串则直接将字符串写到客户端,假如是一个对象,此时会将对象转化为json串然后写到客户端。
    ps:这里需要注意的是,如果返回对象,按utf-8编码。如果返回String,默认按iso8859-1编码,页面可能出现乱码。因此在注解中我们可以手动修改编码格式,例如@RequestMapping(value = "/selectAll",produces = "application/json;charset=utf-8")

controller层例子:
controller层包中的类和接口:
在这里插入图片描述
HeroController类完整代码:

package com.ysw.springboot01.controller;

import com.ysw.springboot01.domain.Hero;
import com.ysw.springboot01.service.IHeroService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@RequestMapping("/hero") //映射请求路径,相当于servlet中的@WebServlet注解,一级路径
@Controller //创建Controller类的对象,存入spring容器中,由服务器来调用
public class HeroController {

    //从spring容器总取出service层的对象,自动注入
    @Autowired
    private IHeroService service ;

    /*
    * 每个方法都需要有转这个步骤,即需要有一下两个思路中的一种
    * 1.跳转到某个页面,thymeleaf页面
    * 2.响应数据给客户端 @ResponseBody注解
    * */


    @RequestMapping(value = "/selectAll",produces = "application/json;charset=utf-8") //二级路径
    /*
    * 在后台生成一个java对象listHero,用于返回给页面;
    * 经过@ResponseBody的作用后直接转成了json格式,如果没有这个转化的话,我们前台得到的是Object对象
    * */
    @ResponseBody
    //查询所有英雄数据
    public List<Hero> selectAllHero(){
        List<Hero> listHero = service.selectAllHero();
       return listHero;
    }


    @RequestMapping("/showAllHero") //二级路径
    //查询所有英雄数据,显示出来
    public String selectShowAllHero(Model model){
        List<Hero> heroes = service.selectAllHero();
        model.addAttribute("heroes",heroes);
        return "hero";
    }

}

五.启动类注解

  1. @MapperScan("package包路径")
    作用:扫描指定包下所有的接口,然后所有接口在编译之后都会生成相应的实现类
    位置:是在SpringBoot启动类上面添加,

  2. @SpringBootApplication
    在主方法上使用,是一个组合注解,用于快捷配置启动类。

启动类例子:
启动类:
在这里插入图片描述
启动类完整代码:

package com.ysw.springboot01;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//在主方法上使用,是一个组合注解,用于快捷配置启动类
@SpringBootApplication
//扫描指定包下所有的接口类,然后所有接口在编译之后都会生成相应的实现类
//@MapperScan("com.ysw.springboot01.mapper")
public class Springboot01Application {

    public static void main(String[] args) {
        SpringApplication.run(Springboot01Application.class, args);
    }

}

你可能感兴趣的:(Web后端)