SpringBoot——常用注解

news2024/11/23 22:06:20

Spring Web MVC与Spring Bean注解

@Controller/@RestController

@Controller是@Component注解的一个延伸,Spring 会自动扫描并配置被该注解标注的类。此注解用于标注Spring MVC的控制器。

@Controller
@RequestMapping("/api/v1")
public class UserApiController{
	
	@Autowired
	private UserService userService;

	@GetMapping("/users/{id}")
	@ResponseBody
	public User getUserById(@PathVariable long id) throws UserNotFoundException{
		return userService.findOne(id);
	}
}

@RestController是在Spring 4.0开始引入的,这是一个特定的控制器注解。此注解相当于@Controller和@ResponseBody的快捷方式。
当使用此注解时,不需要再在方法上使用@ResponseBody注解。

@RestController
@RequestMapping("/api/v1")
public class UserApiController{
	
	@Autowired
	private UserService userService;

	@GetMapping("/users/{id}")
	public User getUserById(@PathVariable long id) throws UserNotFoundException{
		return userService.findOne(id);
	}
}

@RequestMapping

对请求处理类中的请求处理方法进行标注,主要用途是将Web请求与请求处理类中的方法进行映射。
Spring MVC和Spring WebFlux都通过RquestMappingHandlerMapping和RequestMappingHndlerAdapter两个类来提供对@RequestMapping注解的支持

  • value:映射的请求URL或者其别名
  • method:兼容HTTP的方法名
  • params:根据HTTP参数的存在、缺省或值对请求进行过滤
  • header:根据HTTP Header的存在、缺省或值对请求进行过滤
  • consume:设定在HTTP请求正文中允许使用的媒体类型
  • product:在HTTP响应体中允许使用的媒体类型

【提示:在使用@RequestMapping之前,请求处理类还需要使用@Controller或@RestController进行标记】

@Controller
public class DemoController{

	@RequestMapping(value="/demo/home",method=RequestMethod.GET)
	public String home(){
		return "/home";
	}
}

@RequestMapping还可以对类进行标记,这样类中的处理方法在映射请求路径时,会自动将类上@RequestMapping设置的value拼接到方法中映射路径之前,如下:

@Controller
@RequestMapping(value="/demo")
public class DemoController{
	
	@RequestMapping(value="/home",method=RequestMethod.GET)
	public String home(){
		return "/home";
	}
}

@RequestBody

在处理请求方法的参数列表中使用,它可以将请求主体中的参数绑定到一个对象中,请求主体参数是通过HttpMessageConverter传递的,根据请求主体中的参数名与对象的属性名进行匹配并绑定值。此外,还可以通过@Valid注解对请求主体中的参数进行校验。

@RequestController
@RequestMapping("/api/v1")
public class UserController{
	
	@Autowired
	private UserService userService;

	@PostMapping("/users")
	public User createUser(@Valid @RequestBody User user){
		return userService.save(user);
	}
}

@ResponseBody

会自动将控制器中方法的返回值写入到HTTP响应中.
@ResponseBody注解只能用在被@Controller注解标记的类中。如果在被@RestController标记的类中,则方法不需要使用@ResponseBody注解进行标注。@RestController相当于是@Controller和@ResponseBody的组合注解

@ResponseBody
@GetMapping("/users/{id}")
public User findByUserId(@PathVariable long id) throws UserNotFoundException{
	User user = userService.findOne(id);
	return user;
}

@PathVariable

将方法中的参数绑定到请求URI中的模板变量上。可以通过@RequestMapping注解来指定URI的模板变量,然后使用@PathVariable注解将方法中的参数绑定到模板变量上。
@PathVariable注解允许我们使用value或name属性来给参数取一个别名

模板变量名需要使用{ }进行包裹,如果方法的参数名与URI模板变量名一致,则在@PathVariable中就可以省略别名的定义。

@GetMapping("/uers/{id}/roles/{roleId}")
public Role getUserRole(@PathVariable(name="id") long id,@PathVariable(value="roleId")long roleId)throws ResourceNotFoundException{
	
	return userRoleService.findByUserIdAndRoledId(id,roleId);
}

@RequestParam

用于将方法的参数与Web请求的传递的参数进行绑定。
使用@RequestParam可以轻松的访问HTTP请求参数的值
该注解的其他属性配置与@PathVariable的配置相同,特别的,如果传递的参数为空,还可以通过defaultValue设置一个默认值。

