技术沙龙:Mybatis中resultMap使用案例分享
目录
一、联表查询和单表查询优劣分析
1.1 联表查询的优缺点
优点:
缺点:
1.2 单表查询的优缺点
优点:
缺点:
1.3 适用场景建议
联表查询更适合:
单表查询更适合:
1.4 优化建议
1.5 总结
二、Mybatis中resultType与resultMap之间的关系和使用场景
2.1 reslutType
2.2 reslutMap
三、案例演示
3.1 vo
3.2 controller
3.3 service
3.4 mapper
3.5 结果演示
一、联表查询和单表查询优劣分析
选择哪种方式取决于具体的业务场景、数据量、性能需求等因素。以下是综合分析:
1.1 联表查询的优缺点
优点:
- 减少网络传输和数据库连接次数:通过一次查询获取多个表的数据,减少IO开销。
- 简化业务逻辑:数据库层面完成数据关联,减少代码复杂度。
- 适合数据量小、关联简单的场景:如果表之间有良好的索引,联表查询效率较高。
缺点:
- 性能问题:数据量大时,联表查询可能导致笛卡尔积或全表扫描,性能下降。
- 维护困难:复杂SQL难以调试和扩展,分库分表时迁移成本高。
- 数据库压力大:多表关联可能增加CPU和内存消耗。
1.2 单表查询的优缺点
优点:
- 性能稳定:单表查询通常更快,尤其适合高频、小数据量的场景。
- 易于缓存和扩展:结果集更易缓存,分库分表时影响较小。
- 业务逻辑灵活:通过代码拼接数据,便于需求变更和调试。
缺点:
- 多次查询:需要多次数据库连接,可能增加IO开销。
- 代码复杂度高:需手动处理数据关联,代码量增加。
1.3 适用场景建议
联表查询更适合:
- 数据量较小且关联简单(如主从表关系)。
- 需要一次性获取完整关联数据的场景(如报表生成)。
单表查询更适合:
- 数据量大或关联复杂(如多对多关系)。
- 高并发场景,需减少数据库压力。
- 需要分库分表或分布式架构。
1.4 优化建议
- 联表优化:确保关联字段有索引,避免全表扫描。
- 单表优化:使用`IN`或批量查询减少IO次数。
- 冗余设计:适当冗余字段以减少关联查询。
1.5 总结
没有绝对的好坏,需根据实际需求权衡。联表查询适合简单关联和小数据量,单表查询适合复杂业务和大数据场景。建议通过性能测试选择最优方案。
二、Mybatis中resultType与resultMap之间的关系和使用场景
2.1 reslutType
使用方式:指定结果集的类型,MyBatis 会自动将查询结果映射到指定类型的对象中,要求查询结果的列名与对象的属性名一致。
优点:使用简单便捷,代码量少。当查询结果与实体类属性名完全匹配时,能快速完成映射。
缺点:灵活性较差,对于复杂的映射关系,如列名与属性名不一致、映射结果对象中还包含对象,像一对多,多对一这种,无法很好地处理。
2.2 reslutMap
使用方式:需要手动定义映射关系,在 reslutMap 元素中明确指定数据库列和实体类属性之间的对应关系。
优点:具有高度的灵活性,可以处理各种复杂的映射需求,包括列名与属性名不一致、嵌套查询、多表关联查询等。当然resultMap还可以像java类一样继承。总之,只要你想,这玩意儿你可以玩出花来。但是注意性能问题,尽量不要过多的嵌套。尽量配置延迟加载lazyLoadingEnabled以达到按需加载。
缺点:配置相对复杂,需要编写额外的 XML 配置,增加了代码量和维护成本。
三、案例演示
案例说明
我要分页查询学生详细信息,这些学生信息分布在多张表中:学生基本信息表、学生老师关系表、学生课时表、课程表。那么每个学生会关联不同的表,做分页查询时,分页统计的应该是主表的记录数,而不是关联后的总记录数。
分析
所以,如果使用resultType可能要先查出来主表的记录数,然后根据主表的记录分别查询各自的相关信息。这种方式显示是更多的通过代码的逻辑去实现。
但是今天,我不想用这种方式,我选择使用reslutMap进行配置,减少代码的逻辑控制。
演示
3.1 vo
/*** @author hssy*/
@ApiModel("学生详情Vo")
@Data
@EqualsAndHashCode(callSuper = true)
public class StudentInfoVo extends StudentInfo {@JsonIgnoreprivate String sysOrgCode;@JsonIgnoreprivate Date createTime;@JsonIgnoreprivate Date updateTime;@JsonIgnoreprivate Integer deleteFlag;@ApiModelProperty("助教ID")private Integer assistantId;@ApiModelProperty("助教姓名")private String assistantName;@ApiModelProperty("课程详情列表")private List<CourseVo> courseVoList;// 创建CourseVo内部类@Datapublic static class CourseVo {private Integer id;private String courseName;private Integer courseRemainHour;}
}
3.2 controller
/*** @author hssy*/
@Api(tags = "学生管理")
@RestController
@RequestMapping("/student")
public class StudentController {@Resourceprivate StudentInfoService studentInfoService;@ApiOperation(value = "查询学生信息(分页)")@PostMapping("/queryStudentPage")public Result<Page<StudentInfoVo>> queryStudentPage(@RequestBody StudentQueryForm queryForm, PageForm pageForm) {Page<StudentInfoVo> page = studentInfoService.queryStudentPage(queryForm, pageForm);return Result.success(page);}
}
3.3 service
/*** <p>* 学员基本信息表 服务实现类* </p>** @author Mr.Hongtao* @since 2025-04-29*/
@Service
public class StudentInfoServiceImpl extends ServiceImpl<StudentInfoMapper, StudentInfo> implements StudentInfoService {@Overridepublic Page<StudentInfoVo> queryStudentPage(StudentQueryForm queryForm, PageForm pageForm) {// 1. 构建分页对象Page<StudentInfo> page = new Page<>(pageForm.getPageNum(), pageForm.getPageSize());// 2. 执行自定义分页查询Page<StudentInfoVo> resultPage = baseMapper.selectStudentDetailPage(page, queryForm);// 3. 转换vo分页对象return resultPage;}
}
3.4 mapper
Page<StudentInfoVo> selectStudentDetailPage(Page<StudentInfo> page,@Param("query") StudentQueryForm queryForm);
<select id="selectStudentDetailPage" resultMap="studentInfoVoResultMap">SELECTsi.*,sa.assistant_id,e.name as assistant_name,sch.course_id,c.course_name,sch.remaining_hour as course_remain_hourFROM student_info siLEFT JOIN student_assistant sa ON si.id = sa.student_idLEFT JOIN employee e ON sa.assistant_id = e.idLEFT JOIN student_course_hour sch ON si.id = sch.student_idLEFT JOIN course c ON sch.course_id = c.id<if test="query.studentName != null and query.studentName != ''">AND si.student_name LIKE CONCAT('%', #{query}, '%')</if><!-- 其他查询条件 --></select><resultMap id="studentInfoVoResultMap" type="com.hssy.edu.vo.StudentInfoVo"><!-- 基础字段映射 --><id column="id" property="id"/><result column="student_name" property="studentName"/><!-- 其他student_info字段映射... --><result column="student_gender" property="studentGender"/><result column="birthday" property="birthday"/><result column="student_phone" property="studentPhone"/><result column="school" property="school"/><result column="grade" property="grade"/><result column="parent_name" property="parentName"/><result column="kinship" property="kinship"/><result column="parent_phone" property="parentPhone"/><result column="parent_job" property="parentJob"/><result column="family_address" property="familyAddress"/><result column="note" property="note"/><result column="create_time" property="createTime"/><result column="update_time" property="updateTime"/><result column="delete_flag" property="deleteFlag"/><!-- 助教信息 --><result column="assistant_id" property="assistantId"/><result column="assistant_name" property="assistantName"/><!-- 课程列表(一对多) --><collection property="courseVoList" ofType="com.hssy.edu.vo.StudentInfoVo$CourseVo"><result column="course_id" property="id"/><result column="course_name" property="courseName"/><result column="course_remain_hour" property="courseRemainHour"/></collection></resultMap>
3.5 结果演示
{"code": 1,"msg": "请求成功!","data": {"records": [{"id": 1,"studentName": "王浩辰","studentGender": "男","birthday": "2010-05-15","studentPhone": "13800138001","school": "第一实验小学","grade": "五年级","parentName": "王强","kinship": "父亲","parentPhone": "13900139001","parentJob": "工程师","familyAddress": "北京市海淀区中关村大街1号","note": "数学成绩优秀","assistantId": 4,"assistantName": "赵六","courseVoList": [{"id": 8,"courseName": "化学实验班","courseRemainHour": 7},{"id": 5,"courseName": "高中数学冲刺班","courseRemainHour": 18},{"id": 3,"courseName": "物理竞赛小班","courseRemainHour": 15}]},{"id": 2,"studentName": "李雨萱","studentGender": "女","birthday": "2011-03-22","studentPhone": "13800138002","school": "第二实验小学","grade": "四年级","parentName": "张芳","kinship": "母亲","parentPhone": "13900139002","parentJob": "教师","familyAddress": "北京市朝阳区建国路88号","note": "擅长舞蹈","assistantId": 4,"assistantName": "赵六","courseVoList": [{"id": 7,"courseName": "雅思写作强化","courseRemainHour": 22},{"id": 2,"courseName": "英语口语1对1","courseRemainHour": 0}]},{"id": 3,"studentName": "张子轩","studentGender": "男","birthday": "2010-11-08","studentPhone": "13800138003","school": "阳光小学","grade": "五年级","parentName": "张建国","kinship": "父亲","parentPhone": "13900139003","parentJob": "医生","familyAddress": "上海市浦东新区陆家嘴环路100号","note": "体育特长生","assistantId": 4,"assistantName": "赵六","courseVoList": [{"id": 1,"courseName": "初中数学强化班","courseRemainHour": 6}]},{"id": 4,"studentName": "刘思琪","studentGender": "女","birthday": "2011-07-19","studentPhone": "13800138004","school": "明珠小学","grade": "四年级","parentName": "王美玲","kinship": "母亲","parentPhone": "13900139004","parentJob": "律师","familyAddress": "广州市天河区体育西路189号","note": "英语口语突出","assistantId": 4,"assistantName": "赵六","courseVoList": [{"id": 4,"courseName": "小学作文基础班","courseRemainHour": 16}]},{"id": 5,"studentName": "陈宇航","studentGender": "男","birthday": "2010-09-30","studentPhone": "13800138005","school": "实验小学","grade": "五年级","parentName": "陈志强","kinship": "父亲","parentPhone": "13900139005","parentJob": "公务员","familyAddress": "深圳市福田区深南大道2008号","note": "编程兴趣浓厚","assistantId": 4,"assistantName": "赵六","courseVoList": [{"id": 6,"courseName": "少儿编程启蒙","courseRemainHour": 27}]},{"id": 6,"studentName": "杨可欣","studentGender": "女","birthday": "2011-02-14","studentPhone": "13800138006","school": "育才小学","grade": "四年级","parentName": "李秀兰","kinship": "母亲","parentPhone": "13900139006","parentJob": "会计师","familyAddress": "杭州市西湖区文三路369号","note": "美术特长生","assistantId": 4,"assistantName": "赵六","courseVoList": []},{"id": 7,"studentName": "赵天佑","studentGender": "男","birthday": "2010-06-25","studentPhone": "13800138007","school": "光明小学","grade": "五年级","parentName": "赵德才","kinship": "爷爷","parentPhone": "13900139007","parentJob": "退休教师","familyAddress": "成都市武侯区人民南路四段1号","note": "围棋三段","assistantId": 6,"assistantName": "孙八","courseVoList": []},{"id": 8,"studentName": "周雯","studentGender": "女","birthday": "2011-04-17","studentPhone": "13800138008","school": "希望小学","grade": "四年级","parentName": "孙建军","kinship": "舅舅","parentPhone": "13900139008","parentJob": "设计师","familyAddress": "重庆市渝中区解放碑1号","note": "钢琴五级","assistantId": 6,"assistantName": "孙八","courseVoList": []},{"id": 9,"studentName": "吴俊杰","studentGender": "男","birthday": "2010-12-03","studentPhone": "13800138009","school": "实验小学","grade": "五年级","parentName": "吴刚","kinship": "父亲","parentPhone": "13900139009","parentJob": "工程师","familyAddress": "武汉市武昌区中南路1号","note": "机器人竞赛获奖","assistantId": 6,"assistantName": "孙八","courseVoList": []},{"id": 10,"studentName": "郑怡","studentGender": "女","birthday": "2011-01-28","studentPhone": "13800138010","school": "阳光小学","grade": "四年级","parentName": "刘秀兰","kinship": "奶奶","parentPhone": "13900139010","parentJob": "退休医生","familyAddress": "西安市雁塔区小寨西路1号","note": "作文比赛一等奖","assistantId": 6,"assistantName": "孙八","courseVoList": []},{"id": 11,"studentName": "王子涵","studentGender": "男","birthday": "2010-08-11","studentPhone": "13800138011","school": "第一实验小学","grade": "五年级","parentName": "王勇","kinship": "父亲","parentPhone": "13900139011","parentJob": "医生","familyAddress": "南京市玄武区中山路1号","note": "科学小发明","assistantId": 6,"assistantName": "孙八","courseVoList": []},{"id": 12,"studentName": "李若曦","studentGender": "女","birthday": "2011-05-09","studentPhone": "13800138012","school": "第二实验小学","grade": "四年级","parentName": "张静","kinship": "母亲","parentPhone": "13900139012","parentJob": "律师","familyAddress": "天津市和平区南京路1号","note": "舞蹈比赛金奖","assistantId": 6,"assistantName": "孙八","courseVoList": []},{"id": 13,"studentName": "张豪","studentGender": "男","birthday": "2010-10-22","studentPhone": "13800138013","school": "明珠小学","grade": "五年级","parentName": "张爱国","kinship": "父亲","parentPhone": "13900139013","parentJob": "公务员","familyAddress": "青岛市市南区香港中路1号","note": "游泳健将","assistantId": 9,"assistantName": "郑十一","courseVoList": []},{"id": 14,"studentName": "刘雨桐","studentGender": "女","birthday": "2011-06-18","studentPhone": "13800138014","school": "育才小学","grade": "四年级","parentName": "王志明","kinship": "叔叔","parentPhone": "13900139014","parentJob": "企业经理","familyAddress": "大连市中山区人民路1号","note": "英语演讲比赛冠军","assistantId": 9,"assistantName": "郑十一","courseVoList": []},{"id": 15,"studentName": "陈昊然","studentGender": "男","birthday": "2010-04-07","studentPhone": "13800138015","school": "希望小学","grade": "五年级","parentName": "陈建国","kinship": "父亲","parentPhone": "13900139015","parentJob": "建筑师","familyAddress": "厦门市思明区湖滨南路1号","note": "数学奥赛获奖","assistantId": 9,"assistantName": "郑十一","courseVoList": []},{"id": 16,"studentName": "杨诗涵","studentGender": "女","birthday": "2011-09-12","studentPhone": "13800138016","school": "光明小学","grade": "四年级","parentName": "李美丽","kinship": "母亲","parentPhone": "13900139016","parentJob": "设计师","familyAddress": "长沙市芙蓉区五一大道1号","note": "绘画特长","assistantId": 9,"assistantName": "郑十一","courseVoList": []},{"id": 17,"studentName": "赵泽宇","studentGender": "男","birthday": "2010-07-05","studentPhone": "13800138017","school": "实验小学","grade": "五年级","parentName": "赵国强","kinship": "父亲","parentPhone": "13900139017","parentJob": "工程师","familyAddress": "郑州市金水区花园路1号","note": "编程比赛获奖","assistantId": 9,"assistantName": "郑十一","courseVoList": []}],"total": 34,"size": 20,"current": 1,"orders": [],"optimizeCountSql": true,"hitCount": false,"countId": null,"maxLimit": null,"searchCount": true,"pages": 2}
}
检查了一遍,分页信息也正确,数据完全正确。这种方式我认为优点是大大降低了业务实现类的复杂程度。代码看着更清爽简洁。
欢迎各位加入讨论,发表观点看法,我们一起学习进步!
相关文章:
技术沙龙:Mybatis中resultMap使用案例分享
目录 一、联表查询和单表查询优劣分析 1.1 联表查询的优缺点 优点: 缺点: 1.2 单表查询的优缺点 优点: 缺点: 1.3 适用场景建议 联表查询更适合: 单表查询更适合: 1.4 优化建议 1.5 总结 …...
Linux基础篇、第一章_01_3安装虚拟机手动安装部署Ubuntu22.04服务器
题目安装部署Ubuntu22.04服务器 版本号: 1.0,0 作者: 老王要学习 日期: 2025.04.29 适用环境: Ubuntu22.04 文档说明 本文档聚焦 Ubuntu 22.04 服务器的安装部署,详细介绍了从虚拟机创建、系统安装、基础配置(如更新国内源、安装常用软件、修改静态 IP、…...
dma_request_slave_channel_compat 与 dma_request_channel 的区别
1.代码示例 dma_request_channel #define dma_request_channel(mask, x, y) \__dma_request_channel(&(mask), x, y, NULL)struct dma_chan *__dma_request_channel(const dma_cap_mask_t *mask,dma_filter_fn fn, void *fn_param,struct device_node *np) {struct dma_d…...
【论文阅读】Partial Retraining Substitute Model for Query-Limited Black-Box Attacks
摘要 针对深度神经网络(DNN)分类器的黑盒攻击正受到越来越多的关注,因为它们在现实世界中比白盒攻击更实用。在黑盒环境中,对手对目标模型的了解有限。这使得难以估计用于制作对抗示例的梯度,从而无法将强大的白盒算法直接应用于黑盒攻击。因此,一种著名的黑盒攻击策略会…...
JAVA---集合ArrayList
集合 1. 自动扩容 ,集合长度可变 2. 只可以存引用数据类型,如果要存基本数据类型,需要将其转换成对应的包装类 ArrayList 定义在 java.util 下的,实现了 List 接口。ArrayList 内部以动态数组的形式存储元素,这意…...
快速了解Go+微服务(概念和一个例子)
更多个人笔记:(仅供参考,非盈利) gitee: https 文章目录 基本概念grpc和简单demo 基本概念 特点: 单一职责:一个服务用来解决一个业务问题面向服务:一个服务封装并对外提供服务&am…...
MIT XV6 - 1.1 Lab: Xv6 and Unix utilities - sleep 是怎样练成的?
接上文MIT XV6 - 1.1 Lab: Xv6 and Unix utilities - sleep 探究sleep.c是如何’炼成’的? 老实讲,我不熟悉Makefile,最多写过简单的编译和辅助脚本,拿到Xv6的Makefile是一脸懵的,至今还是一脸懵,那么我们上篇中新加的…...
4月28号
初认web前端: web标准: HTML:...
React Native 太慢:kotlin-gradle-plugin-2.0.21-gradle76.jar 下载太慢
React Native 初次运行(已经连接手机USB调试)。 运行的命令:npx react-native run-android。 一直卡在jar包的下载部分,总是几十kb的速度。 > Evaluating settings > :gradle-plugin > Resolve files of :gradle-plug…...
面试篇 - Transformer前馈神经网络(FFN)使用什么激活函数?
1. FFN结构分解 原始Transformer的FFN层 FFN(x) max(0, xW₁ b₁)W₂ b₂ # 原始论文公式 输入:自注意力层的输出 x(维度 d_model512) 扩展层:xW₁ b₁(扩展为 d_ff2048) 激活函数:Re…...
Lua 第14部分 数据结构
14.1 数组 Lua 语言中的表并不是一种数据结构,它们是其他数据结构的基础。我们可以用 Lua 语言中的表来实现其他语言提供的数据结构,如数组、记录、列表、队列、集合等。而且,用Lua 语言中的表实现这些数据结构还很高效。 在像 C 和…...
杭州数据库恢复公司之Dell服务器RAID5阵列两块硬盘损坏报警离线
外地客户寄过来六块SAS服务器硬盘,说是组了RAID5磁盘阵列的戴尔DELL服务器突然崩溃了,更换阵列卡后开始可以进入系统,不过有一块盘亮黄灯报警,工程师打算把服务器放回机柜后更换新硬盘,但再重启就无法进系统了…...
linux 内核 debugfs 使用介绍
一:概述 debugfs 是 Linux 内核提供的一个特殊的虚拟文件系统,用于 暴露内核模块(如驱动)内部的调试信息或控制接口,供开发者、调试人员实时查看和排查问题。即 debugfs 就是一个“调试专用的 /proc 或 /sys”…...
MarkItDown:如何高效将各类文档转换为适合 LLM 处理的 Markdown 格式
MarkItDown:如何高效将各类文档转换为适合 LLM 处理的 Markdown 格式 引言项目概述分析基本信息主要功能支持的文件格式技术架构 为什么选择 Markdown?核心功能详解1. 文档转换机制2. LLM 集成能力3. 多种转换选项4. 插件系统 安装和使用教程安装可选依赖…...
解锁未来工作方式:什么是 AI Agent?| Unlocking the Future of Work: What Are AI Agents?
🇨🇳 解锁未来工作方式:什么是 AI Agent?| 🇺🇸 Unlocking the Future of Work: What Are AI Agents? 关键词提示:本文将介绍 AI agents, knowledge graph, LangChain, Graphiti 等相关术语&am…...
8分钟快速掌握Markdiwn
文档说明:本文档适合有编程基础的专业人士快速学习Markdown语法,从而立即上手使用Markdown来记笔记,新手可移步至Markdown入门到精通实战教程:使用Typora快速构建编辑MD文档_md文件编辑器typora-CSDN博客 进行入门学习 Markdown文档的元素包括块级元素、内联元素、HTML元素…...
多维驱动:负载均衡何以成为现代系统架构的基石
负载均衡的引入是现代网络架构和分布式系统发展的必然需求,除了上述提到的原因,还涉及以下多个关键层面,共同推动其成为复杂系统不可或缺的组成部分: 一、提升服务质量(QoS) 响应时间优化:用户…...
本地知识库工具FASTGPT的安装与搭建
FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,将智能对话与可视化编排完美结合,让 AI 应用开发变得简单自然。无论您是开发者还是业务人员,都能轻松打造专属的 AI 应用。 今天来试着搭建下,使用docker安装比较简单&#x…...
【嘉立创EDA】如何找到曲线和直线的交点,或找到弧线和直线的交点
文章路标👉 :one: 文章解决问题:two: 主题内容:three: 参考方法be end..1️⃣ 文章解决问题 操作环境:嘉立创EDA专业版 V2.2.38 本文使用嘉立创EDA,描述如何快速找到曲线和直线交点的方法,这里的曲线包括了弧线等。本文将此过程记录,以供有需要的读者参考。 2️⃣ 主题…...
余额分账和代付有什么区别?
余额分账和代付有什么区别?余额分账是把钱存到一起,但代付是把钱分开。看似简单的一字之差,却有着本质的区别。 余额分账是一种财务管理手段,在一个账户或平台上,根据一定的规则将账户内的余额进行划分,形…...
【Stable Diffusion】文生图进阶指南:采样器、噪声调度与迭代步数的解析
在Stable Diffusion文生图(Text-to-Image)的创作过程中,采样器(Sampler)、噪声调度器(Schedule type)和采样迭代步数(Steps)是影响生成效果的核心参数。本文将从技术原理、参数优化到实践应用,深入剖析DPM++ 2M采样器、Automatic噪声调度器以及采样步数的设计逻辑与协…...
1.1探索 LLaMA-Factory:大模型微调的一站式解决方案
探索 LLaMA-Factory:大模型微调的一站式解决方案 引言 在大模型的时代,微调技术是将预训练模型适配到特定任务的关键。LLaMA-Factory 作为一款强大的工具,为开发者提供了便捷且高效的大模型微调解决方案。本文将深入介绍 LLaMA-Factory 的基…...
嵌入式开发面试常见编程题解析:pthread_join 与 pthread_detach 详解
一、引言 在多线程编程中,线程的资源管理至关重要。pthread_join 和 pthread_detach 是用于线程资源管理的两个重要函数。正确使用它们可以确保线程资源的合理回收,避免出现资源泄漏等问题。本文将详细介绍这两个函数的区别、使用方法、常见易错点以及拓…...
C#里嵌入lua脚本的例子
由于lua脚本比较小,并且适用性很强,非常适合嵌入式系统里加入。 比如在GD32的MCU里运行lua脚本,又者在ESP32里运行它,都是比较方便的。 当脚本要发送给MCU运行之前,我们需要在PC的软件里对脚本进行编译, 以便发现脚本有什么问题,不能在MCU里去发现问题,否则那样会比…...
git配置SSH KEY
1. 生成SSH密钥 ssh-keygen一直按回车 2.查看密钥 去.ssh目录查看生成的密钥文件 .pub结尾的文件即是密钥文件 3.配置SSH KEY 到代码仓库如GitHub,gitlab等配置SSH KEY,将密钥复制上去添加即可...
js day9
js当中与滚动相关的属性 <div>haha</div> <script>let boxdocument.querySelector("div")box.addEventListener("scoll",function(e)){console.log(window.scrolltop) }//往上走了 </script> ,box.scrollHeight——获取元素内容…...
【docker】启动临时MongoDB容器、挂载数据卷运行数据库服务,并通过备份文件恢复MongoDB数据库备份数据
启动临时 MongoDB 容器、挂载数据卷运行数据库服务,并通过备份文件恢复数据 1.命令分解与功能说明1.1.启动一个临时 MongoDB 容器,并进入交互式终端(1)执行命令(2)实现功能(3)…...
20_大模型微调和训练之-基于LLamaFactory+LoRA微调LLama3后格式合并
1. 什么是 GGUF GGUF 格式的全名为(GPT-Generated Unified Format),提到 GGUF 就不得不提到它的前身 GGML(GPT-Generated Model Language)。GGML 是专门为了机器学习设计的张量库,最早可 以追溯到 2022/10。其目的是为了有一个单文件共享的格式…...
LLamaFactory如何在Windows系统下部署安装训练(保姆级教程)
注意:以下教程编写和灵感来源均来自eogee开源作者(EOGEE_岳极技术_大模型与AI知识技术共享社区),大家有需要学习AI方面的知识可以关注他。 另我个人此次环境部署所用的显卡是5070ti16G显存,系统是Windows11。 如有问题…...
数据库系统概论|第三章:关系数据库标准语言SQL—课程笔记7
前言 在前面文章的介绍中,已经介绍了数据定义、数据更新、数据查询,关于SQL语句的标准语言已经基本上介绍完毕,本文接下来将介绍另外两种便于操作的操作模式——视图与索引。其大致的语句代码与前文其实并无大的区别,在了解基本语…...
【LeetCode】彩灯装饰记录 III
题目 题目链接 一棵圣诞树记作根节点为 root 的二叉树,节点值为该位置装饰彩灯的颜色编号。请按照如下规则记录彩灯装饰结果: 第一层按照从左到右的顺序记录 除第一层外每一层的记录顺序均与上一层相反。即第一层为从左到右,第二层为从右到左…...
MongoDB的图形化工具robo3t,navicat
MongoDB 常用的两个图形化工具 —— Robo 3T 和 Navicat 的详细介绍、区别和基本使用方法: 🧰 一、Robo 3T(原 Robomongo) 📌 简介 Robo 3T 是一款专注于 MongoDB 的轻量级可视化客户端。由原 Robomongo 团队开发&am…...
python celery框架结合django的使用
学习目标: 通过文章了解celery的运行机制以及如何结合django去使用 熟悉celery的运行原理属性celery在django项目当中的配置如何启动运行celery框架 学习内容: 熟悉celery的运行原理,简单来说 Celery 是一个“任务排队机后台处理器”。帮你…...
Ansible 守护 Windows 安全(Ansible Safeguards Windows Security)
Ansible 守护 Windows 安全:自动化基线检查与加固 在当今网络威胁日益严峻的形势下,保障 Windows 系统安全至关重要。Ansible 作为一款强大的自动化运维工具,可通过自动化脚本实现 Windows 安全基线检查和加固,大幅提升运维效率并…...
【计算机架构】CISC(复杂指令集计算机)架构
一、引言 在计算机技术领域中,计算机架构是基石,决定着计算机系统的性能、功能和效率。CISC(复杂指令集计算机)架构作为一种经典的计算机架构,自诞生以来就在计算机发展历程中扮演着举足轻重的角色。从早期的大型计算机…...
【学习资源】知识图谱与大语言模型融合
知识图谱与大型语言模型结合参数知识和明确知识的可用性会带来一些机会和愿景。分享一些知识图谱和大语言模型融合的论文和文章、实践案例、关键技术和实用工具。 1 模型库获取 https://modelscope.cn/models 注 下载模型需运行 git lfs instal 2 论文和文章 2.1 大型语言模…...
探索微服务入口:Spring Cloud Gateway 实战指南
在微服务架构中,网关(Gateway)扮演着“请求入口”的角色。它不仅帮助我们统一入口、路由转发,还可以承担限流、安全认证、权限校验、熔断等功能。 本文将系统介绍 Spring Cloud Gateway 的基础概念、快速上手指南,以及…...
python的turtle库实现四叶草
实现代码: import turtle turtle.pencolor(‘green’) turtle.fillcolor(‘green’) turtle.begin_fill() turtle.circle(100,90) turtle.left(90) turtle.circle(100,90) turtle.right(180) turtle.circle(100, 90) turtle.left(90) turtle.circle(100,90) tu…...
医疗生态全域智能化:从技术革新到价值重塑的深度探析
引言 医疗人工智能正在经历从单一技术应用向全域生态系统演进的关键转折点。随着深度学习、自然语言处理和计算机视觉等技术的成熟,AI不再局限于辅助诊断等单一功能,而是逐渐渗透到医疗健康服务的全生命周期。从传统设备制造商向智慧医疗转型的东软医疗,正在构建"AI大…...
Rust 的 Web 世界:actix_web 轻松接收 JSON 请求体
前言 在现代 Web 世界,数据传输早已从“你问我答”的问卷时代,迈入“你扔我接”的快节奏赛道。其中最火的“传球”方式,非 JSON 请求体莫属。Rust 这门以高性能和强类型著称的语言,也不甘人后,推出 actix_web 框架,力求在 Web 世界中杀出一条血路。 今天我们不讲玄学,…...
1.3 点云数据获取方式——ToF相机
图1-3-1TOF相机 ToF 相机作为新兴的 3D 感知设备,凭借独特的技术优势崭露头角。其工作原理基于光飞行时间(Time of Flight)技术,通过测量光信号从发射到被物体反射后返回传感器的时间差,直接且快速地获取物体的深度信息。这种直接测量深度的方式使得 ToF 相机具备…...
数据结构每日一题day13(链表)★★★★★
题目描述:采用尾插法在头指针L处建立一个带头结点的单链表,输入-1表示结束结果返回建立的单链表。 算法思想: 1.初始化链表:创建一个头结点(不存储实际数据),头指针 L 指向该头结点。初始时,头…...
【网络编程】UDP协议 和 Socket编程
1. UDP的特点 UDP(User Datagram Protocol,用户数据报协议)是互联网协议套件中的一种传输层协议,与广泛使用的TCP(Transmission Control Protocol,传输控制协议)相比,它是一种无连接…...
【探寻C++之旅】第十二章:异常
请君浏览 前言1.异常的概念2.异常的使用2.1 抛出与捕获2.2 栈展开2.3 查找匹配的处理代码2.4 简单的异常使用2.5 异常重新抛出 2. 异常的安全问题3. 异常的规范4. 标准库的异常5. 异常处理建议尾声 前言 今天,我们继续踏入追寻C的冒险历程。今天我们让我们来讲讲C中…...
CSS的三大特性:层叠、继承与优先级
CSS作为网页设计的核心语言,其三大核心特性——层叠性、继承性和优先级共同构成了样式表现的底层逻辑。理解这些特性将帮助开发者写出更优雅、更易维护的样式代码。 一、层叠性(Cascading) 1.1 核心概念 "层叠"指多个样式规则同…...
Spring Cloud 项目中优雅地传递用户信息:基于 Gateway + ThreadLocal 的用户上下文方案
在 Spring Cloud 微服务架构中,我们通常使用 API 网关(如 Spring Cloud Gateway)作为流量入口,负责统一的用户身份校验和请求路由。本文将介绍一种通用的用户信息传递方案:网关完成认证后通过请求头传递用户信息&#…...
node.js 实战——mongoDB 续一
mongoDB的基本指令 进入mongodb mongo显示当前的所有数据库 show dbs # 或者 show databases切换数据库/进入指定数据库 使用这个命令的时候,是不要求这个数据库是否创建 use 数据库名显示当前数据库 db显示数据库中所有集合 show collections数据库的CRUD的…...
鸟笼效应——AI与思维模型【84】
一、定义 鸟笼效应思维模型指的是人们在偶然获得一件原本不需要的物品后,会为了这件物品的配套或使用需求,进而继续添加更多与之相关但自己原本可能并不需要的东西,仿佛被这个“鸟笼”牵着走,最终陷入一种惯性消费或行为模式的现象。简单来说,就是人们在心理上会有一种自…...
豪越科技消防立库方案:实现应急物资高效管理
在消防救援工作中,应急物资管理是至关重要的一环。然而,当前应急物资管理的现状却令人担忧。传统的应急物资管理方式存在诸多弊端,严重影响了消防救援的效率和效果。 走进一些传统的消防仓库,映入眼帘的往往是杂乱无章的存储场景。…...
简化excel校验提高开发效率
业务背景:上传excel文件进行基础数据校验,然而东西太多写着写着就...自然成了测试的KPI了 解决思路:使用现有的注解处理,原理使用validate注解原理 直接上干货,一行代码搞定校验: ValidateUtils.validat…...