SSM相关注解
@RequestMapping
浏览器发送请求给服务器,若请求地址符合前端控制器DispatcherServlet的url-pattern,该请求就会被前端控制器DispatcherServlet处理。
前端控制器会读取SpringMVC的核心配置文件,通过扫描组件找到控制器带@Controller注解的类,将请求地址和控制器中@RequestMapping注解的value属性值进行匹配,若匹配成功,该注解所标识的控制器方法就是处理请求的方法。
处理请求的方法需要返回一个字符串类型的视图名称,该视图名称会被视图解析器解析,加上前缀和后缀组成视图的路径,对视图进行渲染,最终转发到视图所对应页面
此注解可以加在类上,相当于是包名(虚拟路径),区分不同类中相同的action的名称
@RequestMapping("/user")
public class DemoAction1 {..}
<a href="${pageContext.request.contextPath}/user/demo.action">访问服务器</a>
@ResponseBody
@ResponseBody的作用其实是将java对象转为json格式的数据响应给浏览器。
将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。
注意:在使用此注解之后不会再走视图处理器,平时我们controller中的方法返回字符串都是加上视图解析器中的前缀和后缀形成资源的路径,然后将此路径对应的资源响应给浏览器,而加上此注解就不走这套流程。而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。
@Component
创建对象的, 等同于<bean>的功能
属性:value 就是对象的名称,也就是bean的id值,value的值是唯一的,创建的对象在整个spring容器中就一个
位置:在类的上面
@Component(value = "myStudent")等同于 <bean id="myStudent" class="com.bjpowernode.ba01.Student" />
spring中和@Component功能一致,创建对象的注解还有:
- @Repository(用在持久层类的上面) : 放在dao的实现类上面,表示创建dao对象,dao对象是能访问数据库的。
- @Service(用在业务层类的上面):放在service的实现类上面,创建service对象,service对象是做业务处理,可以有事务等功能的。
- @Controller(用在控制器的上面):放在控制器(处理器)类的上面,创建控制器对象的,控制器对象,能够接受用户提交的参数,显示请求的处理结果。以上三个注解的使用语法和@Component一样的,都能创建对象,但是这三个注解还有额外的功能。@Repository,@Service,@Controller是给项目的对象分层的。
@RestController
在Spring中@RestController的作用等同于@Controller + @ResponseBody。
@Autowired
当我们在将一个类上标注@Service或者@Controller或@Component或@Repository注解之后,spring的组件扫描就会自动发现它,并且会将其初始化为spring应用上下文中的bean。
当需要使用这个bean的时候,例如加上@Autowired注解的时候,这个bean就会被创建。而且初始化是根据无参构造函数。
@Autowired实现引用类型的赋值。spring中通过注解给引用类型赋值,使用的是自动注入原理 ,支持byName, byType。
@Autowired:默认使用的是byType自动注入。
位置:1)在属性定义的上面,无需set方法, 推荐使用 2)在set方法的上面
当标注的属性是接口时,其实注入的是这个接口的实现类
如果要使用byName方式,需要做的是:
* 1.在属性上面加入@Autowired
- 2.在属性上面加入@Qualifier(value=“bean的id”) :表示使用指定名称的bean完成赋值。
RequestBody
RequestBody注解的主要作用就是用于接收前端的参数,当我们使用post请求的时候,我们会将参数放在request body中,此时我们就需要在Controller的方法的参数前面加上@RequestBody用来接受到前端传过来的request body中的值。
@Controller
@RequestMapping(“/test”)
public class test{
public void testMethod(@RequestBody String string)"{
System.out.println("测试");
}
}
@RequestParam
@RequestParam接收的参数主要是来自request Header中,即请求头中。通常用于get请求中,我们都知道get请求的参数都是写在url中的,例如:http://localhost:8080/my/api/testMethod?name=雷神&age=3 该url我们可以看到有那么和age两种属性,那么当我们将此请求发送到后台服务以后,Controller写法如下:
@Controller
@RequesMapping(“/api”)
public class test{
public void testMethod(
@RequestParam(value="name",required=false,defaultValue="大坤鸟")String name,
@RequestParam(value="age")Int age){
System.out.println("年仅"+age+“岁肥宅”+name);
}
}
testMethod方法中的参数一共有两个,一个是name,一个是age。与RequestBody不同的是,如果你在参数前面加了**@RequestParam注解那么该参数则请求中则必须有对应的参数名**(不管其是否有值),否则的话请求会报错(应该是报400)!如果不加@RequestParam注解的话,当你的请求中有对应的参数名的时候会自动匹配到值,如果没有对应的参数的话请求特可以也可以正常发送。
@RequestParam的括号中的三个参数:
-
value值得就是请求的url中必须要有的参数名,相当于key值;
-
required表示的是是否为必须,也就是说参数在url中是否为必须,默认的是true;
-
defaultValue指的则是参数的默认值;
如果你直接在参数前面加上@RequestParam,那么该参数的名字就是url中必须要有的参数名
RequestParam接收的参数是来自requestHeader中,即请求头,通常用于get请求。RequestBody注解接收的参数是来自requestBody中的,即请求体;一般用于处理非Content-Type:application/x-www-form-urlencoded编码格式的数据,比如application/json、application/xml等类型的数据;
@Mapper
作用:在接口类上添加了@Mapper,在编译之后会生成相应的接口实现类
添加位置:接口类上面
@Mapper
public interface UserDAO {
//代码
}
如果想要每个接口都要变成实现类,那么需要在每个接口类上加上@Mapper注解,比较麻烦,解决这个问题用@MapperScan
@MapperScan
作用:指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类
添加位置:是在Springboot启动类上面添加,添加@MapperScan(“com.winter.dao”)注解以后,com.winter.dao包下面的接口类,在编译之后都会生成相应的实现类
@SpringBootApplication
@MapperScan("com.winter.dao")
public class SpringbootMybatisDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootMybatisDemoApplication.class, args);
}
}
@DeleteMapping参数形式:
http://localhost:9000/api/msopActivity/deleteEntityById/6514731398665238 拼“/”
前台:‘api/msopActivity/deleteEntityById/’+row.activityId
@ApiOperation("删除业务场景")
@DeleteMapping("/deleteEntityById/{id}")
public Response<Long> deleteEntityById(@PathVariable("id") Long id) { iMsopSceneService.deleteById(id);
Response<Long> response = new Response<>("0", "操作成功", id);
return response;}
http://localhost:9000/api/msopActivity/deleteEntityById?id=6514731398665238 拼“?id=”
前台:/api/msopActivity/deleteEntityById?id=6514731398665238
@ApiOperation("删除业务活动")
@DeleteMapping("/deleteEntityById")
public Response<Long> deleteEntityById(Long id) {
iMsopActivityService.deleteById(id);
Response<Long> response = new Response<>("0", "操作成功", id);
return response;}