@GetMapping
public Role getUserRole(@RequestParam(name="id") long id,@ReuqestParam(name="roleId")long roleId)throws ResourceNotFoundException{
	return userRoleService.findByUserIdAndRoleId(id,roleId);
}

//如果参数为空设置默认值
@GetMapping
public Role getUserRole(@RequestParam(name="id",defalut="0") long id,@RequestParam(name="roleId",default="0")long roleId){
	if(id==0||roleId==0){
		return new Role();
	}
	return userRoleService.findByUserIdAndRoleId(id,roleId);
}

@ModelAttribute

通过此注解,可以通过模型索引名称来访问已经存在于控制器中的model。
与@PathVariable和@RequestParam注解一样,如果参数名与模型具有相同的名字,则不必指定索引名称

@PostMapping("/users")
public void createUser(@ModelAttribute("user") User user){
	userService.save(user);
}

如果使用@ModelAttribute对方法进行标注,Spring会将方法的返回值绑定到具体的Model上。

@ModelAttribute("ramostear")
User getUser(){
	User user = new User();
	user.setId(1);
	user.setFirstName("ramostear");
	user.setEmail("ramostear@163.com");
	return user;
}

【在Spring调用具体的处理方法之前,被@ModelAttribute注解标注的所有方法都将被执行。】

@GetMapping/@PostMapping/@PutMapping/@DeleteMapping@PatchMapping

用于处理HTTP GET/POST/PUT/DELETE/PATCH请求,并将请求映射到具体的处理方法中。具体来说,@GetMapping是一个组合注解,它相当于是@RequestMapping(method=RequestMethod.GET/POST/PUT/DELETE/PATCH)的快捷方式

@RequestController
@RequestMapping("/api/v1")
public class UserController{
	
	@Autowired
	private UserService userService;

	@GetMapping("/users")
	public List<User> findAllUser(){
		List<User> users = userService.findAll();
		return users;
	}

	@GetMapping("/users/{id}")
	public User findOneById(@PathVariable(name="id") long id) throws UserNotFoundException{
		
		return userService.findOne();
	}

	@PostMapping("/users")
	public User createUser(@Valid @RequestBody User user){
		return userService.save(user);
	}
	
	@PutMapping("/users/{id}")
	public ResponseEntity<User> updateUser(@PathValriable(name="id") long id,@Value @ResponseBody User detail)throws UserNotFoundException{
		
		User user = userRepository.findById(id).orElseThrow(() -> UserNotFoundException("User not found with this id "+id));
	
		user.setLastName(detail.getLastName());
		user.setEmail(detail.getEmail());
		user.setAddress(detail.getAddress());
		final User origin = userRepository.save(user);
		return ResponseEntity.ok(origin);
	}

	@DeleteMapping("/users/{id}")
	public Map<String,Boolean> deleteById(@PathVariable(name="id") long id) throws UserNotFoundException{
		
		User user = userRepository.findById(id).orElseThrow(() -> UserNotFoundException("User not found with this id "+id));

		userRepository.delete(user);
		Map<String,Boolean> response = new HashMap<>();
		response.put("deleted",Boolean.TRUE);
		return response;
	}

	@PatchMapping("/users/patch")
	public ResponseEntity<Object> patch(){
		return new ResponseEntity<>("Path method response message",HttpStatus.OK);
	}
}

@ControllerAdvice

@ControllerAdvice是@Component注解的一个延伸注解,Spring会自动扫描并检测被@ControllerAdvice所标注的类。
@ControllerAdvice需要和@ExceptionHandler、@InitBinder以及@ModelAttribute注解搭配使用,主要是用来处理控制器所抛出的异常信息。

我们需要定义一个被@ControllerAdvice所标注的类,在该类中,定义一个用于处理具体异常的方法,并使用@ExceptionHandler注解进行标记。
在有必要的时候,可以使用@InitBinder在类中进行全局的配置,还可以使用@ModelAttribute配置与视图相关的参数。
使用@ControllerAdvice注解,就可以快速的创建统一的,自定义的异常处理类。

@ControllerAdvice(basePackages={"com.ramostear.controller.user"})
public class UserControllerAdvice{
	
	@InitBinder
	public void binder(WebDataBinder binder){
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		format.setLenient(false);
		binder.registerCustomEditor(Date.class,"user",new CustomDateFormat(format,true));
	}

	//配置于视图相关的参数
	@ModelAttribute
	public void modelAttribute(Model model){
		model.addAttribute("msg","User not found exception.");
	}

