MyBatis的第四天学习笔记下
10.MyBatis参数处理
10.1 项目信息
- 模块名:mybatis-007-param
- 数据库表:t_student
- 表结构:
- id: 主键
- name: 姓名
- age: 年龄
- height: 身高
- sex: 性别
- birth: 出生日期
- sql文件:
create table t_student
( id bigint auto_increment primary key, name varchar(255) null, age int null, height double null, birth date null, sex char null
);INSERT INTO `t_student` VALUES (1, '张三', 20, 1.81, '1980-10-11', '男');
INSERT INTO `t_student` VALUES (2, '李四', 18, 1.61, '1988-10-11', '女');
INSERT INTO `t_student` VALUES (3, '赵六', 20, 1.81, '2022-09-01', '男');
INSERT INTO `t_student` VALUES (4, '赵六', 20, 1.81, '2022-09-01', '男');
INSERT INTO `t_student` VALUES (5, '张飞', 50, 10, '2022-09-01', '女');
INSERT INTO `t_student` VALUES (6, '张飞', 50, 10, '2022-09-01', '女');
10.2 POJO类
package com.example.mybatis.pojo; import java.time.LocalDate; public class Student { private Long id; private String name; private Integer age; private double height; private Character sex; private LocalDate birth;// constructor// setter and getter// toString
}
10.3 参数处理方式
10.3.1 单个简单类型参数
适用场景:查询条件只有一个简单类型参数时使用
特点:
- MyBatis可以自动推断参数类型,无需显式指定
- #{…}中的内容可以随意写
- 完整写法(可省略):
<select id="selectByName" resultType="student" parameterType="java.lang.String">select * from t_student where name = #{name, javaType=String, jdbcType=VARCHAR}
</select>
示例:
// Mapper接口
public interface StudentMapper {List<Student> selectByName(String name);Student selectById(Long id);List<Student> selectByBirth(LocalDate birth);List<Student> selectBySex(Character sex);
}// XML配置
<select id="selectByName" resultType="Student">select * from t_student where name = #{name}
</select>// 测试代码
@Test
public void testSelectByName() {List<Student> students = mapper.selectByName("张三");students.forEach(System.out::println);
}
10.3.2 Map参数
适用场景:需要传递多个参数但没有对应POJO类时
特点:
- 手动封装Map集合,将每个条件以key-value形式存放
- 通过#{map集合的key}来取值
示例:
// Mapper接口
List<Student> selectByParamMap(Map<String,Object> paramMap);// 测试代码
@Test
public void testSelectByParamMap(){Map<String,Object> paramMap = new HashMap<>();paramMap.put("nameKey", "张三");paramMap.put("ageKey", 20);List<Student> students = mapper.selectByParamMap(paramMap);students.forEach(System.out::println);
}// XML配置
<select id="selectByParamMap" resultType="student">select * from t_student where name = #{nameKey} and age = #{ageKey}
</select>
10.3.3 实体类参数
适用场景:参数与实体类属性匹配时
特点:
- #{…}中写的是属性名
- 属性名本质上是set/get方法名去掉set/get之后的名字
示例:
// Mapper接口
int insert(Student student);// 测试代码
@Test
public void testInsert(){Student student = new Student();student.setName("李四");student.setAge(30);student.setHeight(1.70);student.setSex('男');student.setBirth(LocalDate.now());int count = mapper.insert(student);System.out.println("插入了" + count + "条记录");
}// XML配置
<insert id="insert">insert into t_student values(null,#{name},#{age},#{height},#{birth},#{sex})
</insert>
10.3.4 多参数
适用场景:方法有多个参数但没有使用@Param注解时
特点:
- MyBatis底层会创建map集合存储参数
- 参数命名规则:
- arg0/param1:第一个参数
- arg1/param2:第二个参数
- 以此类推…
示例:
// Mapper接口
List<Student> selectByNameAndSex(String name, Character sex);// 测试代码
@Test
public void testSelectByNameAndSex(){List<Student> students = mapper.selectByNameAndSex("张三", '男');students.forEach(System.out::println);
}// XML配置
<select id="selectByNameAndSex" resultType="student">select * from t_student where name = #{arg0} and sex = #{arg1}
</select>
10.3.5 @Param注解(命名参数)
适用场景:方法有多个参数且需要明确参数名时
特点:
- 增强代码可读性
- @Param中的值就是Map集合的key
- 可以自定义参数名称
示例:
// Mapper接口
List<Student> selectByNameAndAge(@Param("name") String name, @Param("age") int age);// 测试代码
@Test
public void testSelectByNameAndAge(){List<Student> students = mapper.selectByNameAndAge("张三", 20);students.forEach(System.out::println);
}// XML配置
<select id="selectByNameAndAge" resultType="student">select * from t_student where name = #{name} and age = #{age}
</select>
10.4 总结对比
参数类型 | 适用场景 | 优点 | 缺点 |
---|---|---|---|
单个简单类型 | 单一条件查询 | 简单直接 | 只能处理一个参数 |
Map参数 | 多条件查询且无对应POJO | 灵活,可自定义key | 需要手动封装Map |
实体类参数 | 参数与实体属性匹配 | 自动映射属性 | 需要创建实体类 |
多参数 | 方法有多个参数 | 无需额外封装 | 参数名不直观(arg0/param1) |
@Param注解 | 需要明确参数名 | 可读性好 | 需要添加注解 |
10.5 常见问题
-
#{…}和${…}的区别
- #{…}:预编译处理,防止SQL注入
- ${…}:字符串替换,需要手动处理引号
-
参数类型自动推断
- MyBatis可以自动推断大多数简单类型的参数
- 复杂类型建议显式指定javaType和jdbcType
-
参数命名冲突
- 避免在Map参数和@Param注解中使用相同的key
- 建议使用有意义的参数名
11. MyBatis查询语句专题
模块名:mybatis-008-select
打包方式:jar
引入依赖:mysql驱动依赖、mybatis依赖、logback依赖、junit依赖。
引入配置文件:jdbc.properties、mybatis-config.xml、logback.xml
创建pojo类:Car
创建Mapper接口:CarMapper
创建Mapper接口对应的映射文件:com/powernode/mybatis/mapper/CarMapper.xml
创建单元测试:CarMapperTest
拷贝工具类:SqlSessionUtil
11.1 返回Car
当查询的结果有对应的实体类,并且查询结果只有一条时,可以直接返回Car对象。
使用场景
- 根据主键查询单条记录
- 查询结果保证只有一条记录的情况
- 查询结果有对应的实体类映射
- 需要获取完整对象信息的场景
- 需要直接操作对象属性的场景
实际应用
- 用户详情页根据用户ID查询用户信息
- 商品详情页根据商品ID查询商品信息
- 订单详情页根据订单ID查询订单信息
示例代码
// CarMapper接口
public interface CarMapper {/*** 根据id主键查询:结果最多只有一条* @param id 主键id* @return Car对象* @throws TooManyResultsException 当查询结果多于一条时抛出*/Car selectById(Long id);
}
// Mapper XML
<!-- 使用resultType="Car"指定返回类型为Car实体类列名通过as或resultMap转换为Java属性名
-->
<select id="selectById" resultType="Car">select id,car_num carNum, -- 数据库列名car_num映射到Java属性carNumbrand,guide_price guidePrice,produce_time produceTime,car_type carType from t_car where id = #{id} -- 使用#{}防止SQL注入
</select>
// 测试代码
@Test
public void testSelectById(){// 获取SqlSession和Mapper接口实例SqlSession sqlSession = SqlSessionUtil.openSession();try {CarMapper mapper = sqlSession.getMapper(CarMapper.class);// 执行查询并处理结果Car car = mapper.selectById(166L);// 验证结果Assert.assertNotNull("查询结果不应为null", car);System.out.println(car);} finally {// 确保关闭SqlSessionsqlSession.close();}
}
性能优化建议
- 对于频繁查询的字段,考虑添加数据库索引
- 大数据量查询建议使用分页
- 考虑使用二级缓存提高查询性能
常见错误及解决方案
- 错误:查询结果为空返回null
- 解决方案:使用Optional包装返回值或添加空值检查
- 错误:查询结果多于一条抛出TooManyResultsException
- 解决方案:确保查询条件唯一或使用List接收结果
- 错误:列名与属性名不匹配导致映射失败
- 解决方案:使用resultMap或开启驼峰命名映射
执行结果示例
Car{id=166, carNum='京A154345', brand='宝马', guidePrice=20.0, produceTime='2024-01-01', carType='豪华电车'}
注意事项
- 查询结果是一条记录时,也可以使用List集合接收
- 如果查询结果为空,返回null
- 如果查询结果多于一条,会抛出TooManyResultsException异常
- 建议在查询条件中确保结果唯一性
11.2 返回List
当查询的记录条数是多条时,必须使用集合接收。如果使用单个实体类接收会出现异常。
使用场景
- 查询多条记录
- 分页查询
- 条件查询可能返回多条记录
- 需要批量处理数据的场景
- 需要遍历处理每条记录的场景
实际应用
- 商品列表页查询所有商品
- 用户管理页查询所有用户
- 订单列表页查询符合条件的订单
性能考虑
- 大数据量查询建议使用分页
- 考虑使用延迟加载优化性能
示例代码
// CarMapper接口
/*** 查询所有的Car* @return Car对象列表*/
List<Car> selectAll();
// Mapper XML
<select id="selectAll" resultType="Car">select id,car_num carNum,brand,guide_price guidePrice,produce_time produceTime,car_type carType from t_car
</select>
// 测试代码
@Test
public void testSelectAll(){CarMapper mapper = SqlSessionUtil.openSession().getMapper(CarMapper.class);List<Car> cars = mapper.selectAll();cars.forEach(car -> System.out.println(car));
}
执行结果示例
[Car{id=33, carNum='103', brand='奔驰E300L', guidePrice=50.30, produceTime=2020-10-01, carType='燃油车'}, Car{id=34, carNum='102', brand='比亚迪汉', guidePrice=30.23, produceTime=2018-09-10, carType='电车'},...
]
注意事项
- 如果返回多条记录,采用单个实体类接收会抛出TooManyResultsException异常
- 查询结果为空时返回空集合,而不是null
- 建议在查询条件中明确限制返回条数,避免查询过多数据
11.3 返回Map
当返回的数据没有合适的实体类对应时,可以采用Map集合接收。字段名做key,字段值做value。
使用场景
- 查询结果没有对应的实体类
- 只需要部分字段
- 动态查询结果
示例代码
// CarMapper接口
/*** 通过id查询一条记录,返回Map集合* @param id 主键id* @return Map<String, Object> 字段名和值的映射*/
Map<String, Object> selectByIdRetMap(Long id);
// Mapper XML
<select id="selectByIdRetMap" resultType="map">select id,car_num carNum,brand,guide_price guidePrice,produce_time produceTime,car_type carType from t_car where id = #{id}
</select>
// 测试代码
@Test
public void testSelectByIdRetMap(){CarMapper mapper = SqlSessionUtil.openSession().getMapper(CarMapper.class);Map<String,Object> car = mapper.selectByIdRetMap(167L);System.out.println(car);
}
执行结果示例
{car_num=1203, id=167, guide_price=20.00, produce_time=2010-12-03, brand=奔驰GLC, car_type=电车
}
注意事项
- 如果返回多条记录,采用单个Map接收会抛出TooManyResultsException异常
- Map的key是数据库列名或别名
- Map的value类型会自动转换,但要注意类型转换可能带来的问题
11.4 返回List
查询结果条数大于等于1条数据时,可以返回一个存储Map集合的List集合。
使用场景
- 查询多条记录且没有对应的实体类
- 动态查询结果
- 需要灵活处理查询结果
示例代码
// CarMapper接口
/*** 查询所有的Car,返回一个List集合。List集合中存储的是Map集合。* @return List<Map<String,Object>> 结果集*/
List<Map<String,Object>> selectAllRetListMap();
// Mapper XML
<select id="selectAllRetListMap" resultType="map">select id,car_num carNum,brand,guide_price guidePrice,produce_time produceTime,car_type carType from t_car
</select>
// 测试代码
@Test
public void testSelectAllRetListMap(){CarMapper mapper = SqlSessionUtil.openSession().getMapper(CarMapper.class);List<Map<String,Object>> cars = mapper.selectAllRetListMap();System.out.println(cars);
}
执行结果示例
[{carType=燃油车, carNum=103, guidePrice=50.30, produceTime=2020-10-01, id=33, brand=奔驰E300L}, {carType=电车, carNum=102, guidePrice=30.23, produceTime=2018-09-10, id=34, brand=比亚迪汉},...
]
注意事项
- 查询结果为空时返回空集合
- 每个Map代表一条记录
- 适合处理动态查询结果
11.5 返回Map<String,Map>
使用Car的id作为key,方便后续取出对应的Map集合。
使用场景
- 需要根据主键快速查找记录
- 批量查询后需要按主键组织数据
- 需要建立主键到记录的映射关系
示例代码
// CarMapper接口
/*** 获取所有的Car,返回一个Map集合。* Map集合的key是Car的id。* Map集合的value是对应Car。* @return Map<Long,Map<String,Object>> 结果集*/
@MapKey("id")
Map<Long,Map<String,Object>> selectAllRetMap();
// Mapper XML
<select id="selectAllRetMap" resultType="map">select id,car_num carNum,brand,guide_price guidePrice,produce_time produceTime,car_type carType from t_car
</select>
// 测试代码
@Test
public void testSelectAllRetMap(){CarMapper mapper = SqlSessionUtil.openSession().getMapper(CarMapper.class);Map<Long,Map<String,Object>> cars = mapper.selectAllRetMap();System.out.println(cars);
}
执行结果示例
{64={carType=燃油车, carNum=133, guidePrice=50.30, produceTime=2020-01-10, id=64, brand=丰田霸道}, 66={carType=燃油车, carNum=133, guidePrice=50.30, produceTime=2020-01-10, id=66, brand=丰田霸道},...
}
注意事项
- 必须使用@MapKey注解指定作为key的字段
- 查询结果为空时返回空Map
- 适合需要根据主键快速查找的场景
11.6 resultMap结果映射
当查询结果的列名和Java对象的属性名不对应时,有三种解决方案:
- 使用as给列起别名
- 使用resultMap进行结果映射
- 开启驼峰命名自动映射
使用resultMap进行结果映射
使用场景
- 复杂的对象关系映射
- 需要自定义类型转换
- 需要处理复杂的嵌套对象
示例代码
// CarMapper接口
/*** 查询所有Car,使用resultMap进行结果映射* @return List<Car> 结果集*/
List<Car> selectAllByResultMap();
// Mapper XML
<!--resultMap:id:这个结果映射的标识,作为select标签的resultMap属性的值。type:结果集要映射的类。可以使用别名。
-->
<resultMap id="carResultMap" type="car"><!--对象的唯一标识,官方解释是:为了提高mybatis的性能。建议写上。--><id property="id" column="id"/><result property="carNum" column="car_num"/><!--当属性名和数据库列名一致时,可以省略。但建议都写上。--><!--javaType用来指定属性类型。jdbcType用来指定列类型。一般可以省略。--><result property="brand" column="brand" javaType="string" jdbcType="VARCHAR"/><result property="guidePrice" column="guide_price"/><result property="produceTime" column="produce_time"/><result property="carType" column="car_type"/>
</resultMap><select id="selectAllByResultMap" resultMap="carResultMap">select * from t_car
</select>
// 测试代码
@Test
public void testSelectAllByResultMap(){CarMapper carMapper = SqlSessionUtil.openSession().getMapper(CarMapper.class);List<Car> cars = carMapper.selectAllByResultMap();System.out.println(cars);
}
开启驼峰命名自动映射
使用场景
- 属性名遵循Java命名规范
Java命名规范:首字母小写,后面每个单词首字母大写,遵循驼峰命名方式。 - 数据库列名遵循SQL命名规范
SQL命名规范:全部小写,单词之间采用下划线分割。 - 需要简化映射配置
配置方式
在mybatis-config.xml中配置:
<settings><setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
命名规范对应关系
实体类中的属性名 | 数据库表的列名 |
---|---|
carNum | car_num |
carType | car_type |
produceTime | produce_time |
示例代码
// CarMapper接口
/*** 查询所有Car,启用驼峰命名自动映射* @return List<Car> 结果集*/
List<Car> selectAllByMapUnderscoreToCamelCase();
// Mapper XML
<select id="selectAllByMapUnderscoreToCamelCase" resultType="Car">select * from t_car
</select>
// 测试代码
@Test
public void testSelectAllByMapUnderscoreToCamelCase(){CarMapper carMapper = SqlSessionUtil.openSession().getMapper(CarMapper.class);List<Car> cars = carMapper.selectAllByMapUnderscoreToCamelCase();System.out.println(cars);
}
11.7 返回总记录条数
使用场景
- 分页查询时获取总记录数
- 统计查询
- 数据报表
示例代码
// CarMapper接口
/*** 获取总记录条数* @return 总记录数*/
Long selectTotal();
// Mapper XML
<!--long是别名,可参考mybatis开发手册。-->
<select id="selectTotal" resultType="long">select count(*) from t_car
</select>
// 测试代码
@Test
public void testSelectTotal(){CarMapper carMapper = SqlSessionUtil.openSession().getMapper(CarMapper.class);Long total = carMapper.selectTotal();System.out.println(total);
}
执行结果示例
总记录数:14
注意事项
- 建议使用count(1)或count(*)而不是count(列名)
- 注意count的返回值类型,建议使用Long而不是Integer
- 对于大数据量表,count操作可能较慢,需要考虑优化
相关文章:
MyBatis的第四天学习笔记下
10.MyBatis参数处理 10.1 项目信息 模块名:mybatis-007-param数据库表:t_student表结构: id: 主键name: 姓名age: 年龄height: 身高sex: 性别birth: 出生日期 sql文件: create table t_student ( id bigint auto_increm…...
三类人解决困境的方法
有一个视频讲述了三类人解决困境的方法,视频中有持续流出干净水源的水龙头,一杯装满脏水的玻璃杯。第一类普通人是拿着玻璃杯放到水龙头下不断接水,水龙头一直开着的第二类高手是把脏水倒到水池里,然后打开水龙头接水,…...
蓝桥杯第十一届省赛C++B组真题解析
蓝桥杯第十一届省赛CB组真题解析 八、回文日期https://www.lanqiao.cn/problems/348/learning 方法一:暴力枚举所有的日期,记录有多少个回文日期。 #include <bits/stdc.h> using namespace std; int month[13]{0,31,28,31,30,31,30,31,31,30,31…...
Tailscale 的工作原理*
Tailscale 的核心原理基于 WireGuard VPN,它实现了端到端加密的 点对点(P2P)连接,但在必要时会通过 中继服务器(DERP) 进行中转。整体来说,它是一个 零配置的 Mesh VPN,让所有设备看…...
PyTorch张量范数计算终极指南:从基础到高阶实战
在深度学习领域,张量范数计算是模型正则化、梯度裁剪、特征归一化的核心技术。本文将以20代码实例,深度剖析torch.norm的9大核心用法,并揭示其在Transformer模型中的关键应用场景。 🚀 快速入门(5分钟掌握核心操作&…...
Innovus DRC Violation和Calibre DRC Violation分析和修复案例
今天把小编昨天帮助社区训练营学员远程协助的一个经典案例分享给大家。希望能够帮助到更多需要帮助的人。如果各位想跟小编来系统学习数字后端设计实现的,可以联系小编。 数字IC后端手把手实战教程 | Innovus verify_drc VIA1 DRC Violation解析及脚本自动化修复方…...
数据库7(数据定义语句,视图,索引)
1.数据定义语句 SQL数据定义语言(DDL)用于定义和管理数据库结构,包括创建、修改和删除 数据库对象。常见的DDL语句包括CREATE、DROP和ALTER。 它的操作的是对象,区分操作数据的语句:INSERT,DELETE,UPDATE 示例&#x…...
Cadence 修改 铜和pin脚 连接属性 和 光绘参数修改
光绘层叠设置,参考 光绘参数修改, 中英文对照...
秒杀业务的实现过程
一.后台创建秒杀的活动场次信息,并关联到要秒杀的商品或服务; 二.通过定时任务,将秒杀的活动信息和商品服务信息存储到redis; 三.在商品展示页的显眼位置加载秒杀活动信息; 四.用户参与秒杀,创建订单,将…...
✅ Ultralytics YOLO 训练(Train)时实时获取 COCO 指标(AP):2025最新配置与代码详解 (小白友好 + B站视频)
✅ YOLO获取COCO指标(4): 训练(Train)启用COCO API评估(实时监控AP指标)| 发论文必看! | Ultralytics | 小白友好 文章目录 一、问题定位二、原理分析三、解决方案与实践案例步骤 1: 在 model.train() 调用中设置 save_jsonTrue步骤 2: 修改 …...
java基础 流(Stream)
Stream Stream 的核心概念核心特点 Stream 的操作分类中间操作(Intermediate Operations)终止操作(Terminal Operations) Stream 的流分类顺序流(Sequential Stream)并行流(Parallel Stream&…...
基于springboot+vue的课程管理系统
一、系统架构 前端:vue | element-ui 后端:springboot | mybatis-plus 环境:jdk1.8 | mysql8 | maven | node v16.20.2 | idea 二、代码及数据 三、功能介绍 01. 登录 02. 管理员-首页 03. 管理员-系管理 04. 管理员-专业管理 05. 管…...
android14 keycode 上报 0 解决办法
驱动改完后发现上报了keycode=0 04-07 13:02:33.201 2323 2662 D WindowManager: interceptKeyTq keycode=0 interactive=false keyguardActive=true policyFlags=2000000 04-07 13:02:33.458 2323 2662 D WindowManager: interceptKeyTq keycode=0 interactive=false key…...
小说现代修仙理论
修仙理论 灵魂感应与感知强化:通过特定的修炼方法,感应自身灵魂,以此提升感知能力,使修炼者对周围环境及自身状态的察觉更为敏锐。 生物电的感知与运用 生物电感知:修炼者需凝神静气,感知体内生物…...
6.综合练习1-创建文件
题目: 分析: 本例中使用mkdirs方法创建aaa文件夹。 题目要求是"在当前模块下的aaa文件夹",此时在左侧的目录中,是没有aaa文件夹的,所以要先创建a.txt文件的父级路径aaa文件夹,由于是在当前模块下…...
PostgreSQL的内存管理机制
目录 V1.0PostgreSQL的内存管理机制文件系统缓存作为二级缓存内存切换机制性能影响总结 V2.0PostgreSQL 内存管理机制:双缓存体系验证与笔记完善1. 现有描述验证2. 完善后的内存管理笔记2.1 双缓存体系2.2 其他关键内存区域2.3 验证方法 3. 注意事项 V1.0 PostgreS…...
ReplicaSet、Deployment功能是怎么实现的?
在Kubernetes中,ReplicaSet 和 Deployment 是用于管理 Pod 副本的关键对象。它们各自的功能和实现机制如下: 1. ReplicaSet 功能 管理 Pod 副本:确保指定数量的 Pod 副本一直在运行。如果有 Pod 副本崩溃或被删除,ReplicaSet 会…...
544 eff.c:1761处loop vect 分析
2.6 带有mask的向量数学函数 gcc 支持的svml向量数学函数 32652 GCC currently emits calls to code{vmldExp2}, 32653 code{vmldLn2}, code{vmldLog102}, code{vmldPow2}, 32654 code{vmldTanh2}, code{vmldTan2}, code{vmldAtan2}, code{vmldAtanh2}, 32655 code{vmldCbrt2}…...
搜狗拼音输入法纯净优化版:去广告,更流畅输入体验15.2.0.1758
前言 搜狗输入法电脑版无疑是装机必备的神器。它打字精准,词库丰富全面,功能强大,极大地提升了输入效率。最新版的搜狗拼音输入法更是借助AI技术,让打字变得既准确又高效。而搜狗输入法的去广告精简优化版,通过移除广…...
YOLOv11改进 | YOLOv11引入MobileNetV4
前言: 主要是对该文章YOLOv11改进 | YOLOv11引入MobileNetV4进行复现,以及对一些问题进行解答 1、mobilenetv4核心代码 from typing import Optional import torch import torch.nn as nn import torch.nn.functional as F__all__ [MobileNetV4ConvLa…...
Java中的ArrayList方法
1. 创建 ArrayList 实例 你可以通过多种方式创建 ArrayList 实例: <JAVA> ArrayList<String> list new ArrayList<>(); // 创建一个空的 ArrayList ArrayList<String> list new ArrayList<>(10); // 创建容量为 10 的 ArrayList …...
wordpress 利用 All-in-One WP Migration全站转移
导出导入站点 在插件中查询 All-in-One WP Migration备份并导出全站数据 导入 注意事项: 1.导入部分限制50MB 宝塔解决方案,其他类似,修改php.ini配置文件即可 2. 全站转移需要修改域名 3. 大文件版本,大于1G的可以参考我的…...
零基础教程:Windows电脑安装Linux系统(双系统/虚拟机)全攻略
一、安装方式选择 方案对比表 特性双系统安装虚拟机安装性能原生硬件性能依赖宿主机资源分配磁盘空间需要独立分区(建议50GB)动态分配(默认20GB起)内存占用独占全部内存需手动分配(建议4GB)启动方式开机选…...
聚焦AI与大模型创新,紫光云如何引领云计算行业快速演进?
【全球云观察 | 科技热点关注】 随着近年来AI与大模型的兴起,云计算行业正在发生着一场大变局。 “在2025年春节期间,DeepSeek两周火爆全球,如何进行私域部署成了企业关心的问题。”紫光云公司总裁王燕平强调指出,AI与…...
mapreduce 过程中,maptask的partitioner是在map阶段中具体什么阶段分区的?
在MapReduce的Map阶段中,Partitioner(分区器)的作用发生在map函数输出键值对之后,但在数据被写入磁盘(spill到本地文件)之前。具体流程如下: 分区发生的具体阶段: Map函数处理完成 当…...
找到字符串中所以字母异位词 --- 滑动窗口
目录 一:题目 二:算法原理 三:代码实现 一:题目 题目链接:438. 找到字符串中所有字母异位词 - 力扣(LeetCode) 二:算法原理 三:代码实现 版本一:无co…...
密码破解工具
1. 引言 密码是信息安全的核心之一,而攻击者往往利用各种工具和技术来破解密码。密码破解工具可以分为 离线破解(Offline Cracking) 和 在线破解(Online Cracking) 两大类: 离线破解:攻击者已经获取了加密的密码哈希(hash),可以在本地进行破解,无需与目标系统交互。…...
路由策略在双点双向路由重发布的应用
一、背景叙述 路由重发布通常是解决两个不同路由协议之间的互通问题,也就是路由双向引入。有时候,单点路由重发布在大规模网络中压力较大,缺乏冗余性,于是就有了双点双向路由重发布 问题:但是双点双向路由重发布也会…...
在Python软件中集成智能体:以百度文心一言和阿里通义千问为例
摘要 本文旨在探讨如何在Python软件中集成智能体,具体以百度文心一言和阿里通义千问等大模型生成的智能体为例。文章详细介绍了集成这些智能体的方法,包括环境准备、API调用、代码实现等步骤,并提供了相关的示例代码。通过集成这些智能体&…...
day22 学习笔记
文章目录 前言一、遍历1.行遍历2.列遍历3.直接遍历 二、排序三、去重四、分组 前言 通过今天的学习,我掌握了对Pandas的数据类型进行基本操作,包括遍历,去重,排序,分组 一、遍历 1.行遍历 intertuples方法用于遍历D…...
谈Linux之磁盘管理——万字详解
—— 小 峰 编 程 目录 一、硬盘的基本知识 1.了解硬盘的接口类型 2. 硬盘命名方式 3. 磁盘设备的命名 4. HP服务器硬盘 5. 硬盘的分区方式 二、 基本分区管理 1. 磁盘划分思路 2. 分区 2.1 MBR分区 2.2GPT分区 3.格式化—命令:mkfs 4.挂载 4.1手动挂…...
做好一个测试开发工程师第二阶段:java入门:idea新建一个project后默认生成的.idea/src/out文件文件夹代表什么意思?
时间:2025.4.8 一、前言 关于Java与idea工具安装不再展开,网上很多教程,可以自己去看 二、project建立后默认各文件夹代表意思 1、首先new---->project后会得到文件如图 其中: .idea文件代表:存储这个项目的历史…...
伪代码的定义与应用场景
李升伟 整理 伪代码(Pseudocode)是一种用近似自然语言(通常是英语或开发者熟悉的语言)和简单语法描述的算法逻辑工具。它介于自然语言和编程语言之间,不依赖具体语法规则,专注于表达思路,是编程…...
/sys/fs/cgroup/memory/memory.stat 关键指标说明
目录 1. **total_rss**2. **total_inactive_file**3. **total_active_file**4. **shmem**5. **其他相关指标**总结 以下是/sys/fs/cgroup/memory/memory.stat文件中一些关键指标的详细介绍,特别是与PostgreSQL相关的指标: 1. total_rss 定义࿱…...
机器学习中的聚类分析算法:原理与应用
一、什么是聚类分析? 聚类分析(Clustering Analysis)是机器学习中一种重要的无监督学习技术,它的目标是将数据集中的样本划分为若干个组(称为"簇"),使得同一簇内的样本彼此相似,而不同簇的样本差异较大。与分类不同&am…...
VUE中的路由处理
1.引入,预处理main.ts import {} from vue-router import { createRouter, createWebHistory } from vue-router import HomePages from @/pages/HomePages.vue import AboutPage from @/pages/AboutPage.vue import NewsPage from @/pages/NewsPage.vue //1. 配置路由规…...
MATLAB学习笔记(二) 控制工程会用到的
MATLAB中 控制工程会用到的 基础传递函数表达传递函数 零极点式 状态空间表达式 相互转化画响应图线根轨迹Nyquist图和bode图现控部分求约旦判能控能观极点配置和状态观测 基础 传递函数表达 % 拉普拉斯变换 syms t s a f exp(a*t) %e的a次方 l laplace(f) …...
Python: 实现数据可视化分析系统
后端基于Python 开源的 Web 框架 Flask,前端页面采用 LayUI 框架以及 Echarts 图表,数据库为sqlite。系统的功能模块分为数据采集和存储模块、数据处理和分析模块、可视化展示模块和系统管理模块。情感分析方面使用LDA等主题建模技术,结合领域…...
VectorBT量化入门系列:第一章 VectorBT基础与环境搭建
VectorBT量化入门系列:第一章 VectorBT基础与环境搭建 本教程专为中高级开发者设计,系统讲解VectorBT技术在量化交易中的应用。通过结合Tushare数据源和TA-Lib技术指标,深度探索策略开发、回测优化与风险评估的核心方法。从数据获取到策略部署…...
典型反模式深度解析及重构方案
反模式 1:魔法数字/字符串(Magic Numbers/Strings) ▐ 问题场景 // 订单状态校验 if (order.getStatus() 3) { // 3代表已发货?sendNotification(); }// 折扣计算 double discount price * 0.15; // 0.15是什么?…...
神经探针与价值蓝海:AI重构需求挖掘的认知拓扑学
当产品经理的决策边界遭遇量子态的用户需求,传统需求分析工具已显露出经典物理般的局限性。Gartner 2024报告揭示:全球Top 500企业中有83%遭遇需求洞察的"测不准困境"——用户声称的需求与行为数据偏差率达47%,而未被表达的潜在需求…...
Tomcat 负载均衡
目录 二、Tomcat Web Server 2.1 Tomcat 部署 2.1.1 Tomcat 介绍 2.1.2 Tomcat 安装 2.2 Tomcat 服务管理 2.2.1 Tomcat 启停 2.2.2 目录说明 2.2.3编辑主页 2.3 Tomcat管理控制台 2.3.1开启远程管理 2.3.2 配置远程管理密码 三、负载均衡 3.1 重新编译Nginx 3.1.1 确…...
CSS >子元素选择器和空格
在 CSS 中,> 符号是 子元素选择器(Child Combinator),它用于选择某个元素的直接子元素(仅限第一层嵌套的子元素,不包含更深层的后代元素)。 语法 父元素 > 子元素 {样式规则; } 示例 …...
duckdb源码阅读学习路径图
🧭 DuckDB 最小内存源码阅读路径图 1️⃣ 数据流入口与批处理:DataChunk 项目内容✅ 目标理解 DuckDB 向量化执行的数据载体结构,如何影响内存📁 路径src/common/types/data_chunk.cpp/hpp🔍 入口函数DataChunk::Initialize, DataChunk::SetCardinality, Reset📌 优化…...
C#二叉树
C#二叉树 二叉树是一种常见的数据结构,它是由节点组成的一种树形结构,其中每个节点最多有两个子节点。二叉树的一个节点通常包含三部分:存储数据的变量、指向左子节点的指针和指向右子节点的指针。二叉树可以用于多种算法和操作,…...
BT-Basic函数之首字母W
BT-Basic函数之首字母W 文章目录 BT-Basic函数之首字母Wwaitwait for start wait wait函数使程序在执行下一个功能之前暂停指定的秒数。 语法 wait <数值表达式>参数 <数值表达式> 等待时长,以秒为单位。该值必须大于或等于0。小于25毫秒的正值会被…...
如何避免论文内容被误认为是 AI 生成的?
AIGC 检测的原理 AIGC 检测主要基于自然语言处理(NLP)和机器学习技术,通过深度分析文本内容来识别其中的 AI 生成痕迹。具体原理如下: 基础学习算法:利用机器学习算法对文本信息进行特征提取和表示,以便计…...
node.js之path常用方法
node.js之path常用方法 1.path.join([…paths]) 用于将多个路径片段拼接成一个路径,会自动处理路径分隔符,避免手动拼接时可能出现的问题 const joinedPath path.join(folder1, folder2, file.txt); console.log(joinedPath); // 输出: folder1/fol…...
【面试】C++与C override的报错阶段 RAII
文章目录 C 相对于 C 语言的主要区别**1. 面向对象编程(OOP)****2. 函数增强****3. 内存管理****4. 引用(Reference)****5. 标准模板库(STL)****6. 异常处理****7. 类型安全增强****8. 其他特性****9. 兼容…...
LeetCode 3396.使数组元素互不相同所需的最少操作次数:O(n)一次倒序遍历
【LetMeFly】3396.使数组元素互不相同所需的最少操作次数:O(n)一次倒序遍历 力扣题目链接:https://leetcode.cn/problems/minimum-number-of-operations-to-make-elements-in-array-distinct/ 给你一个整数数组 nums,你需要确保数组中的元素…...