SpringBoot | 基于 MyBatis 的分页与模糊查询的开发模板
关注:CodingTechWork
引言
在开发 Web 应用时,常常需要处理复杂的查询需求,尤其是在涉及到用户管理功能时,分页查询和模糊查询是常见的需求之一。
本文将通过一个具体的示例,展示如何使用 MyBatis
实现分页和模糊查询,特别是如何使用CASE...WHEN...THEN
语句进行用户名的模糊查询,并且支持其他精确查询条件。
需求背景
我们需要实现一个分页查询功能,查询系统中的用户信息。每个用户包括用户名、用户组、邮箱、状态、注册时间等字段。此外,查询功能支持以下条件:
- 用户名模糊查询(其中精准匹配排序优先,左右匹配也有优先级)
- 用户组、状态的精确查询
- 注册时间范围查询
- 支持分页
- 时间排序
最终,我们的目标是使用MyBatis
提供的动态 SQL 功能,构建灵活的查询条件,并实现分页查询的功能。
实践模板
数据库设计
假设我们有一个 demo_user
表,存储了用户信息。表结构大致如下:
CREATE TABLE demo_user (id BIGINT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(255) NOT NULL,user_group VARCHAR(255),email VARCHAR(255),status INT,registration_time DATETIME,is_deleted INT DEFAULT 0
);
MyBatis 配置Mapper XML 配置
在 MyBatis
中,我们需要通过 XML 映射文件来定义 SQL 查询语句。我们将编写一个分页查询的 SQL,其中包含模糊查询和精确查询的条件。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.selfcode.demo.mapper.UserMapper"><!-- 公共SQL,用于查询用户信息 --><sql id="list_user">SELECT du.id,du.username,du.user_group,du.email,du.status,du.registration_timeFROM demo_user du</sql><!-- 分页查询用户信息 --><select id="pageListUser" resultType="com.selfcode.demo.vo.UserVO"><include refid="list_user"></include><where><!-- 用户名模糊查询 --><if test="dto.usernameFuzzyQuery != null and dto.usernameFuzzyQuery != ''">AND du.username LIKE CONCAT('%', #{dto.usernameFuzzyQuery}, '%')</if><!-- 用户组精确查询 --><if test="dto.userGroup != null and dto.userGroup != ''">AND du.user_group = #{dto.userGroup}</if><!-- 用户状态精确查询 --><if test="dto.status != null">AND du.status = #{dto.status}</if><!-- 注册时间范围查询 --><if test="dto.beginTime != null and dto.endTime != null">AND du.registration_time BETWEEN #{dto.beginTime} AND #{dto.endTime}</if><!-- 未删除的用户 -->AND du.is_deleted = 0</where><!-- 默认按照用户状态(开启)和注册时间倒序排列 -->ORDER BY du.status DESC, du.registration_time DESC<!-- 用户名模糊查询的优先级排序 --><if test="dto.usernameFuzzyQuery != null and dto.usernameFuzzyQuery != ''">, CASEWHEN du.username = #{dto.usernameFuzzyQuery} THEN 1WHEN du.username LIKE CONCAT(#{dto.usernameFuzzyQuery}, '%') THEN 2WHEN du.username LIKE CONCAT('%', #{dto.usernameFuzzyQuery}) THEN 3ELSE 4END ASC</if></select></mapper>
Mapper 接口
接下来,我们需要定义一个 Java 接口来与Mapper XML
配置文件进行映射。我们在接口中声明 pageListUser
方法来执行分页查询。
package com.selfcode.demo.mapper;import com.selfcode.demo.dto.UserDTO;
import com.selfcode.demo.vo.UserVO;
import org.apache.ibatis.annotations.Param;import java.util.List;public interface UserMapper {/*** 分页查询用户信息** @param dto 查询条件* @return 用户信息列表*/List<UserVO> pageListUser(@Param("dto") UserDTO dto);
}
查询条件 DTO
在 Java 中,我们定义一个 UserDTO
类来封装查询条件,包括分页参数、用户名模糊查询、用户组、状态和注册时间范围等。
package com.selfcode.demo.dto;import java.util.Date;public class UserDTO {private String usernameFuzzyQuery; // 模糊查询的用户名private String userGroup; // 精确查询用户组private Integer status; // 精确查询用户状态private Date beginTime; // 查询起始时间private Date endTime; // 查询结束时间private Integer pageNo = 1; // 页码,默认从1开始private Integer pageSize = 10; // 每页显示的记录数,默认每页10条// Getters 和 Setters
}
返回值 VO
UserVO
类用于存储查询返回的用户信息数据。它包括用户的 ID、用户名、用户组、邮箱、状态和注册时间等信息。
package com.selfcode.demo.vo;import java.util.Date;public class UserVO {private Long id; // 用户IDprivate String username; // 用户名private String userGroup; // 用户组private String email; // 邮箱private Integer status; // 用户状态(例如:启用、禁用)private Date registrationTime; // 注册时间// Getters 和 Setters
}
服务层
在服务层,我们定义 UserService
类来调用 Mapper 进行数据库查询。UserService
负责接收前端的请求,处理查询逻辑并返回结果。
package com.selfcode.demo.service;import com.selfcode.demo.dto.UserDTO;
import com.selfcode.demo.mapper.UserMapper;
import com.selfcode.demo.vo.UserVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class UserService {@Autowiredprivate UserMapper userMapper;/*** 获取用户分页列表** @param dto 查询条件* @return 用户列表*/public List<UserVO> getUserList(UserDTO dto) {return userMapper.pageListUser(dto);}
}
控制器层
最后,在控制器层,我们接收来自前端的请求,调用UserService
方法来获取分页查询的结果,并返回给客户端。
package com.selfcode.demo.controller;import com.selfcode.demo.dto.UserDTO;
import com.selfcode.demo.service.UserService;
import com.selfcode.demo.vo.UserVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
@RequestMapping("/api/user")
public class UserController {@Autowiredprivate UserService userService;/*** 获取分页查询用户列表** @param username 模糊查询的用户名* @param userGroup 用户组* @param pageNo 当前页* @param pageSize 每页显示条数* @return 用户列表*/@GetMapping("/list")public List<UserVO> listUsers(@RequestParam(defaultValue = "") String username,@RequestParam(defaultValue = "") String userGroup,@RequestParam(defaultValue = "1") Integer pageNo,@RequestParam(defaultValue = "10") Integer pageSize) {UserDTO dto = new UserDTO();dto.setUsernameFuzzyQuery(username);dto.setUserGroup(userGroup);dto.setPageNo(pageNo);dto.setPageSize(pageSize);return userService.getUserList(dto);}
}
MyBatis Mapper XML 配置详细解析
在上述示例中,XML 配置文件主要用于定义 SQL 查询语句,并通过 MyBatis 的映射机制将 SQL 与 Java 方法进行绑定。接下来,我们将详细解析 Mapper XML 文件中的各个部分,包括 SQL 语句、动态 SQL 标签、条件判断、排序等内容。
XML 声明和基本结构
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.selfcode.demo.mapper.UserMapper">
<?xml version="1.0" encoding="UTF-8"?>
:声明这是一个 XML 文件,并且使用 UTF-8 编码。<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
:引入 MyBatis 3.0 的 DTD 定义文件,这个声明确保 XML 文件遵循 MyBatis 的规范。<mapper namespace="com.selfcode.demo.mapper.UserMapper">
:定义了 Mapper 的命名空间,与 Java 中的UserMapper
接口类进行关联。MyBatis 会根据这个namespace
来找到对应的 SQL 配置,进行映射。
定义公共 SQL 语句 ()
<sql id="list_user">SELECT du.id,du.username,du.user_group,du.email,du.status,du.registration_timeFROM demo_user du
</sql>
<sql>
:用于定义一个公共的 SQL 片段。通过id="list_user"
来给这个 SQL 片段命名,其他地方可以通过<include>
标签来引用它。SELECT
:这是查询demo_user
表的 SQL 语句,选择了用户的id、username、user_group、email、status 和 registration_time
等字段。
分页查询的 SQL
(<select id="pageListUser" resultType="com.selfcode.demo.vo.UserVO">)
<select id="pageListUser" resultType="com.selfcode.demo.vo.UserVO"><include refid="list_user"></include><where><!-- 条件部分 --></where><order by><!-- 排序部分 --></order by>
</select>
<select>
:定义一个SELECT
查询的 SQL 语句。id="pageListUser"
表示该 SQL 语句映射到UserMapper
接口中的pageListUser
方法。resultType="com.selfcode.demo.vo.UserVO"
:指定该查询返回的数据类型为UserVO
(一个 VO 对象,用于存储返回的用户信息)。
引用公共 SQL
<include refid="list_user"></include>
<include refid="list_user">
:通过<include>
标签引用上面定义的公共 SQL 片段。这样可以避免重复编写相同的查询字段,提升代码的复用性。
动态条件查询
<where>
<where><!-- 用户名模糊查询 --><if test="dto.usernameFuzzyQuery != null and dto.usernameFuzzyQuery != ''">AND du.username LIKE CONCAT('%', #{dto.usernameFuzzyQuery}, '%')</if><!-- 用户组精确查询 --><if test="dto.userGroup != null and dto.userGroup != ''">AND du.user_group = #{dto.userGroup}</if><!-- 用户状态精确查询 --><if test="dto.status != null">AND du.status = #{dto.status}</if><!-- 注册时间范围查询 --><if test="dto.beginTime != null and dto.endTime != null">AND du.registration_time BETWEEN #{dto.beginTime} AND #{dto.endTime}</if><!-- 未删除的用户 -->AND du.is_deleted = 0
</where>
<where>
:<where>
标签用于处理 SQL 中的 WHERE 子句。MyBatis 会自动处理在动态 SQL 中添加 AND 或 OR 的位置,避免出现多余的 AND(例如,如果没有任何条件时,WHERE 会自动去掉)。<if test="...">
:动态 SQL 条件判断。如果 test 表达式的条件成立,才会执行对应的 SQL 片段。比如,只有当dto.usernameFuzzyQuery
不为空时,才会添加用户名的模糊查询条件。
用户名模糊查询:
<if test="dto.usernameFuzzyQuery != null and dto.usernameFuzzyQuery != ''">AND du.username LIKE CONCAT('%', #{dto.usernameFuzzyQuery}, '%')
</if>
- 如果
dto.usernameFuzzyQuery
不为空,则生成AND du.username LIKE '%...%'
条件进行模糊匹配。
用户组精确查询:
<if test="dto.userGroup != null and dto.userGroup != ''">AND du.user_group = #{dto.userGroup}
</if>
- 如果
dto.userGroup
不为空,则会生成AND du.user_group = '...'
条件。
用户状态精确查询:
<if test="dto.status != null">AND du.status = #{dto.status}
</if>
- 如果
dto.status
不为 null,则添加AND du.status = ...
条件进行精确查询。
注册时间范围查询:
<if test="dto.beginTime != null and dto.endTime != null">AND du.registration_time BETWEEN #{dto.beginTime} AND #{dto.endTime}
</if>
- 如果
dto.beginTime
和dto.endTime
都不为空,则生成一个时间范围查询 BETWEEN 子句。
软删除条件:
AND du.is_deleted = 0
- 这是一个硬编码的条件,用来过滤掉已删除的用户,假设 is_deleted = 1 表示用户已删除。
排序
<order by>
ORDER BY du.status DESC, du.registration_time DESC
<if test="dto.usernameFuzzyQuery != null and dto.usernameFuzzyQuery != ''">, CASEWHEN du.username = #{dto.usernameFuzzyQuery} THEN 1WHEN du.username LIKE CONCAT(#{dto.usernameFuzzyQuery}, '%') THEN 2WHEN du.username LIKE CONCAT('%', #{dto.usernameFuzzyQuery}) THEN 3ELSE 4END ASC
</if>
ORDER BY
:默认按status
字段降序排列,如果status
相同,再按registration_time
降序排列。CASE
语句:如果用户提供了usernameFuzzyQuery
进行模糊查询,我们根据匹配程度来排序。具体逻辑如下:- 如果用户名完全匹配 dto.usernameFuzzyQuery,则给这个记录排序为优先(1)。
- 如果用户名是以 dto.usernameFuzzyQuery 开头匹配,排序为第二(2)。
- 如果用户名是以 dto.usernameFuzzyQuery 结尾匹配,排序为第三(3)。
- 其他情况,排序为最后(4)。
通过这种方式,我们将更精确的匹配记录排在前面,提升用户体验。
总结
本文展示了如何使用 MyBatis 实现一个分页和模糊查询的用户列表查询功能。通过灵活的动态 SQL 配置,我们可以根据用户的输入条件动态生成查询语句,从而实现高效的数据库查询。
这个 XML 配置通过 MyBatis 动态 SQL 功能,结合 标签、 标签和 CASE 语句,实现了以下功能:
分页查询
:可以根据传入的条件动态生成 WHERE 子句,支持多种查询条件(模糊查询、精确查询、时间范围查询)。动态条件
:根据用户输入的条件,动态构建 SQL 查询,避免了不必要的条件拼接。排序优化
:通过 CASE 语句实现了对模糊查询结果的排序优化。
相关文章:
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看不到定时器而仍想计量时…...
android 启动页倒计时页面编写
一、需求和技术 1、实现5,4,3,2,1启动页倒计时 2、倒计时实现使用CountDownTimer 二、activity代码 public class OpenActivity extends AppCompatActivity {private Button in;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanc…...
Win10和11 git/Android Studio遇到filename too long问题的解决
1、打开windows长文件、长路径支持: 可以参考这篇文章: 修改注册表方法: 使用Admin登陆machine,在run中输入regedit并回车; 找到路径 ’Computer -> HKEY_LOCAL_MACHINE -> SYSTEM -> CurrentControlSet -&g…...
OpenCV相机标定与3D重建(43)用于计算矫正和重映射的变换函数initUndistortRectifyMap()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 计算畸变矫正和校正变换映射。 该函数计算联合的畸变矫正和校正变换,并以 remap 所需的地图形式表示结果。矫正后的图像看起来像是原…...
运行npm install 时,卡在sill idealTree buildDeps没有反应
运行npm install 时,卡在sill idealTree buildDeps没有反应 原因: 淘宝镜像源的域名早已经过期,所以我们需要绑定新的镜像源。 2021 年,淘宝就发布了消息称,npm 淘宝镜像已经从 registry.npm.taobao.org 切换到了 re…...
与 Oracle Dataguard 相关的进程及作用分析
与 Oracle Dataguard 相关的进程及作用分析 目录 与 Oracle Dataguard 相关的进程及作用分析与 Oracle Dataguard 相关的进程及作用分析一、主库的进程1、LGWR 进程2、ARCH进程3、LNS 进程 二、备库的进程1、RFS 进程2、ARCH3、MRP(Managed Recovery Process&#x…...
如何在Windows上编译OpenCV4.7.0
前言 参考:Win10 下编译 OpenCV 4.7.0详细全过程,包含xfeatures2d 这里在其基础上还出现了一些问题,仅供参考。 正文 一、环境 1、win10 2、cmake-gui 3、opencv4.7.0 4、VS2019 二、编译过程 1、下载需要的文件: 通…...
get和post有什么区别
GET和POST是HTTP协议中两种常用的请求方法,它们在用途、参数传递方式、缓存处理、安全性等方面存在显著差异。 以下是对GET和POST区别的详细讲解,并给出示例演示。 一、GET和POST的区别 用途 GET:主要用于获取信息,即进行查询操…...
STM32之CAN通讯(十一)
STM32F407 系列文章 - CAN通讯(十一) 目录 前言 一、CAN 二、CAN驱动电路 三、CAN软件设计 1.CAN状态初始化 2.头文件相关定义 3.接收中断服务函数 4.用户层使用 1.用户层相关定义 2.发送数据 3.接收数据 1.查询方式处理 2.中断方式处理 3…...
23.行号没有了怎么办 滚动条没有了怎么办 C#例子
新建了一个C#项目,发现行号没有了。 想把行号调出来,打开项目,选择工具>选项> 如下图,在文本编辑器的C#里有一个行号,打开就可以了 滚动条在这里:...
QT 下拉菜单设置参数 起始端口/结束端口/线程数量 端口扫描4
上篇文章QT实现 端口扫描暂停和继续功能 3-CSDN博客 双击 添加对话框类 界面设计 由于主体代码已经写完,只需要更改参数的获取即可 获取起始端口结束端口的输入 槽函数 给主界面类添加调用对话框类的功能 实现功能:点击菜单项可以弹出对话框窗体 增加槽…...
spark——RDD算子集合
目录 算子转换算子示例mapflatMapReduceByKeyfilterdistinctglomgroupBygroupByKeySortBysortByKeyunion交集intersection和差集subtractjoinpartitionBymapPartitionsample 行动算子示例ForeachPartitionForeachSaveAsTextFileCountByKeyReducefoldfirst、take、counttop、tak…...
【ArcGIS Pro二次开发实例教程】(1):图层的前置、后置
一、简介 此工具要实现的功能是:将内容框中当前选定的图层移到最顶层或最底层。 主要技术要点包括: 1、Config.daml文件设置(UI设置) 2、按钮的图片和位置设置 3、当前选定图层的获取 4、图层在内容列表中位置的获取和移动 …...
idea 运行 docker-compose 文件问题
我idea 连接远程docker 然后本地运行compose 文件出了问题 C:\Program Files\Docker\Docker\resources\bin\docker.exe compose -f D:\aproject\group-buy-market\suger_group_buy\docs\dev-ops\docker-compose-environment.yml -p dev-ops up -d正在准备 Docker SSH 环境…ti…...
深度学习中的正则化方法
最近看到了正则化的内容,发现自己对正则化的理解已经忘得差不多了,这里在整理一下,方便以后查阅。 深度学习中的正则化方法 1. L2 正则化(L2 Regularization)2. L1 正则化(L1 Regularization)3.…...
LInux单机安装Redis
1. 安装gee工具包 由于Redis是基于c语言编写的所以安装的时候需要先安装gee以及gcc的依赖,yum云用不了可以看一下这个 linux 替换yum源镜像_更换yum镜像源-CSDN博客 yum install -y gcc tcl 2. 添加redis的压缩包 3. 上传到Linux 上传到 /usr/local/src 目录、这个目录一般用于…...
kafka使用以及基于zookeeper集群搭建集群环境
一、环境介绍 zookeeper下载地址:https://zookeeper.apache.org/releases.html kafka下载地址:https://kafka.apache.org/downloads 192.168.142.129 apache-zookeeper-3.8.4-bin.tar.gz kafka_2.13-3.6.0.tgz 192.168.142.130 apache-zookee…...
深入理解 pytest_runtest_makereport:如何在 pytest 中自定义测试报告
pytest_runtest_makereport 是 pytest 系统中的一个钩子函数,它允许我们在测试执行时获取测试的报告信息。通过这个钩子,我们可以在测试运行时(无论是成功、失败还是跳过)对测试结果进一步处理,比如记录日志、添加自定…...
嵌入式技术之Linux(Ubuntu) 一
一、Linux入门 1.硬件和操作系统以及用户的关系 一个传感器,获得数据后,需要向服务器发送数据。传感器传数据给上位机。 上位机需要一个程序来接收数据,那么这个上位机是什么机器? 我们的笔记本电脑就可以当成上位机。 两个手…...
VB.NET CRC32 校验
在 VB.NET 中实现 CRC32 校验并在校验失败时退出程序,你可以按照以下步骤进行: 实现 CRC32 计算函数:首先,你需要一个函数来计算给定数据的 CRC32 值。 比较计算的 CRC32 值:然后,你需要将计算出的…...
iOS - 弱引用表(Weak Reference Table)
1. 基本数据结构 // 弱引用表的基本结构 struct weak_table_t {weak_entry_t *weak_entries; // 保存所有的弱引用对象size_t num_entries; // 当前存储的弱引用数量uintptr_t mask; // 哈希表大小掩码uintptr_t max_hash_displacement; /…...
Taro地图组件和小程序定位
在 Taro 中使用腾讯地图 1.首先在项目配置文件 project.config.json 中添加权限: {"permission": {"scope.userLocation": {"desc": "你的位置信息将用于小程序位置接口的效果展示"}} }2.在 app.config.ts 中配置&#x…...
汇编实现函数调用
x86_64 通过将函数参数存放在栈中的方式来实现参数传递。 # PURPOSE: Program to illustrate how functions work # This program will compute the value of # 2^3 5^2 ## Everything in the main program is stored in registers, # so the data section…...
C#—Task异步的常用方法及TaskFactory工厂类详解
Task异步的常用方法 C# 中的 Task 类是 System.Threading.Tasks 命名空间的一部分,用于表示异步操作。 以下是一些常用的 Task 类方法: 一、Task.Run(Action action): 此静态方法用于在后台运行一个新任务,并返回与该任务关联的 Task 实例…...
JAVA | 通过自定义注解与AOP防止接口重复提交
关注:CodingTechWork 引言 在Web应用开发中,特别是在处理表单提交或API调用时,可能会遇到用户因网络延迟、按钮多次点击等原因导致的重复提交问题。为了解决这一问题,通常的做法是在前端禁用提交按钮,或者在后端使用唯…...
从零手写实现redis(四)添加监听器
1、删除监听器 /*** 删除监听器接口** author binbin.hou* since 0.0.6* param <K> key* param <V> value*/ public interface ICacheRemoveListener<K,V> {/*** 监听* param context 上下文* since 0.0.6*/void listen(final ICacheRemoveListenerContext&…...
Spring Boot项目中使用单一动态SQL方法可能带来的问题
1. 查询计划缓存的影响 深入分析 数据库系统通常会对常量SQL语句进行编译并缓存其执行计划以提高性能。对于动态生成的SQL语句,由于每次构建的SQL字符串可能不同,这会导致查询计划无法被有效利用,从而需要重新解析、优化和编译,…...
51单片机——中断(重点)
学习51单片机的重点及难点主要有中断、定时器、串口等内容,这部分内容一定要认真掌握,这部分没有学好就不能说学会了51单片机 1、中断系统 1.1 概念 中断是为使单片机具有对外部或内部随机发生的事件实时处理而设置的,中断功能的存在&#…...
MySQL insert or update方式性能比较
MySQL中,有如下两种方式,哪种方式比较好? 1、先使用enterprise_id字段查询数据表,如果表中存在记录,则更新记录;如果不存在,则插入记录; 2、使用“INSERT INTO XXX ON DUPLICATE K…...
Linux下常用命令
本文以笔记的形式记录Linux下常用命令。 注1:限于研究水平,阐述难免不当,欢迎批评指正。 注2:文章内容会不定期更新。 一、Ubuntu 添加账号 useradd -m -s /bin/bash -d /home/newuser newuser:newuser passwd newuser 二、 Ce…...
计算机网络、嵌入式等常见问题简答
1.嵌入式系统中经常要用到无限循环,如何用C编写死循环 答:while(1){}或者for(;;) 2.程序的局部变量存在于哪里,全局变量存在于哪里,动态申请数据存在于哪里。 答:程序的局部变量存在于栈区;全局变量存在…...
嵌入式中QT实现文本与线程控制方法
第一:利用QT进行文件读写实现 利用QT进行读写文本的时候进行读写,读取MP3歌词的文本,对这个文件进行读写操作。 实例代码,利用Qfile,对文件进行读写。 //读取对应文件文件,头文件的实现。 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #incl…...