	@ExceptionHandler(UserNotFoundException.class)
	public ModelAndView userNotFoundExceptionHandler(UserNotFoundException e){
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.addObject("exception",ex);
		modelAndView.setViewName("error");
		return modelAndView;
	}
}

@ExceptionHander注解用于标注处理特定类型异常类所抛出异常的方法。
当控制器中的方法抛出异常时,Spring会自动捕获异常,并将捕获的异常信息传递给被@ExceptionHandler标注的方法。

@ExceptionHandler(UserNotFoundException.class)
public ResponseEntity<Object> userNotFoundExceptionHandler(UserNotFoundException ex,WebRequest request){
	
	UserErrorDetail detail = new UserErrorDetail(new Date(),ex.getMessage,request.getDescription(false));
	return new ResponseEntity<>(detail,HttpStates.NOT_FOUND);
}

@InitBinder注解用于标注初始化WebDataBinider 的方法,该方法用于对Http请求传递的表单数据进行处理,如时间格式化、字符串处理等。

@InitBinder
public void initBinder(WebDataBinder dataBinder){
	StringTrimmerEditor editor = new StringTrimmerEditor(true);
	dataBinder.registerCustomEditor(String.class,editor);
}

@ResponseStatus

标注请求处理方法。使用此注解,可以指定响应所需要的HTTP STATUS。特别地,我们可以使用HttpStauts类对该注解的value属性进行赋值。

@ResponseStatus(HttpStatus.BAD_REQEST)
@ExceptionHandler(UserNotFoundException.class)
public ResponseEntity<Object> userNotFoundExceptionHandler(UserNotFoundException ex,WebRequest request){
	
	UserErrorDetail detail = new UserErrorDetail(new Date(),ex.getMessage(),request.getDescription(false));
	return new ResponseEntity<>(detail,HttpStatus.NOT_FOUND);
}

==========================================================

SpringBean相关的注解

@ComponentScan

@ComponentScan注解用于配置Spring需要扫描的被组件注解注释的类所在的包。可以通过配置其basePackages属性或者value属性来配置需要扫描的包路径。
value属性是basePackages的别名。

@Configuration
@ComponentScan(basePackages="com.michael.service")
public class ServiceConfig{

}

@Component

用于标注一个普通的组件类,它没有明确的业务范围,只是通知Spring被此注解的类需要被纳入到Spring Bean容器中并进行管理。

@Component
public class EncryptUserPasswordComponent{
	public String encrypt(String password,String salt){
	
	}
}

@Service

@Service注解是@Component的一个延伸(特例),它用于标注业务逻辑类。与@Component注解一样,被此注解标注的类,会自动被Spring所管理。

@Repository

@Repository注解也是@Component注解的延伸,与@Component注解一样,被此注解标注的类会被Spring自动管理起来,@Repository注解用于标注DAO层的数据持久化类。

===================================================

Spring Dependency Inject与Bean Scopes注解

@DependsOn

@DependsOn注解可以配置Spring IoC容器在初始化一个Bean之前,先初始化其他的Bean对象。

public class FirstBean{
	
	@Autowired
	private SecondBean secondBean;

	@Autowired
	private ThirdBean thirdBean;

	public FirstBean(){

	}
}

public class SecondBean{

	public SecondBean(){
		
	}
}

public class ThirdBean{

	public ThirdBean(){

	}
}
@Configuration
public class CustomBeanConfig{
	
	@Bean("firstBean")
	@DependsOn(value={"secondBean","thirdBean"})//
	public FirstBean firstBean(){
		return new FirstBean();
	}

	@Bean("secondBean")
	public SecondBean secondBean(){
		return new SecondBean();
	}

	@Bean("thirdBean")
	public ThireBean thirdBean(){
		return new ThirdBean();
	}
}

@Bean

主要的作用是告知Spring,被此注解所标注的类将需要纳入到Bean管理工厂中

@Component
public class DataBaseInitializer{
	
	public void init(){
		System.out.println("This is init method.");
	}

	public void destroy(){
		System.out.println("This is destroy method.");
	}
}
@Configuration
public class SpringBootApplicationConfig{
	
	@Bean(initMethod="init",destroyMethod="destroy")
	public DataBaseInitializer databaseInitializer(){
		return new DataBaseInitializer();
	}
}

@Scops

用来定义@Component标注的类的作用范围以及@Bean所标记的类的作用范围。
限定的作用范围有:singleton、prototype、request、session、globalSession或者其他的自定义范围。

