首页 > 其他分享 >2.SpringBoot——常用注解

2.SpringBoot——常用注解

时间:2023-10-08 17:35:53浏览次数:52  
标签:xml Mapper 常用 Resource SpringBoot 接口 Bean 注解

Controller层

//设置当前控制器类为RESTful风格,等同于@Controller与@ResponseBody两个注解的组合功能
@RestController
//设置当前控制器方法(模块)的请求访问路径
@RequestMapping("/web/role")
//依赖注入/自动装配,获取Bean
@Resource
@Autowired

Autowired和Resource的区别

两者作用相当,都是依赖注入,@Autowired是Spring中的注解,@Resource属于Java EE。

默认情况下@Autowired是按照类型byType注入的;@Resource默认按照名称byName注入。

@Autowired如果要按照类型注入,需要使用@Qualifier一起配合。而@Resource如果指定了name,则用byName自动装配,如果指定了type,则用byType自动装配。

推荐使用@Resource,装配顺序更为简单,更快,且属于Java EE,减少与Spring的耦合。

HTTP请求

//GET请求,从服务器获取资源
@GetMapping
//POST请求,传递对象参数时使用
@PostMapping
//DELETE请求,删除
@DeleteMapping

前后端参数传递

//放方法参数的前面,用于接收JSON数据,常搭配@PostMapping
@RequestBody
//用于接收URL地址传参或表单传参的key-value格式的数据
@RequestParam
//接收路径参数,使用{参数名}描述路径参数
@PathVariable
//json格式返回结果给前端
@ResponseBody

Model(Entity)层

//Lombok注解
@Data

JSON格式处理

//属于jackson,将日期类型数据在JSON格式和java.util.Date对象之间转换。
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
//是Spring所有,对Date、Calendar、Long及Joda时间类型的属性进行格式化处理
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")

@JsonFormat和 @DateTimeFormat 区别

@JsonFormat可以约束前端传入的时间类型参数格式可以约束后端响应前端的时间类型格式;与请求的数据类型有关,必须为json类型。

@DateTimeFormat只能约束前端传入的时间类型参数格式

参数校验

