SpringBoot整合Mybatis-Plus实践汇总
相关依赖
MyBatis-Plus涉及的依赖主要是Mybatis-start、和分页插件的依赖,不考虑使用额外分页插件的前提下,只需要mybatis-plus-boot-starter一个依赖即可与SpringBoot集成:
<!--Mybatis-plugs--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version></dependency>
SpringBoot基本引入Mybatis-Plus用法
Mybatis-plus的配置详解
SpringBoot引入Mybatis-Plus遵循start原则,配置化继承自Mybatis,关于数据库配置保持一致即可
spring:#数据库连接配置datasource:url: jdbc:mysql://localhost:3306/db_blog?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghaiusername: rootpassword: 1234driver-class-name: com.mysql.cj.jdbc.Driver
以下是Mybatis-Plus独有的配置
# MyBatis-Plus 配置
mybatis-plus:# MyBatis-Plus 的全局配置global-config:#banner图是否在日志中输出banner: off# 数据库相关配置db-config:# 主键类型id-type: auto # 可选值:auto, assign_id, assign_uuid, input# MyBatis-Plus 的配置configuration:# 是否开启驼峰命名转换map-underscore-to-camel-case: true# 日志实现log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 控制台输出 SQL 日志# 类路径下的 Mapper XML 文件位置mapper-locations: classpath*:mapper/*.xml# 类型别名包type-aliases-package: com.example.myapp.entity # 实体类所在的包(默认不需要额外配置)
如无特殊要求情况下,只需要简化配置即可, 其他配置项会自动不使用或者使用缺省值,以下为一个简化配置样例:
mybatis-plus:global-config:banner: offmapper-locations: classpath*:mapper/*.xml#configuration:#log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 调试环境下打开,开启sql日志打印
基本代码结构
实体类
实体类定义,实体类主要与表或者业务概念对应,一般与表对应时,可配合使用相关的@Table家族注解:
@Data
//指定数据库中的表
@TableName("tb_artitle_data")
public class ArticleEntity implements Serializable {@TableIdprivate Int id;private String artName;private String artDesc;private String artUrl;private String artTime;//表中无此字段,Mapper处理时可略过此字段@TableField(exist = false)private String auth;
}
创建Mapper,相比于Mybatis的Mapper需要与XML关联,Mybatis-Plus的优势在于,对于基础的增删改查,可以不需要额外创建XML,如下:
@Mapper
//只需要Mapper注解,然后继承BaseMapper即可,泛型指定为对应表的实体类
public interface ArticleMapper extends BaseMapper<ArticleEntity> {
}
简单使用,直接在Service代码中引入Mapper,使用BaseMapper中已经定义好的方法,结合QueryWrapper方法,省略SQL
@Service
public class ArticleServiceImpl implements ArticleService {@Autowiredprivate ArticleMapper articleMapper;// 新增文章@Overridepublic boolean addArticle(ArticleEntity article) {return articleMapper.insert(article) > 0;}// 删除文章@Overridepublic boolean deleteArticle(String id) {return articleMapper.deleteById(id) > 0;}// 更新文章@Overridepublic boolean updateArticle(ArticleEntity article) {return articleMapper.updateById(article) > 0;}// 根据ID查询文章@Overridepublic ArticleEntity getArticleById(String id) {return articleMapper.selectById(id);}// 查询所有文章@Overridepublic List<ArticleEntity> getAllArticles() {return articleMapper.selectList(null);}// 分页查询文章@Overridepublic IPage<ArticleEntity> getArticlesByPage(int currentPage, int pageSize) {Page<ArticleEntity> page = new Page<>(currentPage, pageSize);return articleMapper.selectPage(page, null);}// 多条件组合查询文章public List<ArticleEntity> getArticlesByMultipleConditions(String artName, String artDesc, String artUrl, String startTime, String endTime) {QueryWrapper<ArticleEntity> queryWrapper = new QueryWrapper<>();if (artName != null && !artName.isEmpty()) {queryWrapper.eq("art_name", artName);}if (artDesc != null && !artDesc.isEmpty()) {queryWrapper.like("art_desc", artDesc);}if (artUrl != null && !artUrl.isEmpty()) {queryWrapper.eq("art_url", artUrl);}if (startTime != null && !startTime.isEmpty() && endTime != null && !endTime.isEmpty()) {queryWrapper.between("art_time", startTime, endTime);}return articleMapper.selectList(queryWrapper);}
}
还可以基于Mybatis-Plus自带的IService风格进行开发:
public interface ArticleService extends IService<ArticleEntity> {// 多条件查询文章List<ArticleEntity> getArticlesByMultipleConditions(String artName, String artDesc, String artUrl, String startTime, String endTime);
}@Service
public class ArticleServiceImpl extends ServiceImpl<ArticleMapper, ArticleEntity> implements ArticleService {// 新增文章@Overridepublic boolean save(ArticleEntity entity) {return super.save(entity);}// 删除文章@Overridepublic boolean removeById(String id) {return super.removeById(id);}// 更新文章@Overridepublic boolean updateById(ArticleEntity entity) {return super.updateById(entity);}// 根据ID查询文章@Overridepublic ArticleEntity getById(String id) {return super.getById(id);}// 查询所有文章public List<ArticleEntity> listAll() {return super.list();}// 分页查询文章public IPage<ArticleEntity> pageList(Page<ArticleEntity> page) {return super.page(page);}// 多条件查询文章@Overridepublic List<ArticleEntity> getArticlesByMultipleConditions(String artName, String artDesc, String artUrl, String startTime, String endTime) {QueryWrapper<ArticleEntity> queryWrapper = new QueryWrapper<>();// 动态添加查询条件if (artName != null && !artName.isEmpty()) {queryWrapper.eq("art_name", artName);}if (artDesc != null && !artDesc.isEmpty()) {queryWrapper.like("art_desc", artDesc);}if (artUrl != null && !artUrl.isEmpty()) {queryWrapper.eq("art_url", artUrl);}if (startTime != null && !startTime.isEmpty() && endTime != null && !endTime.isEmpty()) {queryWrapper.between("art_time", startTime, endTime);}return list(queryWrapper);}
}
Mapper层加强
基于注解编写复杂SQL
MyBatis-Plus 提供了注解方式可以在 Mapper 层编写复杂的 SQL 语句。这种方式省略掉了繁重的XML文件
@Mapper
public interface ArticleMapper extends BaseMapper<ArticleEntity> {// 根据多个条件查询文章@Select({"<script>","SELECT * FROM tb_article_data","WHERE 1=1","<if test='artName != null and !artName.isEmpty()'> AND art_name = #{artName} </if>","<if test='artDesc != null and !artDesc.isEmpty()'> AND art_desc LIKE CONCAT('%', #{artDesc}, '%') </if>","<if test='artUrl != null and !artUrl.isEmpty()'> AND art_url = #{artUrl} </if>","<if test='startTime != null and !startTime.isEmpty() and endTime != null and !endTime.isEmpty()'> AND art_time BETWEEN #{startTime} AND #{endTime} </if>","</script>"})List<ArticleEntity> selectByMultipleConditions(@Param("artName") String artName,@Param("artDesc") String artDesc,@Param("artUrl") String artUrl,@Param("startTime") String startTime,@Param("endTime") String endTime);// 插入文章并返回自动生成的ID@Insert({"INSERT INTO tb_article_data (art_name, art_desc, art_url, art_time)","VALUES (#{artName}, #{artDesc}, #{artUrl}, #{artTime})","RETURNING id"})@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")int insertAndReturnId(@Param("article") ArticleEntity article);// 更新文章信息@Update({"<script>","UPDATE tb_article_data","SET art_name = #{artName}, art_desc = #{artDesc}, art_url = #{artUrl}, art_time = #{artTime}","WHERE id = #{id}","</script>"})int updateArticle(@Param("article") ArticleEntity article);// 删除文章@Delete("DELETE FROM tb_article_data WHERE id = #{id}")int deleteArticleById(@Param("id") String id);// 使用存储过程@Select("CALL GetArticleById(#{id})")@Results({@Result(property = "id", column = "id", jdbcType = JdbcType.VARCHAR),@Result(property = "artName", column = "art_name", jdbcType = JdbcType.VARCHAR),@Result(property = "artDesc", column = "art_desc", jdbcType = JdbcType.VARCHAR),@Result(property = "artUrl", column = "art_url", jdbcType = JdbcType.VARCHAR),@Result(property = "artTime", column = "art_time", jdbcType = JdbcType.VARCHAR)})ArticleEntity callGetArticleById(@Param("id") String id);// 使用XML中的SQL片段@Select("${sqlFragment}")List<ArticleEntity> selectBySqlFragment(@Param("sqlFragment") String sqlFragment);//查询文章数量@Select("SELECT COUNT(*) FROM tb_article_data")int countAllArticles();
}
基于XML编写复杂SQL
也可以沿用Mybatis的方式,使用XML进行复杂SQL的编写
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.example.mapper.ArticleMapper"><!-- 根据多个条件查询文章 --><select id="selectByMultipleConditions" resultType="com.example.entity.ArticleEntity">SELECT * FROM tb_article_data<where><if test="artName != null and artName != ''">AND art_name = #{artName}</if><if test="artDesc != null and artDesc != ''">AND art_desc LIKE CONCAT('%', #{artDesc}, '%')</if><if test="artUrl != null and artUrl != ''">AND art_url = #{artUrl}</if><if test="startTime != null and startTime != '' and endTime != null and endTime != ''">AND art_time BETWEEN #{startTime} AND #{endTime}</if></where></select><!-- 插入文章并返回自动生成的ID --><insert id="insertAndReturnId" useGeneratedKeys="true" keyProperty="id">INSERT INTO tb_article_data (art_name, art_desc, art_url, art_time)VALUES (#{artName}, #{artDesc}, #{artUrl}, #{artTime})</insert><!-- 更新文章信息 --><update id="updateArticle">UPDATE tb_article_dataSETart_name = #{artName},art_desc = #{artDesc},art_url = #{artUrl},art_time = #{artTime}WHERE id = #{id}</update><!-- 删除文章 --><delete id="deleteArticleById">DELETE FROM tb_article_data WHERE id = #{id}</delete><!-- 使用存储过程 --><select id="callGetArticleById" resultType="com.example.entity.ArticleEntity">CALL GetArticleById(#{id})</select><!-- 查询文章数量 --><select id="countAllArticles" resultType="int">SELECT COUNT(*) FROM tb_article_data</select></mapper>
Mybatis-Plus的分页实现
内置的分页拦截器
MyBatis-Plus 提供了内置的分页拦截器,可以通过配置来启用分页功能。
@Configuration
public class MyBatisPlusConfigure {/*** 分页插件,自动识别数据库类型*/@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();// 添加分页插件interceptor.addInnerInterceptor(new PaginationInnerInterceptor());return interceptor;}}
使用IPage进行分页参数设置和结果获取
@Service
public class ArticleServiceImpl extends ServiceImpl<ArticleMapper, ArticleEntity> implements ArticleService {// 分页查询文章public IPage<ArticleEntity> pageList(int currentPage, int pageSize) {Page<ArticleEntity> page = new Page<>(currentPage, pageSize);return baseMapper.selectPage(page, null);}// 多条件分页查询文章public IPage<ArticleEntity> pageListByMultipleConditions(int currentPage, int pageSize, String artName, String artDesc, String artUrl, String startTime, String endTime) {Page<ArticleEntity> page = new Page<>(currentPage, pageSize);QueryWrapper<ArticleEntity> queryWrapper = new QueryWrapper<>();if (artName != null && !artName.isEmpty()) {queryWrapper.eq("art_name", artName);}if (artDesc != null && !artDesc.isEmpty()) {queryWrapper.like("art_desc", artDesc);}if (artUrl != null && !artUrl.isEmpty()) {queryWrapper.eq("art_url", artUrl);}if (startTime != null && !startTime.isEmpty() && endTime != null && !endTime.isEmpty()) {queryWrapper.between("art_time", startTime, endTime);}return baseMapper.selectPage(page, queryWrapper);}
}
使用XML的SQL分页,需要将Page作为参数给到Mapper层的方法
public interface ArticleMapper extends BaseMapper<ArticleEntity> {// 查询所有文章List<ArticleEntity> selectAllArticles();// 根据多个条件查询文章List<ArticleEntity> selectByMultipleConditions(@Param("page") Page<AtricleEntity> page,@Param("artName") String artName,@Param("artDesc") String artDesc,@Param("artUrl") String artUrl,@Param("startTime") String startTime,@Param("endTime") String endTime);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.example.mapper.ArticleMapper"><!-- 查询所有文章 --><select id="selectAllArticles" resultType="com.example.entity.ArticleEntity">SELECT * FROM tb_article_data</select><!-- 根据多个条件查询文章 --><select id="selectByMultipleConditions" resultType="com.example.entity.ArticleEntity">SELECT * FROM tb_article_data<where><if test="artName != null and artName != ''">AND art_name = #{artName}</if><if test="artDesc != null and artDesc != ''">AND art_desc LIKE CONCAT('%', #{artDesc}, '%')</if><if test="artUrl != null and artUrl != ''">AND art_url = #{artUrl}</if><if test="startTime != null and startTime != '' and endTime != null and endTime != ''">AND art_time BETWEEN #{startTime} AND #{endTime}</if></where></select></mapper>
@Service
public class ArticleServiceImpl extends ServiceImpl<ArticleMapper, ArticleEntity> implements ArticleService {// 使用 XML 定义的多条件查询方法进行分页查询public IPage<ArticleEntity> pageListByMultipleConditionsUsingXml(int currentPage, int pageSize, String artName, String artDesc, String artUrl, String startTime, String endTime) {Page<ArticleEntity> page = new Page<>(currentPage, pageSize);Ipage<ArticleEntity> data= baseMapper.selectByMultipleConditions(page ,artName, artDesc, artUrl, startTime, endTime);return data;}
}
使用第三方的分页插件
PageHelper 是一个非常流行的 MyBatis 分页插件,具有易用简便的特点,且与Mybatis-Plus无缝连接。
引入依赖:
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.2.0</version></dependency>
在 application.yml 中配置 PageHelper
pagehelper:helperDialect: mysqlreasonable: truesupportMethodsArguments: trueparams: count=countSql
使用PageHelper
@Service
public class ArticleServiceImpl extends ServiceImpl<ArticleMapper, ArticleEntity> implements ArticleService {// 分页查询文章public PageInfo<ArticleEntity> pageListWithPageHelper(int currentPage, int pageSize) {PageHelper.startPage(currentPage, pageSize);List<ArticleEntity> articles = baseMapper.selectList(null);return new PageInfo<>(articles);}// 多条件分页查询文章public PageInfo<ArticleEntity> pageListByMultipleConditionsWithPageHelper(int currentPage, int pageSize, String artName, String artDesc, String artUrl, String startTime, String endTime) {PageHelper.startPage(currentPage, pageSize);QueryWrapper<ArticleEntity> queryWrapper = new QueryWrapper<>();if (artName != null && !artName.isEmpty()) {queryWrapper.eq("art_name", artName);}if (artDesc != null && !artDesc.isEmpty()) {queryWrapper.like("art_desc", artDesc);}if (artUrl != null && !artUrl.isEmpty()) {queryWrapper.eq("art_url", artUrl);}if (startTime != null && !startTime.isEmpty() && endTime != null && !endTime.isEmpty()) {queryWrapper.between("art_time", startTime, endTime);}List<ArticleEntity> articles = baseMapper.selectList(queryWrapper);return new PageInfo<>(articles);}
}
相关文章:

SpringBoot整合Mybatis-Plus实践汇总
相关依赖 MyBatis-Plus涉及的依赖主要是Mybatis-start、和分页插件的依赖,不考虑使用额外分页插件的前提下,只需要mybatis-plus-boot-starter一个依赖即可与SpringBoot集成: <!--Mybatis-plugs--><dependency><groupId>co…...

基于Spring Boot的在线性格测试系统设计与实现(源码+定制+开发)智能性格测试与用户个性分析平台、在线心理测评系统的开发、性格测试与个性数据管理系统
博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…...

Python实现人脸识别算法并封装为类库
引言 人脸识别技术在现代社会中应用广泛,从安全监控到智能门锁,再到社交媒体中的照片标记功能,都离不开这项技术。本文将详细介绍如何使用Python实现基本的人脸识别算法,并将其封装为一个类库,以便在多个项目中复用。…...

uniapp小程序分享使用canvas自定义绘制 vue3
使用混入结合canvas做小程序的分享 在混入里面定义一个全局共享的分享样式,在遇到特殊页面需要单独处理 utils/share.js import { ref } from vue; export default {onShow() {// 创建时设置统一页面的默认值uni.$mpShare {title: 分享的标题,path: /pages/home/…...

SpringCloud核心组件(四)
文章目录 NacosNacos 配置中心1.起源2.基本概念ProfileData IDGroup 3.基础配置a. bootstrap.ymlb. application.ymlc. nacos 中的配置 DataIDd.测试读取配置中心配置内容 4.配置隔离a.命名空间b.DataIDc.bootstrap.ymld.service 隔离 5.配置拆分a.配置拆分策略b.DataID 配置c.…...

如何把本地docker 镜像下载用到centos系统中呢?
如果需要将镜像下载到本地或在 CentOS 系统上使用该镜像,你可以按照以下步骤操作: 1. 拉取镜像 如果想将镜像从 Docker Hub 或其他镜像仓库下载到本地,可以使用 docker pull 命令。 如果使用的是本地构建的镜像(如 isc:v1.0.0&…...

Godot的开发框架应当是什么样子的?
目录 前言 全局协程还是实例协程? 存档! 全局管理类? UI框架? Godot中的异步(多线程)加载 Godot中的ScriptableObject 游戏流程思考 结语 前言 这是一篇杂谈,主要内容是对我…...

GitHub新手入门 - 从创建仓库到协作管理
GitHub新手入门 - 从创建仓库到协作管理 GitHub 是开发者的社交平台,同时也是代码托管的强大工具。无论是个人项目、开源协作,还是团队开发,GitHub 都能让你轻松管理代码、版本控制和团队协作。今天,我们将从基础开始,…...

作业25 深度搜索3
作业: #include <iostream> using namespace std; bool b[100][100]{0}; char map[100][100]{0}; int dx[4]{0,1,0,-1}; int dy[4]{1,0,-1,0}; int n,m; int sx,sy,ex,ey; int mink2147483647; void dfs(int,int,int); int main(){cin>>n>>m;for(…...

ubuntu20.04 colmap 安装2024.11最新
很多教程都很落后了,需要下载压缩包解压编译的很麻烦 现在就只需要apt install就可以了 apt更新 sudo apt update && sudo apt-get upgrade安装依赖 #安装依赖 sudo apt-get install git cmake ninja-build build-essential libboost-program-options-de…...

WebRTC视频 03 - 视频采集类 VideoCaptureDS 上篇
WebRTC视频 01 - 视频采集整体架构 WebRTC视频 02 - 视频采集类 VideoCaptureModule [WebRTC视频 03 - 视频采集类 VideoCaptureDS 上篇](本文) WebRTC视频 04 - 视频采集类 VideoCaptureDS 中篇 WebRTC视频 05 - 视频采集类 VideoCaptureDS 下篇 一、前…...

python os.path.basename(获取路径中的文件名部分) 详解
os.path.basename 是 Python 的 os 模块中的一个函数,用于获取路径中的文件名部分。它会去掉路径中的目录部分,只返回最后的文件名或目录名。 以下是 os.path.basename 的详细解释和使用示例: 语法 os.path.basename(path) 参数 path&…...

《FreeRTOS任务基础知识以及任务创建相关函数》
目录 1.FreeRTOS多任务系统与传统单片机单任务系统的区别 2.FreeRTOS中的任务(Task)介绍 2.1 任务特性 2.2 FreeRTOS中的任务状态 2.3 FreeRTOS中的任务优先级 2.4 在任务函数中退出 2.5 任务控制块和任务堆栈 2.5.1 任务控制块 2.5.2 任务堆栈…...

036集——查询CAD图元属性字段信息:窗体显示(CAD—C#二次开发入门)
提取CAD图元所有属性字段,通过窗体显示,效果如下:(curve改为entity) 代码如下: public void 属性查询() {List<Curve> ents Z.db.SelectEntities<Curve>();if (ents is null ||ents.Cou…...

Swift从0开始学习 函数和闭包 day2
一、函数 1.1函数定义 使用 func 来声明一个函数,使用名字和参数来调用函数。使用 -> 来指定函数返回值的类型。 示例:拼接字符串 //有参数和返回值的函数 func append1(name : String, description : String) -> String {return "\(name)…...

内网、公网(外网)划分
内网、公网(外网)划分 声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章 笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其…...

【linux】centos7 换阿里云源
相关文章 【linux】CentOS 的软件源(Repository)学习-CSDN博客 查看yum配置文件 yum的配置文件通常位于/etc/yum.repos.d/目录下。你可以使用以下命令查看这些文件: ls /etc/yum.repos.d/ # 或者 ll /etc/yum.repos.d/备份当前的yum配置文…...

用OMS进行 OceanBase 租户间数据迁移的测评
基本概念 OceanBase迁移服务(,简称OMS),可以让用户在同构或异构 RDBMS 与OceanBase 数据库之间进行数据交互,支持数据的在线迁移,以及实时增量同步的复制功能。 OMS 提供了可视化的集中管控平台ÿ…...

【因果分析方法】MATLAB计算Liang-Kleeman信息流
【因果分析方法】MATLAB计算Liang-Kleeman信息流 1 Liang-Kleeman信息流2 MATLAB代码2.1 函数代码2.2 案例参考Liang-Kleeman 信息流(Liang-Kleeman Information Flow)是由 Liang 和 Kleeman 提出的基于信息论的因果分析方法。该方法用于量化变量之间的因果关系,通过计算信息…...

【Java基础知识系列】之Java类的初始化顺序
前言 类的初始化顺序 简单场景 代码示例 public class Person {private String name initName();private String initName() {System.out.println("【父类】初始化实例变量name");return "【父类】史蒂夫";}private int age;private static int staticVa…...

Swift 宏(Macro)入门趣谈(二)
概述 苹果在去年 WWDC 23 中就为 Swift 语言新增了“其利断金”的重要小伙伴 Swift 宏(Swift Macro)。为此,苹果特地用 2 段视频(入门和进阶)颇为隆重的介绍了它。 那么到底 Swift 宏是什么?有什么用&…...

vue elementui el-dropdown-item设置@click无效的解决方案
如图,直接在el-dropdown-item上面设置click,相应的method并没有被触发,查找资料发现需要在它的上级 el-dropdown 处使用 command 方法触发。 【template】 <el-dropdown placement"bottom-end" command"handleCommand&quo…...

如何用re从第1排第2个位置中找到两个数字返回(0,1)
以下是使用 Python 的re模块从第1班第2个位置这样的字符串中提取出数字并返回类似(0, 1)这种形式的示例代码,假设数字都是一位数的情况(如果是多位数可以按照后续介绍稍作调整): import redef extract_numbers(text):numbers re.…...

vue中的keep-alive是什么,有哪些使用场景,使用了什么原理,缓存后如何更新数据
<keep-alive> 是 Vue.js 提供的一个内置组件,用于缓存动态组件,避免频繁的销毁和重建。这在某些场景下可以显著提升性能,特别是在组件频繁切换的情况下。以下是对 keep-alive 的详细讲解,包括它的定义、使用场景、原理分析、…...

LeetCode105.从前序与中序遍历构造二叉树
题目要求 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 提示: 1 < preorder.length < 3000inorder.length preorder.length-3000 < pr…...

LeetCode654.最大二叉树
LeetCode刷题记录 文章目录 📜题目描述💡解题思路⌨C代码 📜题目描述 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。 递归地在最大值 左边 的 子…...

C# 字段和属性
在 C# 中,字段和属性是定义类和结构体数据的两种方式。 字段用于直接存储数据,而属性提供了对字段的封装和访问控制。 1. 字段(Fields) 定义 字段是类或结构体中用于存储数据的变量。字段可以是任何数据类型,包括基…...

【leetcode】N皇后 回溯法c++
目录 51.N皇后 52.N皇后II 51.N皇后 51. N 皇后 - 力扣(LeetCode) 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间…...

Ubuntu 系统端口查询与管理详细分析
目录 前言1. 查询端口占用情况2. 释放占用的端口3. 修改应用程序的端口 前言 Window的端口被占用,类似的知识点:重装mysql时3306端口被占用解决方法 事情起因是宝塔的CPU负载过大,重启服务进程之后还是爆,后续发现是端口被占用&…...

Unity中使用StartCoroutine协程和Lerp方法,使GameObject缓慢移动
移动方法(传入需要移动的instance和目标位置) public Transform targetPosition; //目标位置 Vector3 target targetPosition.position;private IEnumerator MoveTowardsTarget(GameObject instance, Vector3 target){// 缓慢移动到目标的方法Vector3 …...