当一个Spring Bean被声明为prototype(原型模式)时,在每次需要使用到该类的时候,Spring IoC容器都会初始化一个新的改类的实例。在定义一个Bean时,可以设置Bean的scope属性为prototype:scope=“prototype”,也可以使用@Scope注解设置,如下:

@Scope(value=ConfigurableBeanFactory.SCOPE_PROPTOtYPE)

两种不同的方式来使用@Scope注解

public interface UserService{

}

@Component
@Scope(value=ConfigurableBeanFactory.SCOPE_PROTOTYPE) //标注该类每次使用都会创建一个新对象
public class UserServiceImpl implements UserService{

}

@Configuration
@ComponentScan(basePackages = "com.michael.service") //扫描service包下的
public class ServiceConfig{
	
}

//------------------------------------------

public class StudentService implements UserService{
	
}

@Configuration
public class StudentServiceConfig{
	
	@Bean
	@Scope(value=ConfigurableBeanFactory.SCOPE_PROTOTYPE)
	public UserService userService(){
		return new StudentServiceImpl();
	}
}

容器配置注解

@Autowired

@Autowired注解用于标记Spring将要解析和注入的依赖项。此注解可以作用在构造函数、字段和setter方法上。

@RestController
public class UserController{
	
	private UserService userService;

	@Autowired //作用域构造函数之上
	UserController(UserService userService){
		this.userService = userService;
	}

	@Autowired //作用域setter方法上
	public void setUserService(UserService userService){
		this.userService = userService;
	}

	@Autowired //作用域字段上
	private UserService userService;
}

@Primary

当系统中需要配置多个具有相同类型的bean时,@Primary可以定义这些Bean的优先级。

public interface MessageService{

}

@Component
public class EmailMessageServiceImpl implements MessageService{
	
	@Override
	public String sendMessage(){
		return "this is send email method message";
	}
}

@Component
public class WechatMessageImpl implements MessageService{
	
	@Override
	public String sendMessage(){
		return "this is send wechat method message";
	}
}

@Primary
@Component
public class DingDingMessageImple implements MessageService{
	@Override
	public String sendMessage(){
		return "this is send DingDing method message";
	}
}

//以上同一个MessageService接口类型下的三个不同实现类
@RestController
public class MessageController{
	
	@Autowired
	private MessageService messageService;

	@GetMapping("/info")
	public String info(){
		return messageService.sendMessage();
	}
}

在这里插入图片描述

@PostConstruct与@PreDestroy

这两个注解不属于Spring,它们是源于JSR-250中的两个注解,位于common-annotations.jar中

@PostConstruct注解用于标注在Bean被Spring初始化之前需要执行的方法
@PreDestroy注解用于标注Bean被销毁前需要执行的方法。

@Component
public class DemoComponent{
	
	private List<String> list = new ArrayList<>();

	@PostConstruct
	public void init(){
		list.add("jordan");
		list.add("kobe");
	}

	@PreDestroy
	public void destroy(){
		list.clear();
	}
}

@Qualifier

当系统中存在同一类型的多个Bean时,@Autowired在进行依赖注入的时候就不知道该选择哪一个实现类进行注入。此时,我们可以使用@Qualifier注解来微调,帮助@Autowired选择正确的依赖项。

public interface MessageService{
	public String sendMessage(String message);
}

@Service("emailService")
public class EmailServiceImpl implements MessageService{
	
	@Override
	public String sendMessage(String message){
		return "send email,content:"+message;
	}
}

@Service("smsService")
public class SMSServiceImpl implements MessageService{
	
	@Override
	public String sendMessage(String message){
		return "send SMS,content"+message;
	}
}

public interface MessageProcessor{
	public String processMessage(String message);
}

public class MessageProcessorImpl implements MessageProcessor{
	
	private MessageService messageService;

	@Autowired
	@Aualifier("emailService")//指定处理MessageService接口下的具体实现类
	public void setMessageService(MessageService messageService){
		this.messageServcie = messageService;
	}

	@Override
	public String processMessage(String message){
		return messageService.sendMessage(message);
	}
}

SpringBoot注解

@SpringBootApplication

该注解是一个快捷的配置注解,在被它标注的类中,可以定义一个或多个Bean,并自动触发自动配置Bean和自动扫描组件。

此注解相当于@Configuration、@EnableAutoConfiguration和@ComponentScan的组合

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

@EnableAutoConfiguration

该注解用于通知Spring,根据当前类路径下引入的依赖包,自动配置与这些依赖包相关的配置项

