Java开发中常用注解

springboot中的常用注解

@Mapper和@Repository的区别

@Repository和@Controller、@Service、@Component的作用差不多,都是把对象交给spring管理。@Repository用在持久层的接口上,这个注解是将接口的一个实现类交给spring管理。

@Mapper和@Repository是常用的两个注解,两者都是用在dao上,两者功能差不多,容易混淆,有必要清楚其细微区别;

区别:
@Mapper:是mybatis-plus注解
@Repository:是spring注解

@Mapper= @Repository + @MapperScan(basePackages = "{}")

@Repository需要在Spring中配置扫描包地址,然后生成Dao层的Bean才能被注入到Service层中:如下,在启动类中配置扫描地址:
@MapperScan
作用:指定要变成实现类的接口所在的,然后包下面的所有接口在编译之后都会生成相应的实现类
添加位置:是在Springboot启动类上面添加

@SpringBootApplication   //添加启动类注解
@MapperScan("com.xz.springboot.mapper")  //配置mapper扫描地址
public class application
{
    public static   void main(String[] args)
    {
        SpringApplication.run(application.class,args);
    }
}

添加@MapperScan(“com.winter.dao”)注解以后,com.winter.dao包下面的接口类,在编译之后都会生成相应的实现类
3、使用@MapperScan注解多个包
(实际用的时候根据自己的包路径进行修改)

@MapperScan({"com.kfit.demo","com.kfit.user"})  

@Mapper不需要配置扫描地址,通过xml里面的namespace里面的接口地址,生成了Bean后注入到Service层中。

也就是@Repository多了一个配置扫描地址的步骤;

补充:

如果在接口上**@Mapper,然后再在 xml中的namespace指向mapper**,那么spring就能动态生成一个Mapper的bean,然后你在serviceImpl中的

@Autowired

pravate XXXMapper xxmapper;

就会被这个bean注进去。

如果在DaoImpl中加了@Repository,那么在spring的扫包机制下,也会生成这个dao的bean,注入你serviceImpl中的

@Autowired

private xxxDao xxxdao;

中去。这个机制就像@controller,@Service什么的一样的。

最后,一般不用@Repository,在spring boot中通常用@Mapper

总结:@Repository需要用@MapperScan扫描包mapper才能注入@Bean

而@Mapper注解相当于@Repository注解+@MapperScan注解,通过xml文件下的namespace命名空间自动注入bean

@PathVariable的作用

@PathVariable是用来赋予请求url中的动态参数,即:将请求URL中的模板变量映射到接口方法的参数上
在这里插入图片描述
则请求的URL会带上参数id作为URL的一部分

另:

@ApiImplicitParam(name = "id", value = "记录ID", required = true, paramType="path",dataType = "Integer")

可以设置属性defaultValue:默认值,来设置参数的默认值,即可访问默认URL

和@RequestParam的区别:
@PathVariable和@RequestParam的区别就在于:@RequestParam用来获得静态的URL请求参数;@PathVariable用来获得动态的URL请求入参

@RequestParam

@RequestParam和@PathVariable的区别就在于请求时当前参数是在url路由上还是在请求的body上,例如有下面一段代码:

  @RequestMapping(value="", method=RequestMethod.POST)
    public String postUser(@RequestParam(value="phoneNum", required=true) String phoneNum ) String userName) {
        userService.create(phoneNum, userName);
        return "success";
    }

这个接口的请求url这样写:http://xxxxx?phoneNum=xxxxxx,也就是说被@RequestParam修饰的参数最后通过key=value的形式放在http请求的Body传过来,对比下上面的@PathVariable就很容易看出两者的区别了。

@responseBody

今天才明白@responseBody和异步ajax的关系:以前听xxx说异步的controller方法都要加注解@responseBody,不然就请求不到方法,我也就记住了,可今天才发现,原来有些异步请求的controller也可以不用@responseBody注解,也是可以请求到对应的方法的。根本原因还是我没有搞明白@responseBody注解的应用场景。

@responseBody的应用场景:

作用:

  该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。

使用时机:

 返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;

而以前说异步请求的controller方法都要有@responseBody注解,是因为那时用的异步都设定了返回数据类型为json,所以必须用@responseBody注解。而有些异步请求返回的jsp,或者是html类型的数据(load()方法请求返回的内容就不是json数据),此时controller映射的方法上就不能适应@responseBody注解了,否则会映射不到请求路径!

@RequsetBody

作用:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

无极的移动代码

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

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

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

打赏作者

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

抵扣说明:

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

余额充值