//非空
@NotBlank(message = MessageConstant.CARD_DID_IS_NOT_EMPTY
          , groups = {CompanyReq.CreateCompanyGroup.class)
public interface CreateCompanyGroup {
    }
//非空
@NotNull(message = MessageConstant.CARD_DEVICE_TYPE_IS_NOT_EMPTY)
//SpringMVC提供的,标注方法参数需要校验
@Validated(CompanyReq.CreateCompanyGroup.class)
//
@Min
//
@Max
//
@Size(max = 150, message
      = MessageConstant.RETROACTIVE_APPLY_APPLY_REASON_OVER_MAX_SIZE)
//
@Pattern(regex=,flag=)

Service层

//注册业务实现的Bean,Bean处理
@Service
//打日志
@Slf4j
//通用,不好归类的组件放入IOC容器里,一般共用的类会用上这个注解
@Component
//声明配置类
@Configuration

@Component(更常用)和@Bean的区别

都是注册Bean到IOC容器当中,通过@Resource注入(装配)。

@Bean在配置类中使用,即类上需要加上@Configuration注解。

@Configuration
public class MyBeans {
    
    @Bean
    public UserService userServiceImpl() {
        return new UserServiceImpl();
    }
}

若要将第三方库中的类注册到IOC容器里,在这种情况下,是没有办法在它的类上添加@Component注解的,只能通过@Bean实现。

读取配置

//直接读取各种配置的属性值
@Value
//读取配置信息并加载到Java配置类里,通过类获取对应属性
@ConfigurationProperties

测试

//声明一个方法为测试方法
@Test
//被声明的测试方法的数据会回滚,避免数据污染
@Transactional
@Transactional(rollbackFor = Exception.class)

DAO(Mapper)层

//注册持久层的Bean
@Mapper
@Repository

Mapper和Repository的区别

@Repository是Spring 的,@Mapper是mybatis的。都是注入DAO接口

如果使用@Repository注解,那么启动类上还需要配合@MapperScan配置扫描类。

@Mapper注解不需要配置MapperScan,通过xml里面的namespace里面的接口地址,生成bean对象后即可注入到Service里面。如果不在dao的接口上添加@Mapper,可以在启动类上添加@MapperScan("")指明扫描的位置。

还有一种注入DAO接口的方式:

在MybatisPlus的配置文件里加入@MapperScan,指定扫描DAO的路径。

此外:

当mapper接口和接口对应的xml映射文件在命名上不同或所在的路径不同时,需要在application配置xml路径,实现接口绑定。

mybatis.config-location=classpath:mybatis-config.xml
mybatis.mapper-locations=classpath:mybatis/**/*Mapper.xml

以及:

mybatis中,映射文件中的namespace是用于绑定Dao接口,绑定接口后,便于定位指定SQL语句。

详细解释:在大型项目中,存在大量SQL语句,为每个SQL语句起一个唯一的标识(ID)不容易。为每个映射文件起一个唯一的命名空间,这样定义在这个xml文件中的每个SQL语句就成了定义在这个命名空间中的一个ID。所以只要能够保证每个命名空间中的ID是唯一的,即使在不同映射文件中的语句ID相同,也不会再产生冲突了。

配置启动

/**
 * 是SpringBoot的核心注解,它是一个组合注解。
 * @ComponentScan,告诉Spring扫描的包的位置,用注解标识的Bean会被Spring自动扫描并装入IOC容器当中。
 * @SpringBootConfiguration,它继承了@Configuration,标注配置类
 */
@SpringBootApplication
//Mybatis扫描DAO接口路径
@MapperScan(basePackages = {"com.leelen.cloud.office.*.mapper"})
//它是修饰Bean的一个注解,当bean被注册之后,如果有注册相同类型的bean,就不会成功,它会保证你的bean只有一个,即你的实例只有一个。可以用来修饰主启动类,以及自定义的配置类
@ConditionalOnMissingBean
//Nacos服务发现
@EnableDiscoveryClient

标签:xml,Mapper,常用,Resource,SpringBoot,接口,Bean,注解
From: https://www.cnblogs.com/fallorange/p/17749690.html

相关文章

  • 1.SpringBoot——概述
    SpringBoot和SSM开发中有什么区别SpringBoot没有颠覆JavaEE开发,还是要学Spring,它是诸葛亮,提供多种用兵打仗的方案。SSM限定死了只能使用SSM开发JavaWeb应用。而SpringBoot没有与任何MVC框架绑定。一个很恰当的比喻是,SpringMVC、Websocket、Redis、MongoDB、kafka这些对应电......
  • 虚拟化技术之kvm管理工具virsh常用基础命令(二)
    上一篇博客我们主要聊了下virsh管理kvm虚拟机的命令相关用法和说明,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13508231.html;今天我们来继续说virsh管理kvm虚拟机的话题;1、virsh监控kvm虚拟机相关命令virsh domblklist:列出指定虚拟机上的磁盘信息......
  • SpringBoot简易任务栏示例
    一、概述现有这样一个需求:前端要求实现类似任务栏的东西(windows电脑的任务栏)。要求:可以向任务栏增加图标、删除图标、给任务栏中的图标排序以及加载任务栏图标列表参考样例图:规律图: 思路:(这里假设任务栏图标列表本身就是一个有序的集合,排序规则按照sort正向排序)......
  • springAMQP--DirectExchange(在监听方法上用注解声明交换机队列和key,发送消息时会带一
         ......
  • js 常用的正则判断方法
    /**判断是否为数组*/exportconstisArray=(arg:unknown)=>{ returnArray.isArray?Array.isArray(arg):Object.prototype.toString.call(arg)==="[objectArray]"}/**判断是否为字符串*/exportconstisString=(str:unknown)=>{ returntypeof......
  • Springboot中的context-path作用
    首先context-path用于构成url,我们在配置文件的时候server:servlet:context-path:/test之后在本地访问端口8080时(此处拿knife4j举列)本来要访问的是:localhost:8080/doc.html但是现在由于加了context-path,该路径便变为了:localhost:8080/tset/doc.html......
  • ansible常用模块总结
    常用模块帮助文档参考:https://docs.ansible.com/ansible/2.9/modules/modules_by_category.htmlhttps://docs.ansible.com/ansible/2.9/modules/list_of_all_modules.html1)Command模块功能:在远程主机执行命令,此为默认模块,可忽略-m选项说明:此命令不支持$VARNAME<>|;&......
  • PHP7 常用的魔术方法整理
    php7魔术方法有哪些?魔术方法是一种特殊的方法,当对对象执行某些操作时会覆盖PHP的默认操作。PHP保留所有以 __ 开头的方法名称。因此,除非覆盖PHP的行为,否则不建议使用此类方法名称。php7魔术方法有:__constract:在实例化一个类时,触发__destruct:在一个实例对象被销毁的......
  • springboot整合websocket
    引入依赖<!--webSocket--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>配置类/***websocket配置类*/@ConfigurationpublicclassWebS......
  • JVM常用启动参数
    在一个java应用启动时,我们可以配置其jvm的启动参数,如:java -jar -Xms4096M-Xmx4096M-Xmn1024M-Xss256K hello.jar [这里可以加args参数传入]下面我记录了一些常用的JVM参数的配置说明,仅用于记录和简单说明。一、堆大小设置(堆=年轻代+年老代+持久代)-Xmx3550m:设置JVM最大......