@ConditionalOnClass与@ConditionalOnMissingClass

这两个注解属于类条件注解,它们根据是否存在某个类作为判断依据来决定是否要执行某些配置。

@Configuration
@ConditionalOnClass(DataSource.class)
public class MySQLAutoConfiguration{

}

@ConditionalOnBean与@ConditionalOnMissingBean

这两个注解属于对象条件注解,根据是否存在某个对象作为依据来决定是否要执行某些配置方法。

@Bean
@ConditionalOnBean(name="dataSource")
LocalContainerEntityManagerFactoryBean entityManagerFactory(){
    //...
}

@Bean
@ConditionalOnMissingBean
public MyBean myBean(){
        //...
}

@ConditionalOnWebApplication与@ConditionalOnNotWebApplication

这两个注解用于判断当前的应用程序是否是Web应用程序。如果当前应用是Web应用程序,则使用Spring WebApplicationContext,并定义其会话的生命周期。

@ConditionalOnWebApplication
HealthCheckController healthCheckController(){
        //...
}

@ConditionalOnProperty

会根据Spring配置文件中的配置项是否满足配置要求,从而决定是否要执行被其标注的方法

@Bean
@ConditionalOpProperty(name="alipay",havingValue="od")
Alipay alipay(){

	return new Alipay();
}

@ConditionalOnResource

此注解用于检测当某个配置文件存在时,则触发被其标注的方法

@ConditionalOnResource(resources = "classpath:website.properties")
Properties addWebsiteProperties(){
	
}

@ConditionalExpression

此注解可以让我们控制更细粒度的基于表达式的配置条件限制。当表达式满足某个条件或者表达式为真的时候,将会执行被此注解标注的方法。

@Bean
@ConditionalException("${localstore} && ${local == 'true'}")
LocalFileStore store(){
  //...
}

@Conditional

可以控制更为复杂的配置条件。在Spring内置的条件控制注解不满足应用需求的时候,可以使用此注解定义自定义的控制条件,以达到自定义的要求。

