当前位置: 首页 > news >正文

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、和分页插件的依赖&#xff0c;不考虑使用额外分页插件的前提下&#xff0c;只需要mybatis-plus-boot-starter一个依赖即可与SpringBoot集成&#xff1a; <!--Mybatis-plugs--><dependency><groupId>co…...

基于Spring Boot的在线性格测试系统设计与实现(源码+定制+开发)智能性格测试与用户个性分析平台、在线心理测评系统的开发、性格测试与个性数据管理系统

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…...

Python实现人脸识别算法并封装为类库

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

uniapp小程序分享使用canvas自定义绘制 vue3

使用混入结合canvas做小程序的分享 在混入里面定义一个全局共享的分享样式&#xff0c;在遇到特殊页面需要单独处理 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 系统上使用该镜像&#xff0c;你可以按照以下步骤操作&#xff1a; 1. 拉取镜像 如果想将镜像从 Docker Hub 或其他镜像仓库下载到本地&#xff0c;可以使用 docker pull 命令。 如果使用的是本地构建的镜像&#xff08;如 isc:v1.0.0&…...

Godot的开发框架应当是什么样子的?

目录 前言 全局协程还是实例协程&#xff1f; 存档&#xff01; 全局管理类&#xff1f; UI框架&#xff1f; Godot中的异步&#xff08;多线程&#xff09;加载 Godot中的ScriptableObject 游戏流程思考 结语 前言 这是一篇杂谈&#xff0c;主要内容是对我…...

GitHub新手入门 - 从创建仓库到协作管理

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

作业25 深度搜索3

作业&#xff1a; #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最新

很多教程都很落后了&#xff0c;需要下载压缩包解压编译的很麻烦 现在就只需要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 上篇]&#xff08;本文&#xff09; WebRTC视频 04 - 视频采集类 VideoCaptureDS 中篇 WebRTC视频 05 - 视频采集类 VideoCaptureDS 下篇 一、前…...

python os.path.basename(获取路径中的文件名部分) 详解

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

《FreeRTOS任务基础知识以及任务创建相关函数》

目录 1.FreeRTOS多任务系统与传统单片机单任务系统的区别 2.FreeRTOS中的任务&#xff08;Task&#xff09;介绍 2.1 任务特性 2.2 FreeRTOS中的任务状态 2.3 FreeRTOS中的任务优先级 2.4 在任务函数中退出 2.5 任务控制块和任务堆栈 2.5.1 任务控制块 2.5.2 任务堆栈…...

036集——查询CAD图元属性字段信息:窗体显示(CAD—C#二次开发入门)

提取CAD图元所有属性字段&#xff0c;通过窗体显示&#xff0c;效果如下&#xff1a;&#xff08;curve改为entity&#xff09; 代码如下&#xff1a; public void 属性查询() {List<Curve> ents Z.db.SelectEntities<Curve>();if (ents is null ||ents.Cou…...

Swift从0开始学习 函数和闭包 day2

一、函数 1.1函数定义 使用 func 来声明一个函数&#xff0c;使用名字和参数来调用函数。使用 -> 来指定函数返回值的类型。 示例&#xff1a;拼接字符串 //有参数和返回值的函数 func append1(name : String, description : String) -> String {return "\(name)…...

内网、公网(外网)划分

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

【linux】centos7 换阿里云源

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

用OMS进行 OceanBase 租户间数据迁移的测评

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

【因果分析方法】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…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...