SpringBoot+Mybatis-Plus实现增删改查超详细步骤
目录
一、介绍
二、前期准备工作
(一) 创建springboot项目和创建数据库
三、项目配置
(一)pom.xl导入相关依赖
1.导入依赖
(二)yml文件中配置连接数据库
2.配置yml文件
四、代码的编写
数据库展示
项目提前展示!!!
(三)MySQL表绑定到spring boot(实体层)
3.1 创建实体包
3.2编写User类
(四)springboot绑定到mybatis-plus(数据层)
4.1创建mapper包
4.2编写UserMapper接口
(五)把数据层加工处理成逻辑业务(service服务层)
5.1创建service包
5.2编写获取内置增删改查方法接口IUserService
5.3编写自己定义的UserService
5.4编写服务层合成逻辑业务UserServiceImpl
5.5故事解读服务层接口和类
(六)调用服务层的皇帝
6.1创建controller包
6.2 编写调取业务层的UserController类
五、前端请求测试
一、介绍
本篇文章通过springboot整合mybatis-plus去实现后端对数据库的增删改查以及响应给前端的url,让前端获得数据。mybatis-plus技术是简化了繁琐的代码操作,把增删改查的语句都内置了,直接调用就可以实现数据库的增删改查了。还可以一定程度上防止SQL注入。缺点就是不够灵活,不过这个灵活的问题也可以自己去创建代码去弥补这个。
二、前期准备工作
(一) 创建springboot项目和创建数据库
1. spring boot项目的介绍和创建方式:SpringBoot项目的快速创建方式(包含第一个程序的运行)_云边的快乐猫的博客-CSDN博客
2.创建MySQL数据库和新建表的详细步骤:
创建MySQL数据库和创建表的详细步骤(navicat)_云边的快乐猫的博客-CSDN博客
三、项目配置
(一)pom.xl导入相关依赖
这里面有几个必须的依赖
1.web依赖,这个是创建时候就已经加入进去了,所以不用导入了(检查一下)
2.lombok依赖 ,这个是创建时候就已经加入进去了,所以不用导入了(检查一下)
3.mybatis-plus的依赖(来源baomidou)
4.mysql依赖
5.druid依赖(来源阿里巴巴德鲁伊)
6.swagger2依赖(拥有这个,注解@ApiModelProperty才能用)
1.导入依赖
在pom.xml文件里面导入相关的依赖。如果依赖加入不成功,就要检查自己的maven配置问题了
maven解决方案:
springboot添加maven环境详细步骤_云边的快乐猫的博客-CSDN博客
spring-boot-maven-plugin报红的解决办法_云边的快乐猫的博客-CSDN博客
<!--新加入的依赖1--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3</version></dependency><!--新加入的依赖2--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency><!--新加入的依赖3--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.16</version></dependency><!--新加入的依赖4 @ApiModelProperty这个才能用--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.7.0</version></dependency>
即:
(二)yml文件中配置连接数据库
2.配置yml文件
把application配置文件的后缀改为yml,这样看着更分明一点,然后再里面写入连接数据库的配置,建立和数据库的关联。具体的端口号默认是8080的,但是我改成了80端口了。
这里的第2、7、8、9行都要改为自己的
server:port: 80
spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/dndata?serverTimezone=GMT%2b8username: rootpassword: 123456
四、代码的编写
数据库展示
项目提前展示!!!
(三)MySQL表绑定到spring boot(实体层)
为什么要建立这个类?
可以这样理解,这一步骤是让数据库字段和后端代码的绑定
3.1 创建实体包
在项目下新建一个entity包,再新建一个类。类的命名就是User
命名来源:类名和数据库中的表名一样,不过首字母要大写,一个属性类对应一张数据库表。
3.2编写User类
这个实体类里面的属性要和数据库中的字段对应
看着注释去编写,还是很简单的,在最下面的注释也解释了每个注解的作用
User类
package com.example.mybatis.entity;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;/*
* 1.使用@Data注解
* 2.使用注解@TableName(value = "user") -----user这个是对应数据库的表名
* 3.编写和数据库字段对应的属性
* 4.加上文档注解@ApiModelProperty("用户的id")---里面的文字是相当于给自己看的备注
* 5.使用@TableId(value = "id", type = IdType.AUTO) //作用是标明当前属性主键,并且type = IdType.AUTO这个代表id自增
* */
@Data //1
@TableName(value = "user") //2
public class User {@ApiModelProperty("用户的id") //4@TableId(value = "id", type = IdType.AUTO) //5private Integer id; //3@ApiModelProperty("用户名") //4private String username; //3@ApiModelProperty("密码") //4private String password; //3
}/*
* 注解的解释
* @Data:注解是这个来源于lombok,内置了set、get、ToString等属性类里面我们需要写的东西,就不用我们写了* @TableName:注解是 MyBatis-Plus 框架中的一个注解,用于标识实体类与数据库表之间的映射关系。
* 它的作用是告诉 MyBatis-Plus 框架这个实体类对应哪个数据库表。* @ApiModelProperty:注解是 Swagger 框架中的一个注解,
* 用于给实体类的属性(字段)添加额外的文档说明,以便在生成 API 文档时提供更详细的描述和信息。
* Swagger是一个用于生成和展示 API 文档的工具,可以帮助开发人员更好地理解和使用 API。
*
* @TableId 注解用于标识表的主键字段,帮助 MyBatis-Plus 框架了解哪个属性在数据库中扮演主键的角色,
* 以及如何生成主键值。这对于数据库操作和映射非常重要。
* */
(四)springboot绑定到mybatis-plus(数据层)
为什么要创建这个接口呢?
因为为了把springboot获得的属性类再绑定给到mybatis-plus那边,然后绑定的这个接口给其他层调用。
4.1创建mapper包
项目下创建一个mapper包
4.2编写UserMapper接口
创建一个接口UserMapper,命名来源是属性类名+mapper,驼峰命名
到这里就可以使用mybatis-plus内置最原始的增删改查,但是不够灵活,只能做最简单的增删改查。
UserMapper类
package com.example.mybatis.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.mybatis.entity.User;
import org.apache.ibatis.annotations.Mapper;
/*
* 1.使用@Mapper注解 ,代表这个接口被mybatis接管
* 2.继承BaseMapper<属性类名>
* */
@Mapper
public interface UserMapper extends BaseMapper<User> {
}/*
* @Mapper:注解是 MyBatis 框架中的一个重要标识,
* 它定义了 Mapper 接口,用于与数据库交互。使用这个注解可以简化数据库操作代码,并提供一些优势,
* 如自动生成 SQL、类型安全性等。
* */
(五)把数据层加工处理成逻辑业务(service服务层)
为什么要这一层?
答:这一层次叫服务层,也叫业务层。因为上面的数据完全都绑定好了,可以实现增删改查了,但是那只是最原始的,封装的方法都很少,稍微复杂一点的分页查询方法里面都没有,所以要在这一层使用别人封装好的更好的方法以及各种逻辑都可以在这里写
5.1创建service包
5.2编写获取内置增删改查方法接口IUserService
MP官方的
为什么要写这个接口?
继承了MP(mybatis-plus)封装好的接口,我们需要的各种增删改查方法都在这里面给我们写好了,这个接口编写是为了给后面控制层去调用这个接口里面的增删改查方法。
你说的增删改查方法怎么看不到?
因为被MP封装到了 这个IService接口里面了
在service包下建立这个IUserService接口
IUserService接口
package com.example.mybatis.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.example.mybatis.entity.User;//1.继承IService这个接口,<实体类名>
public interface IUserService extends IService<User> {
}/*
IService接口里面有mybatis-plus封装好我们经常会用到的增删改查的一些方法
里面本质上还调用了上数据层mapper,是对mapper的封装优化
*/
5.3编写自己定义的UserService
在service包下建立这个UserService类
MP官方+自定义逻辑+自己调用数据层---咱自己的
5.2不是已经有可以调用增删改查的方法了吗,为什么还要写这个?
答:5.2那个接口是直接用MP内置的增删改查方法,可以正常用,但是我想对内置的这些增删改查再优化呢,比如数据的加密、数据的校验等逻辑处理。
而且我想根据我自己的需求来去给这些内置的增删改查嵌套或者升级自定义呢?
总而言之,这个是类底层是就是5.2接口的实现类,也就是说这个类包含了5.2的接口。还能自定义方法和对mapper数据层的调用,就比5.2接口的方法更加丰富,用于加上自定义处理繁琐的逻辑数据层
package com.example.mybatis.service;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.mybatis.entity.User;
import com.example.mybatis.mapper.UserMapper;
import org.springframework.stereotype.Service;/*
* 1.使用@Service注解,要不然咱自己定义的类,谁知道他是服务层
* 2.继承ServiceImpl,这个是MP内置增删改查接口的一个实现,牛逼的是还能自定义直接调取数据层的数据
* 3.定义需要的方法,根据自己的需要定义,定义MP内置里面没有的
* */
@Service
public class UserService extends ServiceImpl<UserMapper, User> {//下面这个方法是对数据库操作时候多加了一层封装,用不到去掉也没有影响。// 、作用可以定义密码加密、数据校验、关联数据处理、日志记录、通知或触发事件等public boolean saveUser(User user){return saveOrUpdate(user);}
}
5.4编写服务层合成逻辑业务UserServiceImpl
在service包下建立这个UserServiceImpl类
1.为什么要写这个实现类?
因为把5.2和5.3的方法都拿来这里组成逻辑业务,比如登录、校验、权限等
2.为什么不直接用5.3,那个里面不是也可以定义逻辑方法吗?
5.3那个自定义类主要用来处理一些对数据比较底层的方法,密码加密,校验这些底层。而这个类里面定义的是靠5.3那些小方法组起来的业务,比如登录、权限验证这些
总而言之,这里是业务的成型,调用5.3(主要)+5.2(次要)+一些逻辑组成业务
package com.example.mybatis.service.Impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.mybatis.entity.User;
import com.example.mybatis.mapper.UserMapper;
import com.example.mybatis.service.IUserService;
import org.springframework.stereotype.Service;
/*
* 1.@Service--------使用@Service注解,让人知道这个是服务层
* 2.extends ServiceImpl<UserMapper, User> ---继承和UserService类里面继承的方法一样,
* 但是这里面还偷偷藏了UserService自定义的方法
* 3.implements IUserService---实现接口
* */@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {//登录业务//登录校验业务//创建用户检查业务等等
}
5.5故事解读服务层接口和类
这么多服务层到底什么关系啊,这就来解读
这三个都是服务层的,看需要选择调用哪个
5.2(地主家傻儿子)是一个服务接口,去嵌套了MP内置的常用CRUD
地主家MP的傻儿子一样,什么都没有,只会调用他老爹写好的方法,不过有个好老爹,大部分常用的CRUD他都有了,控制层可以直接调用他
5.3(佣人的儿子)是一个服务类,嵌套内置CRUD+自研调用方法
这个类虽然和地主家傻儿子拥有一样的内置方法,但是却更上进,想要变得更强,所以可以自定义修炼很多方法:底层密码加密、数据校验、关联数据处理、日志记录、通知或触发事件,还能直接和数据层进行交互。
这个类厉害吧?是不是很完美?控制层不会调用他的,因为他这些方法都会被他爹实现类去组成各种逻辑业务
5.4(佣人)是一个实现服务类,继承有5.2地主家傻儿子,也实现了5.3亲儿子。大一统
在这里面实现各种业务。能在这里编写的都是业务了,比如拿5.3方法组成的登录业务、权限校验业务等等。
这个是老爹服务类。够厉害了吧。但是这个也不能被控制层直接调用,因为这个不是接口,根据设计的依赖倒置原则,调用接口可以达到解耦的效果。但是这些写的方法又不能浪费,只能继承了5.2地主家的傻儿子接口,让他帮我把这些逻辑都带出去。通过控制层构造器注入
(六)调用服务层的皇帝
为什么要这一层?
因为叫控制层,是皇帝。你想要什么,告诉我,我让服务层去弄逻辑业务。
要什么数据或者逻辑业务都要通过我控制层,直接找我拿就好了。
既然服务层都有了,那我为什么要你?
服务层的业务只有逻辑业务,涉及到导入导出这种正常的业务,还得是我来
那该去调用服务层的哪个?
找这个接口-----IUserService
这里面不但继承了地主MP的CRUD,还继承了实现类里面所有的业务逻辑
6.1创建controller包
6.2 编写调取业务层的UserController类
第一种理解方式
增删改查方法通用公式:
1
public 2 自定义类名( 3 4的数据类型 4 )
return 当前的全局服务类.服务类中的方法(4)
服务中的方法:查全部:list、根据ID查询:getById、新增和修改:saveOrUpdate、删除:removeById
1.数据查询一般用@GetMapping、对数据进行修改操作用@PostMapping、删除用@PostMapping。
前端:我要删除或者根据id查询,
后端:那你get给我id就好了,其他的交给我,就是在注解的后面加("/{id}")。如果是直接查询全部的,你连id都不用给我,我懂
前端:我要修改和增加东西,有很多字段的数据都要
后端:那你不能放请求头里面,不安全,用post请求,放到请求体里面吧
2.这个是希望后端给我的数据,增删改什么的只要告诉我是否成功就好,所以用布尔值。查询你就要告诉我查询到什么了,就用属性类名
3.这个是和1相关,post请求用@RequestBody,其他的都用@PathVariable去解析请求头的id变成json传给后端
4.这个也看1,前端传什么数据过来,这里就用什么数据。什么都没有写就是全部---就是属性类名
第二种理解方式
@注解 ---这个就是前端要给后端的传输定义
public 希望后端给前端的 自定义类名 ( post注解使用@RequestBody-反之 数据类型 对应前端传过来的 )
return 当前的全局服务类.服务类中的方法(数据类型对应前端传过来的)
package com.example.mybatis.controller;import com.example.mybatis.entity.User;
import com.example.mybatis.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;
/*
* 1.@RestController---添加控制层注解,让springboot知道这是控制层
* 2.@RequestMapping("/user")--- user代表默认访问路径在/user下可以访问
* */@RestController
@RequestMapping("/user")
public class UserController {@Autowired //4.自动注解private IUserService userService; //3.定义调用服务层的接口/**5.查询全部的数据5.1使用 @GetMapping注解,没有括号不定义就代表使用get方式,url访问上面默认路径/user5.2查询全部肯定使用的方法是集合<实体类>方式去自定义一个findAll方法名5.3再用服务层返回一个集合就好了*/@GetMappingpublic List<User> findAll(){return userService.list();}/*6.根据id查询一条6.1查询使用@GetMapping注解,既然是根据id查询,那么就要把id传给后端。但是get是不能传递请求体的,只能传递请求头,那么只能把这个值放在请求头上面,就是这样("/{id}")放6.2自定义一个方法名(@PathVariable 类型 id),为什么要用id呢?这不是你前端这个"/{id}"说要吗@PathVariable这个注解的方式就是把请求头中的数字以Json传递给后端去识别,后端不能直接识别url上面的数字6.3 再用服务层返回获取id的方法就好了*/@GetMapping("/{id}")public User findById(@PathVariable Integer id){return userService.getById(id);}/*7.新增和修改需要传递body传递全部参数,7.1对数据的操作使用@PostMapping,括号里面不定义就代表使用post方式,url访问上面默认路径/user7.2自定义一个方法,括号里面使用(@RequestBody 属性类 自定义属性昵称)为什么这里用Boolean而不是User,因为对数据的修改希望返回的结果就两种,要么成功,要么失败,所以用布尔值@RequestBody这个注解用于映射传递来的json参数映射为到java对象里面,特别是适用与请求体的参数7.3然后再用服务层返回获取的saveOrUpdate方法就好了*/@PostMappingpublic Boolean add(@RequestBody User user){return userService.saveOrUpdate(user);}/*8.删除的方法8.1使用@DeleteMapping注解,因为删除只需要传递一个特定的id给后端就可以了,所以括号里面使用("/{id}")8.2创建一个自定义的方法,删除也是要么成功要么失败,所以使用Boolean作为返回值@PathVariable在上面已经解释过了8.3再用服务层次返回对应的方法,括号里面的值就是上面括号里面需要的值* */@DeleteMapping("/{id}")public Boolean delete(@PathVariable Integer id){return userService.removeById(id);}}/* //修改数据的另一种写法@PostMapping("/update")public Boolean update(@RequestBody User user){return userService.updateById(user);}*/
到这里代码就全部编写完成了,不懂的去看上面的代码提前展示图和注释解释
MySQL--->属性类--->数据层mapper接口--->业务服务层service接口--->控制层(前后端交互)
按照规范,不能跨级调用接口,属性类除外
五、前端请求测试
测试的工具可以使用idea自带的,也可以使用postman等请求测试工具。
postman官网下载安装登录详细教程_云边的快乐猫的博客-CSDN博客
具体的测试方法
相关文章:

SpringBoot+Mybatis-Plus实现增删改查超详细步骤
目录 一、介绍 二、前期准备工作 (一) 创建springboot项目和创建数据库 三、项目配置 (一)pom.xl导入相关依赖 1.导入依赖 (二)yml文件中配置连接数据库 2.配置yml文件 四、代码的编写 数据库展…...

Qt应用开发(基础篇)——拆分器窗口 QSplitter QSplitterHandle
一、前言 QSplitter继承于QFrame,QFrame继承于QWidget,是Qt的一个部件容器工具类。 框架类QFrame介绍 QSplitter拆分器,用户通过拖动子部件之间的边界来控制子部件的大小,在应用开发中数据分模块展示、图片展示等场景下使用。 二、…...
屏幕尺寸单位 px、em、rem区别
1、px是屏幕设备物理上能显示出的最小的一个点,这个点不是固定宽度的,不同设备上点的长宽、比例有可能会不同。假设:1号显示器上1px宽1毫米,但2号显示器1px宽两毫米,那么定义一个div宽度为100px,1号显示器上…...

yo!这里是STL::list类简单模拟实现
目录 前言 重要接口实现 框架 默认成员函数 迭代器(重点) 1.引言 2.list迭代器类实现 3.list类中调用实现 增删查改 后记 前言 我们知道,stl中的vector对应数据结构中的顺序表,string类对应字符串,而今天要…...

小程序商城开发制作
当开发一个商城小程序时,费用是一个非常重要的考虑因素。然而,准确回答这个问题是有一定困难的,因为开发商城小程序的费用取决于多个因素。以下是一些可能影响价格的主要因素: 1. 功能需求:商城小程序的复杂程度和功能…...

并发编程面试题2
并发编程面试题2 一、AQS高频问题: 1.1 AQS是什么? AQS就是一个抽象队列同步器,abstract queued sychronizer,本质就是一个抽象类。 AQS中有一个核心属性state,其次还有一个双向链表以及一个单项链表。 首先state…...

关于eclipse导入部署具有增删改查的项目
目录 前言:当我们刚刚进入公司的第一步就是去部署当前公司的项目,本博客就是详细介绍怎么去部署当前公司的项目。 一,开发工具: 二,具体步骤: 2.1导入公司的项目 打开eclipse开发工具 2.2配置当前的环…...

c++日志工具之——log4cpp
1、log4cpp概述 Log4cpp是一个开源的C类库,它提供了C程序中使用日志和跟踪调试的功能,它的优点如下: 提供应用程序运行上下文,方便跟踪调试; 可扩展的、多种方式记录日志,包括命令行、文件、回卷文件、内…...

ES索引重建reindex详解
目录 一、使用场景 二、reindex介绍 三、使用手册 1、覆盖更新 2、创建丢失的文档并更新旧版本的文档 3、仅创建丢失的文档 4、冲突处理 5、source中添加查询条件 6、source中包含多个源索引 7、限制处理的记录数 8、从远程ES集群中重建索引 9、提取随机子集 10、…...

前沿分享-中距离射频取电
目前来看,微能源有四种技术路线,一是环境光采集、温差转换采集、无线射频采集和振动能量采集。 无线射频微能源是在通信设备通信过程中自然产生的,可以通过射频能量芯片实现无线射频取电,能瞬间大功率储电和安全驱动负载。 通过射…...

UnrealEngine - 网络同步之连接篇
1 连接过程 - 握手 传统的 C/S 架构下,Client 和 Server 通常会建立一条抽象的 Connection,用来进行两端的通信。 UE 的官方文档中提供了 Client 连接到 Server 的示例 ,简单来说分为如下几步: 打包构建好 Client 和 Server 进程…...

【JDBC系列】- 扩展提升学习
扩展提升学习 😄生命不息,写作不止 🔥 继续踏上学习之路,学之分享笔记 👊 总有一天我也能像各位大佬一样 🏆 博客首页 怒放吧德德 To记录领地 🌝分享学习心得,欢迎指正࿰…...

阻塞和非阻塞,同步和异步
文章目录 典型的一次IO的两个阶段IO多路复用是同步还是异步? 典型的一次IO的两个阶段 数据就绪和数据读写 同步:需要应用程序自己操作 IO多路复用是同步还是异步? epoll也是同步的 具体数据读取还是通过应用程序自己完成的 只有使用了特…...

提速Rust编译器!
Nethercote是一位研究Rust编译器的软件工程师。最近,他正在探索如何提升Rust编译器的性能,在他的博客文章中介绍了Rust编译器是如何将代码分割成代码生成单元(CGU)的以及rustc的性能加速。 他解释了不同数量和大小的CGU之间的权衡…...

QT创建项目
可选择CMake或qmake...

基于vue3+webpack5+qiankun实现微前端
一 主应用改造(又称基座改造) 1 在主应用中安装qiankun(npm i qiankun -S) 2 在src下新建micro-app.js文件,用于存放所有子应用。 const microApps [// 当匹配到activeRule 的时候,请求获取entry资源,渲染到containe…...
华为OD真题--完美走位--带答案
2023华为OD统一考试(AB卷)题库清单-带答案(持续更新)or2023年华为OD真题机考题库大全-带答案(持续更新) 题目描述 输入一个长度为4的倍数的字符串Q,字符串中仅包含WASD四个字母。 将这个字符串中的连续子串…...

【AI】《动手学-深度学习-PyTorch版》笔记(十四):多层感知机
AI学习目录汇总 1、多层感知机网络结构 1.1 线性模型:softmax回归 在前面介绍过,使用softmax回归来处理分类问题时,每个输出通过都一个仿射函数计算,网络结构如下,输入和输出之间为全链接层: 1.2 多层感知机 多层感知机就是在输入和输出中间再添加一个或多个全链接…...

本地开发 npm 好用的http server、好用的web server、静态服务器
好用的web server总结 有时需要快速启动一个web 服务器(http服务器)来伺服静态网页,安装nginx又太繁琐,那么可以考虑使用npm serve、http-server、webpack-dev-server。 npm serve npm 的serve可以提供给http server功能&#…...

Gradio入门,并搭个鸡兔同笼问题小应用,附源码(MindOpt)
应用链接: https://979427749bc9ceec34.gradio.live 是公开访问链接,3天有效。 在modelscope中的创空间发布长期有效:https://modelscope.cn/studios/wuyoy520v01/MindOpt_Chicken-with-rabbit-cage/summary。 应用图如下,源代码见正文。 知…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...