@Conditioanl(CustomConditioanl.class)
CustomProperties addCustomProperties(){
    //...
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1050236.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ssm+vue的OA办公管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的OA办公管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&am…

【Java 集合】准备知识

目录 初识集合框架 什么是集合框架 包装器 1. 基本数据类型和对应的包装器 2. 装箱和拆箱 3. 自动装箱和拆箱 4. Integer 存储机制 5. 包装器的作用 泛型 1. 什么是泛型 2. 引出泛型 2.1 泛型语法 3. 泛型类的使用 4. Java泛型实现的机制 -- 擦除机制 5. 泛型的…

PHP变量底层原理

前言 PHP是解释型的语言&#xff0c;它的执行顺序主要会经过以下几步&#xff1a; 1. 进行词法分析 2. 进行语法分析 3. 通过zend编译器&#xff0c;编译成opcode 4. zend虚拟机执行opcode 我们在写PHP代码的时候就知道&#xff0c;PHP是弱语言类型&#xff0c;而PHP底层又是由…

亚马逊无线充UL62368报告办理 无线充UL2738+UL2056标准UL认证办理亚马逊类目审核

什么是UL测试报告和UL认证有什么区别&#xff1f; 美国是一个对安全要求非常严格的国家&#xff0c;美国本土的所有电子产品生产企业早在很多年前就要求有相关安规检测。而随着亚马逊在全球商业的战略地位不断提高&#xff0c;境外的电子设备通过亚马逊不断涌入美国市场&#…

幂级数和幂级数的和函数有什么关系?

幂级数和幂级数的和函数有什么关系&#xff1f; 本文例子引用自&#xff1a;80_1幂级数运算&#xff0c;逐项积分、求导【小元老师】高等数学&#xff0c;考研数学 求幂级数 ∑ n 1 ∞ 1 n x n \sum\limits_{n1}^{\infty}\frac{1}{n}x^n n1∑∞​n1​xn 的和函数 &#xff…

What are the differences between lsof and netstat on linux?

参考&#xff1a;https://stackoverflow.com/questions/49381124/what-are-the-differences-between-lsof-and-netstat-on-linux https://www.cnblogs.com/pc-boke/articles/10012112.html LSOF: List of Open Files. It lists all the open files belonging to all active pr…

C语言实现——简易通讯录

前言&#xff1a;小伙伴们又见面啦&#xff01;这几天通过我们对自定义数据类型的学习&#xff0c;我们已经掌握了如何同时对多种数据类型进行管理&#xff0c;那么今天这篇文章&#xff0c;我们就来干一件大事——实现简易的通讯录。 一.思路分析 先来想想通讯录有哪些功能&a…

Spring Boot:利用JPA进行数据库的查删

目录标题 DAO 、Service 、 Controller 层控制器文件示例代码-单个查找查找成功示例代码-列表查找查找成功示例代码-删除删除成功 DAO 、Service 、 Controller 层 DAO 层负责数据库访问&#xff0c;它封装了对数据库的访问操作&#xff0c;例如查询、插入、更新和删除等。 Q…

《向量数据库指南》——向量数据库Elasticsearch -> Milvus 2.x

Elasticsearch -> Milvus 2.x 1. 准备 ES 数据 要迁移 ES 数据,前提假设您已经拥有属于自己的 es Server(自建、ElasticCloud、阿里云 ES 等),向量数据存储在 dense_vector,以及其他字段在 index 中,index mapping 形式如: 2. 编译打包 首先下载迁移项目源码:https…

第P7周—咖啡豆识别(1)

数据集及wen件目录介绍&#xff1a; 数据集&#xff1a;工作台 - Heywhale.com 一、前期工作 1.1 数据详情 import torch import torch.nn as nn import torchvision.transforms as transforms import torchvision from torchvision import transforms, datasets import os,…

Ros2 学习02- ubuntu22.04 安装ros2

设置镜像源 sudo vim /etc/apt/sources.list#阿里源 deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jamm…

小波变换学习笔记【1】

【声明】本博客为学习B站视频小波分解与重构所做笔记&#xff0c;供自己和大家查阅学习&#xff0c;想查看 up 原视频请移步 B 站&#xff0c;侵删。 1.1 小波变换的由来 傅里叶变换基本思想&#xff1a;将信号分解成一系列不同频率的连续正弦波的叠加。 其缺点是&#xff0c;…

数据结构 | 二叉树

基本形状 可参照 数据结构&#xff1a;树(Tree)【详解】_数据结构 树_UniqueUnit的博客-CSDN博客 二叉树的性质 三种顺序遍历

基于Java的演唱会网上订票系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

记录一次SQL注入src挖掘过程

记录一次SQL注入src挖掘过程&#xff0c;小白挖洞 先是使用谷歌语法找到一个可以注入的网站 谷歌语法&#xff1a; 公司inurl:php?id 然后该公司的URL为 URL:XXXXXXXXXX/xxx.php?id1 输入测试有无注入&#xff0c;有没有waf 发现有报错 使用sqlmap寻找注入点 python…

golang 结合 cobra 使用 chatgpt qdrant 实现 ai知识库 cli

golang 结合 cobra 使用 chatgpt qdrant 实现 ai知识库 cli 流程 将数据集 通过 openai embedding 得到向量组装payload,存入 qdrant用户进行问题搜索,通过 openai embedding 得到向量,从 qdrant 中搜索相似度大于0.8的数据从 qdrant 中取出数据得到参考答案将问题标题参考答案…

Flutter笔记:用于ORM的Floor框架简记

Flutter笔记 用于ORM的Floor框架简记 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/133377191 【介绍】&#xff1a;最近想找用于Dart和Flutter的ORM框架&#xff0c;偶然间发现了Floor&#xff0c;觉得还不错&#xff0c;做一些记录。 1. Floor 框…

likeadmin和fastapi的bug

以下内容写于2023年8月11日 bug 1 请求体 - 多个参数 - FastAPI (tiangolo.com)中“请求体中的单一值”处&#xff0c;选python3.6&#xff0c;接口示例代码是 from typing import Unionfrom fastapi import Body, FastAPI from pydantic import BaseModel from typing_exte…

26662-2011 磁粉制动器 阅读笔记

声明 本文是学习GB-T 26662-2011 磁粉制动器. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了磁粉制动器(以下简称制动器)的术语&#xff0c;技术要求&#xff0c;试验方法&#xff0c;检验规则&#xff0c;标志、包装、运 输和…

【项目实战】单数据源多数据库实现多租户

文章目录 前言多租户的四种实现方案单数据源多数据库实现思路代码实现 总结 前言 多租户&#xff08;Multi-Tenancy&#xff09;是一种软件架构设计模式&#xff0c;旨在使单个应用程序可以同时为多个租户&#xff08;如不同组织、用户或客户&#xff09;提供服务&#xff0c;…