Java开发中常用注解

本文深入解析SpringBoot中@Mapper与@Repository的区别,探讨其在DAO层的运用方式,同时介绍@PathVariable、@RequestParam、@ResponseBody及@RequestBody的作用与应用场景。

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

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

### Java开发常用注解及其用法 #### 内置注解 Java 提供了一些内置的元注解,这些注解主要用于定义其他自定义注解。 - **`@Override`** 此注解表明该方法重写了父类的方法。如果未正确覆盖,则编译器会抛出错误[^3]。 - **`@Deprecated`** 表明被标记的元素已不推荐使用。当访问此元素时,编译器会产生警告消息。例如: ```java @Deprecated public void oldMethod() { // 方法实现... } ``` - **`@SuppressWarnings`** 抑制特定类型的编译器警告。常用于消除不必要的泛型或弃用警告。例如: ```java @SuppressWarnings("unchecked") public static List<String> createList() { return new ArrayList<>(); } ``` - **`@SafeVarargs`** 应用于可变参数方法声明,表示调用者不会因为传递不同数量的实际参数而引发堆污染问题。适用于Java7及以上版本。 - **`@FunctionalInterface`** 标记接口为函数式接口,即仅含一个抽象方法的接口,便于Lambda表达式的使用。例如: ```java @FunctionalInterface interface MyFunction<T, R> { R apply(T t); } ``` #### 元注解注解是用来创建新注解的工具,常见的有以下几个: - **`@Retention`** 定义了注解的存在范围——源码阶段、编译期还是运行时。通过指定不同的策略来决定何时处理注解信息。 - **`@Documented`** 将注解放入生成的Javadoc文档中。 - **`@Inherited`** 子类可以继承父类上的此类注解。 以上是标准库内建的一些重要注解,在日常编程中有广泛的应用场景。 #### Spring框架特有注解 除了上述通用注解外,Spring框架也引入了许多实用性强且功能丰富的注解,极大地提高了开发效率和灵活性。 - **`@Component`, `@Service`, `@Repository`, `@Controller` 和 `@RestController`** 这些都是组件扫描机制下的候选对象,分别对应业务逻辑层(`@Service`)、持久化操作层(`@Repository`)以及Web请求处理器(`@Controller`)和服务端RESTful API(`@RestController`)。其中`@RestController`相当于`@Controller`加上全局性的`@ResponseBody`效果[^5]。 - **`@Autowired` 或 `@Inject` (JSR-330)** 自动装配依赖关系,默认按类型匹配注入相应的bean实例;也可以配合`@Qualifier`进一步限定具体哪个bean要被注入。 - **`@Value`** 用来读取配置文件属性值到成员变量里边去,支持SpEL表达式语法。 - **事务管理相关注解如 `@Transactional`** 控制服务层方法是否开启新的事物或者加入现有事物之中,确保数据库交互的一致性和可靠性。 综上所述,合理运用各种注解可以使代码更加简洁清晰,并有助于提高项目的维护性和扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

无极的移动代码

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

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

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

打赏作者

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

抵扣说明:

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

余额充值