Spring Boot + MyBatis 项目中常用注解详解(万字长篇解读)
Spring Boot + MyBatis 项目中常用注解详解
在现代Java开发中,Spring Boot和MyBatis是两大热门框架,广泛应用于构建高效、可维护的企业级应用。两者结合使用,可以充分发挥各自的优势,提高开发效率和代码质量。在这个过程中,注解(Annotations)起到了关键作用。本文将详细、全面地讲解在Spring Boot + MyBatis项目中常用的注解及其含义和作用,并通过分类整理,帮助开发者更好地理解和运用这些工具。
目录
- Spring Boot + MyBatis 项目中常用注解详解
- Spring Boot 常用注解
- 核心注解
- @SpringBootApplication
- 组件标识注解
- @RestController
- @Controller
- @Service
- @Repository
- @Component
- 依赖注入注解
- @Autowired
- @Qualifier
- @Inject
- 配置注解
- @Configuration
- @Bean
- @Value
- @ConfigurationProperties
- 事务管理注解
- @Transactional
- Web层注解
- 请求映射注解
- @RequestMapping
- @GetMapping
- @PostMapping
- @PutMapping
- @DeleteMapping
- 参数绑定注解
- @PathVariable
- @RequestParam
- @RequestBody
- @ResponseBody
- MyBatis 常用注解
- Mapper接口注解
- @Mapper
- SQL操作注解
- @Select
- @Insert
- @Update
- @Delete
- 参数绑定注解
- @Param
- 结果映射注解
- @Results 和 @Result
- 关联映射注解
- @One 和 @Many
- 综合示例
- 项目结构
- 1. 主类
- 2. 实体类
- 3. Mapper 接口
- 4. 服务类
- 5. 控制器类
- 6. 配置文件
- 总结
- 附录:常用注解对照表
Spring Boot 常用注解
Spring Boot 提供了丰富的注解来简化开发过程。以下将这些注解按照功能进行分类,便于理解和应用。
核心注解
@SpringBootApplication
含义与作用:@SpringBootApplication 是一个复合注解,包含了 @Configuration、@EnableAutoConfiguration 和 @ComponentScan。用于标注主类,启用Spring Boot的自动配置和组件扫描功能。
示例:
@SpringBootApplication
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}
组件标识注解
这些注解用于标识不同层次的组件,便于Spring进行自动扫描和管理。
@RestController
含义与作用:@RestController 是 @Controller 和 @ResponseBody 的组合注解,用于标识控制器类,适用于构建RESTful Web服务。所有方法返回的对象会自动序列化为JSON或XML。
示例:
@RestController
@RequestMapping("/api")
public class UserController {@GetMapping("/users")public List<User> getAllUsers() {// 返回用户列表}
}
@Controller
含义与作用:@Controller 用于标识控制器类,通常与视图解析器(如Thymeleaf)配合使用,适用于传统的MVC模式。
示例:
@Controller
public class HomeController {@GetMapping("/")public String home(Model model) {model.addAttribute("message", "Hello World");return "home";}
}
@Service
含义与作用:@Service 用于标识业务逻辑层的组件,增强代码的可读性和可维护性。它也是一个 @Component,因此会被Spring扫描和管理。
示例:
@Service
public class UserService {@Autowiredprivate UserRepository userRepository;public List<User> getAllUsers() {return userRepository.findAll();}
}
@Repository
含义与作用:@Repository 用于标识数据访问层的组件,通常与持久化技术(如JPA、MyBatis)结合使用。它还提供了异常转换功能,将持久层异常转换为Spring的统一异常。
示例:
@Repository
public class UserRepository {@Autowiredprivate JdbcTemplate jdbcTemplate;public List<User> findAll() {// 查询数据库}
}
@Component
含义与作用:@Component 是一个通用的Spring管理的组件注解,用于标识任何Spring管理的Bean。其他注解(如 @Service、@Repository、@Controller)都是 @Component 的特化。
示例:
@Component
public class Utility {public void performTask() {// 执行任务}
}
依赖注入注解
这些注解用于实现Spring的依赖注入机制,简化Bean的管理和使用。
@Autowired
含义与作用:@Autowired 用于自动装配Bean,可以应用于构造函数、字段或Setter方法。Spring会根据类型自动注入匹配的Bean。
示例:
@Service
public class OrderService {@Autowiredprivate OrderRepository orderRepository;// 或者通过构造函数注入// private final OrderRepository orderRepository;//// @Autowired// public OrderService(OrderRepository orderRepository) {// this.orderRepository = orderRepository;// }
}
@Qualifier
含义与作用:@Qualifier 与 @Autowired 一起使用,用于在多个Bean候选者中指定要注入的具体Bean。
示例:
@Service
public class PaymentService {@Autowired@Qualifier("creditCardPayment")private PaymentProcessor paymentProcessor;
}
@Inject
含义与作用:@Inject 是JSR-330规范的注解,与 @Autowired 类似,用于实现依赖注入。功能上与 @Autowired 基本相同,但不支持 required 属性。
示例:
@Service
public class NotificationService {@Injectprivate EmailService emailService;
}
配置注解
用于定义和管理应用的配置和Bean。
@Configuration
含义与作用:@Configuration 用于标识配置类,类似于传统的XML配置文件。可以在配置类中定义Bean,并进行依赖注入的配置。
示例:
@Configuration
public class AppConfig {@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}
}
@Bean
含义与作用:@Bean 用于在 @Configuration 类中定义Bean,Spring会管理这些Bean的生命周期和依赖。
示例:
@Configuration
public class DataSourceConfig {@Beanpublic DataSource dataSource() {// 配置数据源}
}
@Value
含义与作用:@Value 用于注入配置文件中的属性值,可以注入到字段、方法参数或构造函数参数中。
示例:
@Component
public class AppProperties {@Value("${app.name}")private String appName;@Value("${app.version}")private String appVersion;
}
@ConfigurationProperties
含义与作用:@ConfigurationProperties 用于将配置文件中的属性映射到一个Java对象中,适用于大量相关属性的绑定。
示例:
@Component
@ConfigurationProperties(prefix = "app")
public class AppProperties {private String name;private String version;// getters and setters
}
事务管理注解
用于声明事务管理,确保数据一致性和完整性。
@Transactional
含义与作用:@Transactional 用于声明事务管理,适用于需要事务控制的方法或类。可以指定事务的传播行为、隔离级别、回滚规则等。
示例:
@Service
public class PaymentService {@Transactionalpublic void processPayment(Order order) {// 执行支付逻辑}
}
Web层注解
用于处理Web请求和响应,简化控制器的开发。
请求映射注解
这些注解用于定义HTTP请求的路径和方法,简化路由配置。
@RequestMapping
含义与作用:@RequestMapping 用于定义请求的URL路径和HTTP方法,适用于类级别和方法级别。它是一个通用的映射注解,可以通过 method 属性指定具体的HTTP方法。
示例:
@RestController
@RequestMapping("/api")
public class UserController {@RequestMapping(value = "/users", method = RequestMethod.GET)public List<User> getAllUsers() {// 返回用户列表}
}
@GetMapping
含义与作用:@GetMapping 是 @RequestMapping 的快捷方式,用于处理HTTP GET请求。适用于方法级别,简化代码。
示例:
@GetMapping("/users")
public List<User> getAllUsers() {// 返回用户列表
}
@PostMapping
含义与作用:@PostMapping 是 @RequestMapping 的快捷方式,用于处理HTTP POST请求。适用于方法级别,简化代码。
示例:
@PostMapping("/users")
public ResponseEntity<Void> createUser(@RequestBody User user) {// 创建用户
}
@PutMapping
含义与作用:@PutMapping 是 @RequestMapping 的快捷方式,用于处理HTTP PUT请求。适用于方法级别,简化代码。
示例:
@PutMapping("/users/{id}")
public ResponseEntity<Void> updateUser(@PathVariable Long id, @RequestBody User user) {// 更新用户
}
@DeleteMapping
含义与作用:@DeleteMapping 是 @RequestMapping 的快捷方式,用于处理HTTP DELETE请求。适用于方法级别,简化代码。
示例:
@DeleteMapping("/users/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable Long id) {// 删除用户
}
参数绑定注解
这些注解用于将HTTP请求中的参数绑定到控制器方法的参数上。
@PathVariable
含义与作用:@PathVariable 用于绑定URL路径中的变量到方法参数,常用于RESTful API中的资源标识。
示例:
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {// 根据ID获取用户
}
@RequestParam
含义与作用:@RequestParam 用于绑定HTTP请求中的参数到方法参数,适用于查询参数或表单参数。
示例:
@GetMapping("/search")
public List<User> searchUsers(@RequestParam String name, @RequestParam int age) {// 根据姓名和年龄搜索用户
}
@RequestBody
含义与作用:@RequestBody 用于将HTTP请求体中的JSON或XML数据绑定到方法参数,常用于处理POST和PUT请求中的数据。
示例:
@PostMapping("/users")
public ResponseEntity<Void> createUser(@RequestBody User user) {// 创建用户
}
@ResponseBody
含义与作用:@ResponseBody 用于将方法返回的对象序列化为JSON或XML并写入HTTP响应体,通常与 @Controller 一起使用。@RestController 已经包含了 @ResponseBody 的功能。
示例:
@Controller
public class UserController {@GetMapping("/users")@ResponseBodypublic List<User> getAllUsers() {// 返回用户列表}
}
MyBatis 常用注解
MyBatis 是一个优秀的持久层框架,通过映射语句将数据库操作与Java方法关联。MyBatis提供了一系列注解,简化了XML映射文件的使用。
Mapper接口注解
@Mapper
含义与作用:@Mapper 用于标识MyBatis的Mapper接口,Spring会自动扫描并生成代理对象。通常与 @MapperScan 配合使用。
示例:
@Mapper
public interface UserMapper {@Select("SELECT * FROM users WHERE id = #{id}")User getUserById(@Param("id") Long id);
}
SQL操作注解
这些注解用于定义具体的SQL语句,关联到Mapper接口的方法上,实现数据库的CRUD操作。
@Select
含义与作用:@Select 用于标注查询语句,关联到接口的方法上,实现数据库的查询操作。
示例:
@Mapper
public interface UserMapper {@Select("SELECT * FROM users")List<User> getAllUsers();
}
@Insert
含义与作用:@Insert 用于标注插入语句,关联到接口的方法上,实现数据库的插入操作。
示例:
@Mapper
public interface UserMapper {@Insert("INSERT INTO users(name, email) VALUES(#{name}, #{email})")@Options(useGeneratedKeys = true, keyProperty = "id")void insertUser(User user);
}
@Update
含义与作用:@Update 用于标注更新语句,关联到接口的方法上,实现数据库的更新操作。
示例:
@Mapper
public interface UserMapper {@Update("UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}")void updateUser(User user);
}
@Delete
含义与作用:@Delete 用于标注删除语句,关联到接口的方法上,实现数据库的删除操作。
示例:
@Mapper
public interface UserMapper {@Delete("DELETE FROM users WHERE id = #{id}")void deleteUser(@Param("id") Long id);
}
参数绑定注解
@Param
含义与作用:@Param 用于给方法参数命名,以便在SQL语句中引用。特别适用于有多个参数的方法。
示例:
@Mapper
public interface UserMapper {@Select("SELECT * FROM users WHERE name = #{name} AND age = #{age}")List<User> getUsersByNameAndAge(@Param("name") String name, @Param("age") int age);
}
结果映射注解
这些注解用于定义查询结果与Java对象属性的映射关系,适用于字段名与属性名不一致的情况。
@Results 和 @Result
含义与作用:@Results 和 @Result 用于定义查询结果与Java对象属性的映射关系,适用于字段名与属性名不一致的情况。
示例:
@Mapper
public interface UserMapper {@Select("SELECT id, user_name, email_address FROM users WHERE id = #{id}")@Results({@Result(property = "id", column = "id"),@Result(property = "name", column = "user_name"),@Result(property = "email", column = "email_address")})User getUserById(@Param("id") Long id);
}
关联映射注解
用于定义对象之间的一对一或一对多关系,适用于复杂的对象关系映射。
@One 和 @Many
含义与作用:@One 和 @Many 用于定义一对一和一对多的关联关系,适用于复杂的对象关系映射。
示例:
@Mapper
public interface OrderMapper {@Select("SELECT * FROM orders WHERE id = #{id}")@Results({@Result(property = "id", column = "id"),@Result(property = "user", column = "user_id", one = @One(select = "com.example.mapper.UserMapper.getUserById"))})Order getOrderById(@Param("id") Long id);
}
综合示例
为了更好地理解上述注解的应用,下面通过一个简单的用户管理系统示例,展示Spring Boot与MyBatis如何协同工作。
项目结构
src
├── main
│ ├── java
│ │ └── com.example.demo
│ │ ├── DemoApplication.java
│ │ ├── controller
│ │ │ └── UserController.java
│ │ ├── service
│ │ │ └── UserService.java
│ │ ├── mapper
│ │ │ └── UserMapper.java
│ │ └── model
│ │ └── User.java
│ └── resources
│ └── application.properties
1. 主类
@SpringBootApplication
@MapperScan("com.example.demo.mapper")
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}
说明:@MapperScan 指定MyBatis的Mapper接口扫描路径,确保@Mapper接口能够被正确识别和代理。
2. 实体类
public class User {private Long id;private String name;private String email;// getters and setters
}
3. Mapper 接口
@Mapper
public interface UserMapper {@Select("SELECT * FROM users")List<User> getAllUsers();@Select("SELECT * FROM users WHERE id = #{id}")User getUserById(@Param("id") Long id);@Insert("INSERT INTO users(name, email) VALUES(#{name}, #{email})")@Options(useGeneratedKeys = true, keyProperty = "id")void insertUser(User user);@Update("UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}")void updateUser(User user);@Delete("DELETE FROM users WHERE id = #{id}")void deleteUser(@Param("id") Long id);
}
4. 服务类
@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public List<User> getAllUsers() {return userMapper.getAllUsers();}public User getUserById(Long id) {return userMapper.getUserById(id);}public void createUser(User user) {userMapper.insertUser(user);}public void updateUser(User user) {userMapper.updateUser(user);}public void deleteUser(Long id) {userMapper.deleteUser(id);}
}
5. 控制器类
@RestController
@RequestMapping("/api/users")
public class UserController {@Autowiredprivate UserService userService;// 获取所有用户@GetMappingpublic List<User> listUsers() {return userService.getAllUsers();}// 根据ID获取用户@GetMapping("/{id}")public ResponseEntity<User> getUser(@PathVariable Long id) {User user = userService.getUserById(id);if(user != null){return ResponseEntity.ok(user);} else {return ResponseEntity.notFound().build();}}// 创建用户@PostMappingpublic ResponseEntity<Void> createUser(@RequestBody User user) {userService.createUser(user);return ResponseEntity.status(HttpStatus.CREATED).build();}// 更新用户@PutMapping("/{id}")public ResponseEntity<Void> updateUser(@PathVariable Long id, @RequestBody User user) {user.setId(id);userService.updateUser(user);return ResponseEntity.ok().build();}// 删除用户@DeleteMapping("/{id}")public ResponseEntity<Void> deleteUser(@PathVariable Long id) {userService.deleteUser(id);return ResponseEntity.noContent().build();}
}
6. 配置文件
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Drivermybatis.configuration.map-underscore-to-camel-case=true# 显示SQL语句
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
说明:
map-underscore-to-camel-case=true:自动将数据库下划线命名转换为Java的驼峰命名。log-impl:设置MyBatis的日志实现,这里使用标准输出日志。
总结
在Spring Boot + MyBatis项目中,注解的使用极大地简化了配置和开发流程。通过合理运用各种注解,可以实现代码的高内聚低耦合,提升项目的可维护性和扩展性。本文按照功能对Spring Boot和MyBatis中的常用注解进行了分类讲解,并通过一个综合示例展示了它们的实际应用。希望能帮助开发者在实际项目中更好地理解和运用这些注解,构建高效、稳定的应用系统。
附录:常用注解对照表
| 注解类别 | 注解名称 | 作用 |
|---|---|---|
| 核心注解 | @SpringBootApplication | 标注主类,启用自动配置和组件扫描 |
| 组件标识注解 | @RestController | 标识REST控制器,返回JSON/XML数据 |
@Controller | 标识MVC控制器,返回视图 | |
@Service | 标识业务逻辑层组件 | |
@Repository | 标识数据访问层组件,提供异常转换 | |
@Component | 通用组件注解 | |
| 依赖注入注解 | @Autowired | 自动装配Bean |
@Qualifier | 指定注入的具体Bean | |
@Inject | 实现依赖注入(JSR-330规范) | |
| 配置注解 | @Configuration | 标识配置类 |
@Bean | 定义Bean | |
@Value | 注入配置属性值 | |
@ConfigurationProperties | 绑定配置属性到Java对象 | |
| 事务管理注解 | @Transactional | 声明事务管理 |
| Web层注解 | @RequestMapping | 定义请求路径和方法 |
@GetMapping | 处理GET请求 | |
@PostMapping | 处理POST请求 | |
@PutMapping | 处理PUT请求 | |
@DeleteMapping | 处理DELETE请求 | |
@PathVariable | 绑定URL路径变量到方法参数 | |
@RequestParam | 绑定请求参数到方法参数 | |
@RequestBody | 绑定请求体到方法参数 | |
@ResponseBody | 将方法返回值序列化到响应体 | |
| MyBatis注解 | @Mapper | 标识Mapper接口 |
@Select | 定义SELECT语句 | |
@Insert | 定义INSERT语句 | |
@Update | 定义UPDATE语句 | |
@Delete | 定义DELETE语句 | |
@Param | 命名方法参数 | |
@Results | 定义结果集映射 | |
@Result | 定义单个结果映射 | |
@One | 定义一对一关联 | |
@Many | 定义一对多关联 |
通过对这些注解的深入理解和正确使用,可以有效提升Spring Boot + MyBatis项目的开发效率和代码质量。
摊牌了,不装了,整理不易,我想要你手中的赞和关注🌼🌼🌼
相关文章:
Spring Boot + MyBatis 项目中常用注解详解(万字长篇解读)
Spring Boot MyBatis 项目中常用注解详解 在现代Java开发中,Spring Boot和MyBatis是两大热门框架,广泛应用于构建高效、可维护的企业级应用。两者结合使用,可以充分发挥各自的优势,提高开发效率和代码质量。在这个过程中&#x…...
AWS Network Firewall -NAT网关配置只应许白名单域名出入站
1. 创建防火墙 选择防火墙的归属子网(选择公有子网) 2. 创建规则白名单域名放行 3. 绑定相关规则 继续往下拉 绑定非托管规则 4. 配置网络路由 相关规则 参考图 解释 防火墙的归属公有子网路由表规则机器实例的规则子网路由表规则nat网管路…...
【C语言系统编程】【第二部分:并发编程】2.3 实践与案例分析
2.3 实践与案例分析 2.3.1 案例分析:多线程文件搜索程序 本文中,我们将通过一个多线程文件搜索程序的案例,展示如何在实际项目中应用多线程编程技术,并具体介绍任务分解、线程创建、结果汇总及锁机制的应用。 2.3.1.1 任务分解…...
React -AppVarContext.Provider 提供者组件
AppVarContext.Provider 是一个 React 上下文提供者,通常用于在组件树中提供共享的状态或数据。下面将详细解释 AppVarContext.Provider 的作用和如何使用它。展示如何使用 AppVarContext.Provider 来管理全局状态 1. 什么是上下文(Context)…...
【Python】解密用户代理:使用 Python User Agents 库探索浏览器和设备信息
Python User Agents 是一个专为解析 User Agent 字符串而设计的 Python 库。它能够轻松识别访问设备的类型(如移动设备、桌面设备或平板),并获取设备、浏览器、操作系统等详细信息。借助它,开发者可以更好地了解访问用户的设备属性…...
以串口接口为例介绍关于BSP底层架构开发的迭代过程
以串口接口为例介绍关于BSP底层架构开发的迭代过程 文章目录 以串口接口为例介绍关于BSP底层架构开发的迭代过程架构概述初代BSP二代BSP:三代BSP:四代BSP:架构概述 单片机开发有四个阶段: 阶段一:单一单片机的功能实现阶段 此阶段你开始熟悉STM32F1系列的单片机,并利用…...
Label-Studio ML利用yolov8模型实现自动标注
引言 Label Studio ML 后端是一个 SDK,用于包装您的机器学习代码并将其转换为 Web 服务器。Web 服务器可以连接到正在运行的 Label Studio 实例,以自动执行标记任务。我们提供了一个示例模型库,您可以在自己的工作流程中使用这些模型&#x…...
【PostgreSQL】实战篇——用户管理、角色和权限控制的高级用法及技巧
数据库中用户管理、角色和权限控制不仅仅是基础的安全措施,更是实现复杂应用需求和优化数据库性能的重要手段。 通过深入理解这些概念,数据库管理员可以更有效地管理用户访问、确保数据安全,并优化系统性能。以下是对这些概念的详细介绍以及…...
Leetcode: 0011-0020题速览
Leetcode: 0011-0020题速览 本文材料来自于LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解 遵从开源协议为知识共享 版权归属-相同方式…...
Hive数仓操作(七)
一、 Hive动态分区表 1. 动态分区与静态分区的区别 分区定义: 静态分区:在插入数据时,需要手动指定分区字段的值。动态分区:分区字段的值是根据数据中的某个字段自动生成的,用户只需指定分区字段的类型。 数据加载方…...
Redis进阶篇 - 缓存穿透、缓存击穿、缓存雪崩问题及其解决方案
文章目录 1 文章概述2 缓存穿透2.1 什么是缓存穿透?2.2 缓存穿透的解决方法2.2.1 做好参数校验2.2.2 缓存无效Key2.2.3 使用布隆过滤器2.2.4 接口限流 3 缓存击穿3.1 什么是缓存击穿?3.2 缓存击穿的解决方法3.2.1 调整热点数据过期时间3.2.2 热点数据预热…...
一天认识一个硬件之电源
无论是台式机还是笔记本,都离不开电源,台式机和笔记本电脑的电源都承担着将交流电转换为直流电,并为电脑内部各个部件提供稳定电力供应的重要任务。今天就来分享一下台式机和笔记本的电源区别 设计和功率 台式机电源:设计为内置…...
关于BSV区块链覆盖网络的常见问题解答(上篇)
发表时间:2024年9月20日 在BSV区块链上的覆盖网络服务为寻求可扩展、安全、高效交易处理解决方案的开发者和企业家开辟了新的视野。 作为开创性的曼达拉升级的一部分,覆盖网络服务提供了一个强大的框架,用于管理特定类型的交易和数据访问…...
VUE 开发——Node.js学习(一)
一、认识Node.js Node.js是一个跨平台JavaScript运行环境,使开发者可以搭建服务器端的JavaScript应用程序 使用Node.js编写服务器端程序——编写数据接口、前端工程化; Node.js环境没有BOM和DOM; Node.js安装:下载node-v16.19…...
角膜移植难题现,传统方式缺陷显,创新水凝胶破局
大家好!今天来了解一篇天然聚合物衍生光固化生物粘附水凝胶研究——《Natural polymer-derived photocurable bioadhesive hydrogels for sutureless keratoplasty》发表于《Bioactive Materials》。本文介绍了一种用于无缝合角膜移植术的天然聚合物衍生光固化生物粘…...
探索Spring Boot:实现“衣依”服装电商平台
1系统概述 1.1 研究背景 如今互联网高速发展,网络遍布全球,通过互联网发布的消息能快而方便的传播到世界每个角落,并且互联网上能传播的信息也很广,比如文字、图片、声音、视频等。从而,这种种好处使得互联网成了信息传…...
使用 cron 来设置定时任务
使用 cron 来设置定时任务,以便定期运行这个脚本。 在 Linux 系统中设置定时任务的步骤: 1. 编辑 cron 任务 打开终端并输入以下命令以编辑 crontab 文件: crontab -e2. 设置每天 8 点运行脚本 在 crontab 文件的最后,添加以下…...
C# Blazor Server 调用海康H5Player播放摄像头画面
目标 调用海康综合安防平台api,通过摄像头的cameraIndexCode调用【获取监控点预览取流URLv2】api,得到websocket 的url,然后在blazor server中使用htplayer.js播放摄像头实时画面。 步骤 根据摄像头名字,调用【查询监控点列表v2…...
CSS实现服务卡片
CSS实现服务卡片 效果展示 CSS 知识点 回顾整体CSS知识点灵活运用CSS知识点 页面整体布局 <div class"container"><div class"card"><div class"box"><div class"icon"><ion-icon name"color-pal…...
问:如何判断系统环境是大端/小端存储?
大端存储(Big Endian)和小端存储(Little Endian)是两种不同的字节序(即字节顺序)规则,用于在计算机中存储和表示多字节数据类型(例如整数)。 概念解释 大端存储&#x…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
