Mybatis-plus
一、简介
MyBatis-Plus(简称MP)是一个MyBatis的增强工具,它在MyBatis的基础上只做增强而不做改变,目的是简化开发、提高效率。MyBatis-Plus提供了许多便捷的功能,如强大的CRUD操作、支持多种主键策略、内置代码生成器、分页插件、性能分析插件等。
二、MyBatis-Plus与MyBatis的区别
- 实现方式不同:
- MyBatis是基于XML或注解方式进行数据库操作的持久化框架,它提供了简单的CRUD操作及动态SQL生成等功能。而MyBatis-Plus是在MyBatis框架上的封装,通过对于增强简化后的API更加方便地进行开发,并且在性能、效率和易用性上都有优化。
- MyBatis-Plus封装了一些简单的SQL,只需要数据模型类继承Model类,便可以直接使用数据模型对象直接调用单表的增删改查的方法。
- 功能差异:
- MyBatis相对较为原始,需要手写大量的SQL以完成各种功能的实现。而MyBatis-Plus提供了很多额外的功能,例如条件构造器、代码生成器、分页插件、性能分析拦截器等实用的组件,使得开发者可以轻松快速完成业务逻辑的开发。
- MyBatis-Plus支持所有MyBatis的原生特性,并提供了ActiveRecord等核心特性,实现了数据库表和数据模型类的映射、数据模型对象和数据库记录的映射,以及数据模型对象属性和数据库记录的字段的映射。
- 编程风格:
- MyBatis的编程风格更加传统,需要定义mapper.xml文件并根据传入的参数使用相应的SQL查询语句,需要实现MyBatis提供的各种方法。
- MyBatis-Plus具有许多针对CRUD进行的简化方法,通过继承BaseMapper以及使用Lambda表达式,可以让我们像SpringDataJPA类似地使用接口编程方式进行数据库操作。
三、MyBatis与Hibernate区别
- 自动化程度:
- MyBatis:它是一个半自动化的ORM框架。虽然它也支持对象与数据库表之间的映射,但开发者需要手动编写SQL语句,这使得MyBatis在SQL的灵活性和优化上具有更大的空间。
- Hibernate:它是一个全自动化的对象关系映射(ORM)框架。开发者只需定义好POJO(Plain Old Java Objects,普通老式Java对象)与数据库表之间的映射关系,Hibernate便能自动生成SQL语句并执行,大大减轻了编写SQL的工作量。
- 灵活性与优化:
- MyBatis:MyBatis允许开发者直接编写SQL,这使得SQL的优化和定制变得非常灵活。开发者可以根据实际需求对SQL进行精细调整,以达到最佳性能。
- Hibernate:由于Hibernate自动生成SQL,开发者对SQL的控制力相对较弱。在某些复杂查询或性能优化场景中,Hibernate可能不是最优选择。
- 缓存机制:
- MyBatis:MyBatis也支持一级缓存和二级缓存,但其二级缓存的配置相对更为灵活,开发者可以根据实际需求为不同的表配置不同的缓存策略。
- Hibernate:Hibernate内置了一级缓存(Session级别的缓存)和可选的二级缓存(SessionFactory级别的缓存),这些缓存机制有助于提高数据访问性能。
- 数据库移植性:
- MyBatis:虽然MyBatis也支持多种数据库系统,但由于其需要手动编写SQL语句,因此在移植到不同数据库时可能需要修改部分SQL语句以适应新的数据库特性。
- Hibernate:Hibernate支持多种数据库系统,并通过数据库方言的支持来生成适应不同数据库的SQL语句,这使得应用程序具备更好的数据库移植性。
四、Mybatis-plus整合Spring Boot项目
1、添加依赖
在Spring Boot项目的pom.xml文件中,添加Mybatis-plus以及数据库连接驱动的依赖。
<dependencies><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- MyBatis-Plus Starter --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>最新版本号</version></dependency><!-- MySQL Driver --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency>
</dependencies>
2、配置数据源
在Spring Boot项目的application.yml或application.properties文件中配置数据库连接信息。例如,使用application.yml文件:
spring:datasource:url: jdbc:mysql://localhost:3306/your_database?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTCusername: your_usernamepassword: your_passworddriver-class-name: com.mysql.cj.jdbc.Driver
3、配置MyBatis-Plus
MyBatis-Plus的配置相对简单,Spring Boot会自动进行大部分配置。可以通过@MapperScan注解来扫描Mapper接口,或者直接在每个Mapper接口上使用@Mapper注解。例如,在启动类上使用@MapperScan注解:
@SpringBootApplication
@MapperScan("com.example.demo.mapper") // 扫描Mapper接口的路径
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}
4、创建实体类
创建一个Java实体类,用于映射数据库表。例如,创建一个User实体类:
package com.example.demo.entity;import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;@Data
@TableName("user")
public class User {private Long id;private String username;private String password;// 其他字段...
}
5、创建Mapper接口
创建一个Mapper接口,继承BaseMapper接口。BaseMapper是MyBatis-Plus提供的基础接口,包含了常用的CRUD方法。例如,创建一个UserMapper接口:
package com.example.demo.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface UserMapper extends BaseMapper<User> {// 可以在这里定义自定义的SQL方法
}
6、注入Mapper接口
在Service层中,通过@Autowired注解将Mapper接口注入到Service类中。再使用注入的Mapper接口去调用MyBatis-Plus提供的常用CRUD方法以及创建Mapper接口时自定义的方法。
@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public User getUserById(Long id) {return userMapper.selectById(id); // 调用BaseMapper提供的查询方法}// 其他业务方法...
}
五、Mybatis-plus代码生成器的使用
MyBatis-Plus的代码生成器是一个非常实用的工具,它能够根据数据库表结构自动生成对应的实体类、Mapper接口、Service层以及Controller层代码,极大地提高了开发效率。以下是一个详细的配置指南:
1、添加依赖
在项目的pom.xml文件中添加MyBatis-Plus代码生成器的依赖。这通常包括MyBatis-Plus代码生成器的核心依赖以及模板引擎的依赖(如Freemarker或Velocity)。
<dependencies><!-- MyBatis-Plus代码生成器 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>最新版本号</version></dependency><!-- Freemarker模板引擎 --><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>最新版本号</version></dependency><!-- 其他依赖,如数据库驱动等 -->
</dependencies>
2、创建配置类
创建一个配置类来配置代码生成器的各种参数。这个配置类通常包含全局配置、数据源配置、包配置和策略配置等部分。
- 全局配置:设置生成代码的基本信息,如作者、输出目录、是否覆盖已有文件等。
- 数据源配置:设置数据库连接信息,以便代码生成器能够读取数据库表结构。
- 包配置:设置生成代码的包名结构,如实体类包名、Mapper包名等。
- 策略配置:设置生成代码的策略,如需要生成的表名、实体类命名策略等。
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;public class CodeGeneratorConfig {// 全局配置private GlobalConfig globalConfig() {GlobalConfig globalConfig = new GlobalConfig();globalConfig.setOutputDir(System.getProperty("user.dir") + "/src/main/java"); // 设置输出目录globalConfig.setAuthor("你的名字"); // 设置作者globalConfig.setOpen(false); // 设置生成完毕后是否打开输出目录globalConfig.setSwagger2(true); // 实体属性 Swagger2 注解return globalConfig;}// 数据源配置private DataSourceConfig dataSourceConfig() {DataSourceConfig dataSourceConfig = new DataSourceConfig();dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/你的数据库名?useUnicode=true&useSSL=false&characterEncoding=utf8"); // 设置数据库URLdataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver"); // 设置数据库驱动名dataSourceConfig.setUsername("你的数据库用户名"); // 设置数据库用户名dataSourceConfig.setPassword("你的数据库密码"); // 设置数据库密码dataSourceConfig.setDbType(DbType.MYSQL); // 设置数据库类型return dataSourceConfig;}// 包配置private PackageConfig packageConfig() {PackageConfig packageConfig = new PackageConfig();packageConfig.setParent("com.example"); // 设置父包名packageConfig.setModuleName("module"); // 设置模块名packageConfig.setEntity("entity"); // 设置实体类包名packageConfig.setMapper("mapper"); // 设置Mapper包名packageConfig.setService("service"); // 设置Service接口包名packageConfig.setServiceImpl("service.impl"); // 设置Service实现类包名packageConfig.setController("controller"); // 设置Controller包名return packageConfig;}// 策略配置private StrategyConfig strategyConfig() {StrategyConfig strategyConfig = new StrategyConfig();strategyConfig.setNaming(NamingStrategy.underline_to_camel); // 表名生成策略strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel); // 列名生成策略strategyConfig.setEntityLombokModel(true); // 使用Lombok模型strategyConfig.setRestControllerStyle(true); // 生成@RestController控制器strategyConfig.setInclude("你的表名"); // 需要生成的表名// strategyConfig.setControllerMappingHyphenStyle(true); // key的style// strategyConfig.setTablePrefix(pc.getModuleName() + "_"); // 表前缀return strategyConfig;}// 获取完整的配置信息(通常这个方法不会被直接调用,而是作为其他方法的一部分)public AutoGenerator getAutoGenerator() {AutoGenerator autoGenerator = new AutoGenerator();autoGenerator.setGlobalConfig(globalConfig());autoGenerator.setDataSource(dataSourceConfig());autoGenerator.setPackageInfo(packageConfig());autoGenerator.setStrategy(strategyConfig());// 如果需要自定义模板,可以在这里设置// autoGenerator.setTemplateEngine(new FreemarkerTemplateEngine());// autoGenerator.setTemplate(new TemplateConfig(...));return autoGenerator;}
}
3、编写代码生成器类
最后编写一个Java类来启动代码生成器。这个类通常会包含一个main方法,并在其中调用代码生成器的相关方法来生成代码。例如:
import com.baomidou.mybatisplus.generator.AutoGenerator;public class CodeGenerator {public static void main(String[] args) {CodeGeneratorConfig config = new CodeGeneratorConfig();AutoGenerator autoGenerator = config.getAutoGenerator();// 执行生成autoGenerator.execute();}
}
相关文章:
Mybatis-plus
一、简介 MyBatis-Plus(简称MP)是一个MyBatis的增强工具,它在MyBatis的基础上只做增强而不做改变,目的是简化开发、提高效率。MyBatis-Plus提供了许多便捷的功能,如强大的CRUD操作、支持多种主键策略、内置代码生成器…...
跨年烟花C++代码
嘿,朋友们!今天来给大家讲讲一段挺有意思的C代码呀,这段代码主要是用来实现一个烟花效果展示的程序哦,下面咱们一点点来看哈。 效果 1. 开头包含的那些头文件 #include <graphics.h> #include <conio.h> #include &…...
第82期 | GPTSecurity周报
GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…...
关于FPGA中添加FIR IP核(采用了GOWIN EDA)
文章目录 前言一、IP核二、MATLAB文件三、导出系数COE文件1.设计滤波器2.用官方的matlab代码或者直接用文本文件 四、进行模块化设计源文件 前言 FIR滤波器的特点是其输出信号是输入信号的加权和,权值由滤波器的系数决定。每个系数代表了滤波器在特定延迟位置上的“…...
基于机器学习的京东手机商品评论数据可视化分析系统
完整源码项目包获取→点击文章末尾名片!...
jenkins入门13--pipeline
Jenkins-pipeline(1)-基础 为什么要使用pipeline 代码:pipeline 以代码的形式实现,通过被捡入源代码控制, 使团队能够编译,审查和迭代其cd流程 可连续性:jenkins 重启 或者中断后都不会影响pipeline job 停顿&#x…...
Ubuntu24.04.1 LTS+Win11双系统安装记录
Win11相关 1.用DiskGenius删除硬盘分区 2.关闭win11的BitLocker,否则禁用安全启动后开机时需要帐户密钥,很麻烦。 3.在设备管理器中找到独立显卡,右键禁用。等ubuntu装好显卡驱动后,再进入win启用。 Ubuntu相关 1.Ubuntu24.04在…...
【前端开发常用网站汇总-01】
1、仿mac界面代码截图 https://codeimg.io/?utm_sourceappinn.com 2、可视化大屏汇总(在线Demo) https://www.xiongze.net/viewdata/index.html 3、在线Photoshop(实现简单P图) https://ps.gaoding.com/#/ 4、在线生成ico图标(png转icon文件) https://www.bitbug.net/in…...
【Rust自学】10.6. 生命周期 Pt.2:生命周期的语法与例子
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 10.6.1. 生命周期标注语法 生命周期的标注并不会改变引用的生命周期长度。如果某个函数它制定了泛型生命周期参数,那么它就可…...
Three.js教程014:使用tween实现补间动画
补间动画tween 补间动画(Tween Animation)是一种通过平滑过渡的方式,在一段时间内将对象的属性从一个状态变换到另一个状态的动画技术。Three.js 中可以使用 tween.js 来实现补间动画。 【1】导入补间动画库 // 导入tween import * as TWEEN from "three/examples/j…...
Mac软件介绍之录屏软件Filmage Screen
软件介绍 Filmage Screen 是一款专业的视频录制和编辑软件,适用于 Mac 系统 可以选择4k 60fps,可以选择录制电脑屏幕,摄像头录制,可以选择区域录制。同时也支持,简单的视频剪辑。 可以同时录制电脑麦克风声音 标准…...
MySQL使用navicat新增触发器
找到要新增触发器的表,然后点击设计,找到触发器标签。 根据实际需要,填写相关内容,操作完毕,点击保存按钮。 在右侧的预览界面,可以看到新生成的触发器脚本...
深入理解 DOM:构建动态 Web 页面的基石
在 Web 开发的世界里,DOM (Document Object Model) 就像一位无声的英雄,默默地支撑着我们每天浏览的各种动态网页。你可能每天都在和它打交道,却未必真正了解它。那么,DOM 到底是什么?它为什么如此重要?让我…...
如何构建多层决策树
构建一颗多层的决策树时,通过递归选择最佳划分特征(依据 信息增益 或 基尼系数)对数据集进行划分,直到满足停止条件(例如叶节点纯度达到要求或树的深度限制)。以下是基于 信息增益 和 基尼系数 的递推公式和…...
人工智能 前馈神经网络练习题
为了构建一个有两个输入( X 1 X_1 X1、 X 2 X_2 X2)和一个输出的单层感知器,并进行分类,我们需要计算权值 w 1 w_1 w1和 w 2 w_2 w2的更新过程。以下是详细的步骤和计算过程: 初始化参数 初始权值:…...
stable diffusion安装mov2mov
第一步: 下载mov2mov,地址:https://gitcode.com/gh_mirrors/sd/sd-webui-mov2mov 下载包到web-ui的sd-webui-aki-v4.10\extensions文件夹面解压 第二步:在文件夹中调出cmd窗口,执行下列命令, git restore…...
人工智能学习框架概述
1. 引言 随着人工智能(AI)技术的快速发展,各种学习框架应运而生,为研究人员和开发者提供了便利。这些框架不仅简化了复杂的算法实现,还提供了用于构建、训练和评估模型的工具和环境。本文将对目前流行的人工智能学习框…...
(二)WebGL的渲染管线初识
WebGL的渲染管线可以被看作是将一组数据(例如模型、纹理、颜色等)经过一系列处理阶段,最终生成图像并显示在屏幕上的过程。为了帮助你理解这一过程,我将通过一个通俗易懂的移动例子来一步步详细讲解WebGL 的渲染管线及其关键绘制原…...
1. 使用springboot做一个音乐播放器软件项目【前期规划】
背景: 现在大部分音乐软件都是要冲会员才可以无限常听的。对于喜欢听音乐的小伙伴,资金又比较紧张,是那么的不友好。作为程序员的我,也是喜欢听着歌,敲着代码。 最近就想做一个音乐播放器的软件,在内网中使…...
在macOS上安装MySQL
macOS的MySQL有多种不同的形式: 1、本机包安装程序,它使用本机macOS安装程序(DMG)引导您完成MySQL的安装。有关详细信息,请参阅第2.4.2节,“使用本机包在macOS上安装MySQL”。您可以将包安装程序与macOS一…...
使用vue项目中,使用webpack模板和直接用vue.config来配置相关插件 区别是什么,具体有哪些提现呢
在 Vue 项目中,使用 Webpack 模板 和 vue.config.js 来配置相关插件的主要区别在于配置的复杂度、灵活性和易用性。以下是两者的详细对比: 1. Webpack 模板 Webpack 模板是 Vue CLI 早期版本(如 Vue CLI 2.x)中提供的项目初始化模…...
ansible-性能优化
一. 简述: 搞过运维自动化工具的人,肯定会发现很多运维伙伴们经常用saltstack和ansible做比较,单从执行效率上来说,ansible确实比不上saltstack(ansible使用的是ssh,salt使用的是zeromq消息队列[暂没深入了解]),但其实…...
Nginx:认证与授权
认证(Authentication)和授权(Authorization)是确保 Web 应用安全的重要机制。Nginx 提供了多种方式来实现这些功能,以保护资源免受未授权访问。 认证(Authentication):验证用户的身份,确认请求来自合法用户。通常涉及用户名和密码、令牌或其他形式的身份验证。授权(A…...
【项目实战1】五子棋游戏
目录 C语言编程实现五子棋:: game.h game.c 1.打印菜单 2.打印棋盘 3.玩家下棋 4.判断五子连珠 5.判断输赢 6.游戏运行 game.c完整源代码展示 test.c C语言编程实现五子棋:: game.h #pragma once #include<stdio.h> …...
【VUE】a链接下载跨域文件直接打开而非下载(解决办法)
背景:a链接下载跨域文件时,浏览器默认会打开文件,而非直接下载 <a :href"url" :download"fileName">下载</a>data() {return {url: http://xxxxx.mp4,fileName: xxxxx.mp4} }解决方式 服务器设置HTTP请求头…...
消息队列RabbitMQ
目录 为什么需要消息队列? 什么是消息队列? 如何技术选型? WorkQueues模型 Fanout交换机 Direct交换机 Topic交换机 声明队列交换机 消息转换器 消息可靠性问题 1.发送者的可靠性 生产者重连 生产者确认 Spring AMQP生产者消费确认…...
Windows11环境下设置MySQL8字符集utf8mb4_unicode_ci
1.关闭MySQL8的服务CTRLshiftESC,找到MySQL关闭服务即可 2.找到配置文件路径(msi版本默认) C:\ProgramData\MySQL\MySQL Server 8.0 3.使用管理员权限编辑my.ini文件并保存 # Other default tuning values # MySQL Server Instance Config…...
css出现边框
前言 正常情况下,开启 contenteditable 属性后会出现 “黑色边框”。 如下图所示,很影响美观: 您可能想去掉它,就像下面这样: 解决方案 通过选择器,将 focus 聚焦时移除 outline 属性即可。 如下代码所示&a…...
Qt QDockWidget详解以及例程
Qt QDockWidget详解以及例程 引言一、基本用法二、深入了解2.1 窗口功能相关2.2 停靠区域限制2.3 在主窗体布局 引言 QDockWidget类提供了一个可以停靠在QMainWindow内的小窗口 (理论上可以在QMainWindow中任意排列),也可以作为QMainWindow上的顶级窗口浮动 (类似一…...
node.js内置模块之---stream 模块
stream 模块的作用 在 Node.js 中,stream 模块是一个用于处理流(stream)的核心模块。流是一种处理数据的抽象方式,允许程序处理大量数据时不会一次性将所有数据加载到内存中,从而提高性能和内存效率。通过流࿰…...
EdgeX规则引擎eKuiper
EdgeX 规则引擎eKuiper 一、架构设计 LF Edge eKuiper 是物联网数据分析和流式计算引擎。它是一个通用的边缘计算服务或中间件,为资源有限的边缘网关或设备而设计。 eKuiper 采用 Go 语言编写,其架构如下图所示: eKuiper 是 Golang 实现的轻量级物联网边缘分析、流式处理开源…...
SpringBoot | 基于 MyBatis 的分页与模糊查询的开发模板
关注:CodingTechWork 引言 在开发 Web 应用时,常常需要处理复杂的查询需求,尤其是在涉及到用户管理功能时,分页查询和模糊查询是常见的需求之一。 本文将通过一个具体的示例,展示如何使用 MyBatis实现分页和模糊查…...
数据库(3)--针对列的CRUD操作
1.Create 新增 语法: insert into 表名 (列名)values (列)... 创建一个学生表用于演示: create table if not exists student( id bigint comment 编号, name varchar(20) comment 姓名 ); 1.1直接增加…...
利用Java爬取1688商品详情API接口:技术与应用指南
引言 1688作为中国领先的B2B电子商务平台,拥有海量的商品信息。对于商家和市场研究人员来说,能够从1688获取商品详情信息,对于市场分析、竞品研究等具有重要价值。本文将详细介绍如何使用Java编写爬虫程序,以合法、高效的方式获取…...
安装vue脚手架出现的一系列问题
安装vue脚手架出现的一系列问题 前言使用 npm 安装 vue/cli2.权限问题及解决方法一:可以使用管理员权限进行安装。方法二:更改npm全局安装路径 前言 由于已有较长时间未进行 vue 项目开发,今日着手准备开发一个新的 vue 项目时,在…...
git命令收集
强制丢弃所有修改,和仓库代码一致 git reset --hard 更新子模块 git submodule update每个子模块 重置到最新节点 git submodule foreach --recursive git reset --hard清除每个子模块未跟踪的文件 git submodule foreach --recursive git clean -fd清理未跟踪的…...
IDEA中Maven依赖包导入失败报红的潜在原因
在上网试了别人的八个问题总结之后依然没有解决: IDEA中Maven依赖包导入失败报红问题总结最有效8种解决方案_idea导入依赖还是报红-CSDN博客https://blog.csdn.net/qq_43705131/article/details/106165960 江郎才尽之后突然想到一个原因:<dep…...
c/c++ 里的进程间通信 , 管道 pipe 编程举例
(1)以下是一个网上的使用 pipe 编程的范例: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/types.h> #include <sys/wait.h>int main() {int pipefd…...
【Java】JVM内存相关笔记
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。 程序计数器&am…...
[项目实战2]贪吃蛇游戏
目录 贪吃蛇游戏:: 一、游戏效果及功能实现: 1.规则 2.基本功能实现 3.技术要点 …...
PySide6的样式表
PySide6 提供了对 Qt 样式表(Qt Style Sheets,简称 QSS)的支持,这是一种类似于 CSS 的样式表语言,用于自定义 Qt 应用程序的外观。 1. 什么是 Qt 样式表(QSS) Qt 样式表是一种声明性的样式表语…...
计算机网络之---局域网
什么叫局域网 局域网(LAN,Local Area Network) 是指在一个相对较小的区域内,如家庭、办公室、学校、企业等,连接多个计算机和设备的网络。局域网的特点是覆盖范围小、传输速度快、构建成本较低。 局域网的主要特点&…...
使用 uniapp 开发微信小程序遇到的坑
0. 每次修改代码时,都会触发微信开发工具重新编译 终极大坑,暂未找到解决方案 1. input 无法聚焦问题 问题:在小程序开发工具中,input 会突然无法聚焦,重启也不行。但是真机调试可以正常聚焦。 解决办法:…...
基于 GEE Sentinel-1 数据集提取水体
目录 1 水体提取原理 2 完整代码 3 运行结果 1 水体提取原理 水体提取是地理信息和遥感技术的关键应用之一,对于多个领域都具有重要的应用价值。它有助于更好地管理水资源,保护环境,减少灾害风险,促进可持续发展,以…...
2025-01-07 Unity 使用 Tip3 —— 游戏保存数据到 Application.persistentDataPath 不生效解决方案更新
文章目录 1 问题描述2 老版解决方案(测试可行)2.1 创建 js 脚本2.2 添加 js 引用 3 新版解决方案(测试不可行)4 实际问题 WebGL 平台限制了文件访问系统,在 Unity 以前版本中,开发者想要在 WebGL 上保存…...
关于重构一点简单想法
关于重构一点简单想法 当前工作的组内,由于业务开启的时间正好处于集团php-》go技术栈全面迁移的时间点,组内语言技术栈存在:php、go两套。 因此需求开发过程中通常要考虑两套技术栈的逻辑,一些基础的逻辑也没有办法复用。 在这…...
使用 `llama_index` 构建智能问答系统:多种文档切片方法的评估
使用 llama_index 构建智能问答系统:多种文档切片方法的评估 代码优化与解析1. **代码结构优化**2. **日志管理**3. **环境变量管理**4. **模型初始化**5. **提示模板更新**6. **问答函数优化**7. **索引构建与查询引擎**8. **节点解析器测试** 总结 在现代自然语言…...
Vue3 内置组件之KeepAlive
文章目录 Vue3 内置组件之KeepAlive概述用法简单使用include & excludemax Vue3 内置组件之KeepAlive 概述 <KeepAlive> 是一个内置组件,它的功能是在多个组件间动态切换时缓存被移除的组件实例。 组件在加载时会经历初始、挂载、更新、销毁生命周期&a…...
生物医学信号处理--绪论
前言 参考书籍:刘海龙,生物医学信号处理,化学工业出版社 生物医学信号分类 1、由生理过程自发或者诱发产生的电生理信号和非电生理信号 • 电生理信号:ECG/心电、EEG/脑电、EMG/肌电、 EGG/胃电、 EOG/眼电 • 非电生理信号&am…...
30天开发操作系统 第 12 天 -- 定时器
前言 定时器(Timer)对于操作系统非常重要。它在原理上却很简单,只是每隔一段时间(比如0.01秒)就发送一个中断信号给CPU。幸亏有了定时器,CPU才不用辛苦地去计量时间。……如果没有定时器会怎么样呢?让我们想象一下吧。 假如CPU看不到定时器而仍想计量时…...