MyBatis关联映射
目录
一、什么是关联注解?
二、数据库建表
1.学生表
2.教师表
三、一般查询
(1)创建StudentTeacher类
(2)mapper层
(3)Dao接口
(4)Test类
(5)测试结果
四、关联映射:一对一、多对一
1、第一种形式 连表查询
(1)创建Student实体类
(2)mapper层
(3)Dao接口
(4)Test类
(5)运行结果
2.第二种形式 分步查询
(1)mapper层
(2)Dao层
(3)Test类
(4)运行结果
五、关联映射:一对多
1.第一种形式:按照结果嵌套处理
(1)设置实体类
(2)mapper层
(3)Dao接口
(4)Test类
(5)运行结果
2.第二种形式:按照查询嵌套处理
(1).设置实体类
(2)mapper层
(3)Dao层
(4)Test类
(5)运行结果
一、什么是关联注解?
MyBatis关联注解是在使用MyBatis进行数据库操作时,用于处理对象之间关联关系的注解。这些注解使得开发者可以更加灵活地处理数据库中的关联数据,而无需编写复杂的XML映射文件。
二、数据库建表
1.学生表
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (`id` int(11) NOT NULL AUTO_INCREMENT,`Sname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`sex` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`age` int(11) DEFAULT NULL,`t_id` int(11) DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (1, '张三', '男', 18, 1);
INSERT INTO `student` VALUES (2, '李四', '女', 18, 1);
INSERT INTO `student` VALUES (3, '王五', '男', 18, 1);
INSERT INTO `student` VALUES (4, '小白', '女', 18, 1);
INSERT INTO `student` VALUES (5, '小黑', '男', 18, 1);
INSERT INTO `student` VALUES (6, '小红', '女', 20, 2);
INSERT INTO `student` VALUES (7, '小李', '男', 20, 2);
INSERT INTO `student` VALUES (8, '小张', '女', 20, 2);
INSERT INTO `student` VALUES (9, '小赵', '男', 20, 2);
INSERT INTO `student` VALUES (10, '小王', '女', 20, 2);SET FOREIGN_KEY_CHECKS = 1;
2.教师表
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for teacher
-- ----------------------------
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher` (`id` int(11) NOT NULL AUTO_INCREMENT,`Tname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- Records of teacher
-- ----------------------------
INSERT INTO `teacher` VALUES (1, '张老师');
INSERT INTO `teacher` VALUES (2, '李老师');SET FOREIGN_KEY_CHECKS = 1;
三、一般查询
select student.*,teacher.* from student left join teacher on student.t_id=teacher.id
结果如下
在idea中
(1)创建StudentTeacher类
按照表头进行变量属性设置,并设置getter&setter函数,重写toString方法
package com.qcby.entity;public class StudentTeacher {private Integer id;private String Sname;private String sex;private Integer age;private Integer t_id;private String Tname;@Overridepublic String toString() {return "StudentTeacher{" +"id=" + id +", Sname='" + Sname + '\'' +", sex='" + sex + '\'' +", age=" + age +", t_id=" + t_id +", Tname='" + Tname + '\'' +'}';}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getSname() {return Sname;}public void setSname(String sname) {Sname = sname;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Integer getT_id() {return t_id;}public void setT_id(Integer t_id) {this.t_id = t_id;}public String getTname() {return Tname;}public void setTname(String tname) {Tname = tname;}
}
(2)mapper层
<select id="findStudentTeacher" resultType="com.qcby.entity.StudentTeacher">SELECT student.*,teacher.* FROM student LEFT JOIN teacher on student.t_id = teacher.id</select>
(3)Dao接口
package com.qcby.dao;import com.qcby.entity.StudentTeacher;import java.util.List;public interface StudentTeacherDao {List<StudentTeacher> findStudentTeacher();
}
(4)Test类
package com.qcby;import com.qcby.dao.StudentTeacherDao;
import com.qcby.entity.StudentTeacher;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;import java.io.IOException;
import java.io.InputStream;
import java.util.List;public class StudentTeacherTest {private InputStream in = null;private SqlSession session = null;private StudentTeacherDao mapper = null;@Before //前置通知, 在方法执行之前执行public void init() throws IOException {//加载主配置文件,目的是为了构建SqlSessionFactory对象in = Resources.getResourceAsStream("SqlMapConfig.xml");//创建SqlSessionFactory对象SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);//通过SqlSessionFactory工厂对象创建SqlSesssion对象session = factory.openSession();//通过Session创建UserDao接口代理对象mapper = session.getMapper(StudentTeacherDao.class);}@After //@After: 后置通知, 在方法执行之后执行 。public void destory() throws IOException {//释放资源session.close();in.close();}@Testpublic void findStudentTeacher(){List<StudentTeacher> studentTeacher=mapper.findStudentTeacher();for (StudentTeacher s:studentTeacher) {System.out.println(s.toString());}}
}
(5)测试结果
四、关联映射:一对一、多对一
1、第一种形式 连表查询
(1)创建Student实体类
我们的目标是找到学生对应的老师:这个思路为先找到所有的学生,然后找到其所对应的老师
学生类
package com.qcby.entity;public class Student {private Integer id;private String Sname;private String sex;private Integer age;private Integer t_id;//重要private Teacher teacher;@Overridepublic String toString() {return "Student{" +"id=" + id +", Sname='" + Sname + '\'' +", sex='" + sex + '\'' +", age=" + age +", t_id=" + t_id +
// ", teacher=" + teacher +'}';}public Teacher getTeacher() {return teacher;}public void setTeacher(Teacher teacher) {this.teacher = teacher;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getSname() {return Sname;}public void setSname(String sname) {Sname = sname;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Integer getT_id() {return t_id;}public void setT_id(Integer t_id) {this.t_id = t_id;}
}
教师类
public class Teacher {private Integer id;private String Tname;
}
其中很重要的一行,这一行一定要加上
private Teacher teacher;
(2)mapper层
<select id="findStudentTeacher" resultMap="StudentTeacher">SELECT student.id,student.Sname,teacher.Tname FROM student LEFT JOIN teacher on student.t_id = teacher.id
</select><resultMap id="StudentTeacher" type="com.qcby.entity.Student"><result property="id" column="id"/><result property="Sname" column="Sname"/><result property="sex" column="sex"/><result property="age" column="age"/><result property="t_id" column="t_id"/><association property="teacher" javaType="com.qcby.entity.Teacher"><result property="id" column="id"/><result property="Tname" column="Tname"/></association>
</resultMap>
resultMap
是MyBatis中一个非常强大的特性,它用于定义结果映射。允许你将数据库中的列映射到Java对象的属性上,尤其是在处理复杂类型(如关联对象)时非常有用。以下是一些解释:
- resultMap标签:
id="StudentTeacher"
:这是resultMap
的唯一标识符,用于在查询语句中引用这个映射配置。type="com.qcby.entity.Student"
:指定了这个resultMap
映射到的Java类型,这里是com.qcby.entity.Student
类。- result标签:
- 这些标签用于定义数据库列到Java对象属性的直接映射。
- 例如,
<result property="id" column="id"/>
表示将数据库中的id
列映射到Student
对象的id
属性上。- 同样的,
Sname
、sex
、age
和t_id
列分别映射到Student
对象的Sname
、sex
、age
和t_id
属性上。- association标签:
<association property="teacher" javaType="com.qcby.entity.Teacher">
:这个标签用于处理复杂类型的属性映射,这里表示Student
对象中的teacher
属性(类型为Teacher
)的映射。- 在
association
内部,你可以定义Teacher
对象的属性映射。例如,<result property="id" column="id"/>
和<result property="Tname" column="Tname"/>
表示将数据库中的id
和Tname
列映射到Teacher
对象的id
和Tname
属性上。- 需要注意的是,这里的
id
列映射可能会有些混淆,因为在Student
和Teacher
的映射中都出现了。在实际应用中,可能需要通过别名(alias)来区分这两个id
列,确保它们正确地映射到各自的对象属性上。如下:<resultMap id="StudentTeacher1" type="com.qcby.entity.Student"><id property="id" column="id"/><result property="Sname" column="Sname"/><result property="sex" column="sex"/><result property="age" column="age"/><result property="t_id" column="t_id"/><!-- select="getTeacher" :调用下一个查询语句 --><!-- column="t_id" 两个表的关联字段--><association property="teacher" column="t_id" javaType="com.qcby.entity.Teacher"select="com.qcby.dao.TeacherDao.findTeacherById"/> </resultMap>
(3)Dao接口
List<Student> findStudentTeacher();
(4)Test类
@Testpublic void findStudent(){List<Student> student=mapper.findStudentTeacher();for (Student s:student) {System.out.println(s.toString());}}
(5)运行结果
2.第二种形式 分步查询
我们的目标是找到学生对应的老师:这个思路为先找到所有的老师,然后找到其所对应的学生
select * from student
select * from teacher where id = #{t_id};
(1)mapper层
StudentMapper.xml
<select id = "findStudentTeacher1" resultMap="StudentTeacher1"> select * from student;</select> <resultMap id="StudentTeacher1" type="com.qcby.entity.Student"><id property="id" column="id"/><result property="Sname" column="Sname"/><result property="sex" column="sex"/><result property="age" column="age"/><result property="t_id" column="t_id"/><!-- select="getTeacher" :调用下一个查询语句 --><!-- column="t_id" 两个表的关联字段--><association property="teacher" column="t_id" javaType="com.qcby.entity.Teacher"select="com.qcby.dao.TeacherDao.findTeacherById"/></resultMap>
TeacherMapper.xml
<select id="findTeacherById" resultType="com.qcby.entity.Teacher">select * from teacher where id = #{t_id};
</select>
(2)Dao层
StudentDao
List<Student> findStudentTeacher1();
TeacherDao
Teacher findTeacherById();
(3)Test类
@Testpublic void findStudent1(){List<Student> student=mapper.findStudentTeacher1();for (Student s:student) {System.out.println(s.toString());}}
(4)运行结果
五、关联映射:一对多
查询每个老师有多少学生
1.第一种形式:按照结果嵌套处理
SELECT teacher.id,teacher.name,student.name FROM teacherLEFT JOIN student on student.t_id = teacher.id
(1)设置实体类
学生类
这里需要将student类当中关于teacher的字段删除
private Integer id;private String Sname;private String sex;private Integer age;private Integer t_id;
教师类
因为要接收多个对象,这里用List<Student>
private Integer id;
private String Tname;
//这个一定要有
private List<Student> students;
(2)mapper层
<select id="TeacherStudent" resultMap="TeacherStudent">SELECT student.*,teacher.* FROM student LEFT JOIN teacher on student.t_id = teacher.id
</select><resultMap id="TeacherStudent" type="com.qcby.entity.Teacher"><result property="id" column="id"/><result property="Tname" column="Tname"/><collection property="students" ofType="com.qcby.entity.Student"><result property="id" column="id"/><result property="Sname" column="Sname"/><result property="sex" column="sex"/><result property="age" column="age"/><result property="t_id" column="t_id"/></collection>
</resultMap>
复杂的属性我们需要单独去处理——resultMap中接收:对象:association 集合:collection。在集合中的泛型信息,我们使用ofType获取。
(3)Dao接口
List<Teacher> TeacherStudent();
(4)Test类
@Testpublic void TeacherStudent(){List<Teacher> teacher=mapper.TeacherStudent();for (Teacher t:teacher) {System.out.println(t.toString());}}
(5)运行结果
2.第二种形式:按照查询嵌套处理
(1).设置实体类
这里的实体类不需要变动
(2)mapper层
TeacherMapper.xml
<select id="TeacherStudent1" resultMap="TeacherStudent2">select * from teacher</select><resultMap id="TeacherStudent2" type="com.qcby.entity.Teacher"><collection property="students" column="id" ofType="com.qcby.entity.Student"select="com.qcby.dao.StudentDao.getStudentByTeacherId" /></resultMap>
StudentMapper.xml
<select id="getStudentByTeacherId" resultType="com.qcby.entity.Student">select * from student where t_id = #{t_id}
</select>
(3)Dao层
TeacherDao
List<Teacher> TeacherStudent1();
StudentDao
Student findStudentById();
(4)Test类
@Testpublic void TeacherStudent1(){List<Teacher> teacher=mapper.TeacherStudent1();for (Teacher t:teacher) {System.out.println(t.toString());}}
(5)运行结果
相关文章:
MyBatis关联映射
目录 一、什么是关联注解? 二、数据库建表 1.学生表 2.教师表 三、一般查询 (1)创建StudentTeacher类 (2)mapper层 (3)Dao接口 (4)Test类 (5&#x…...
通过华为鲲鹏认证的软件产品如何助力信创产业
软件通过华为鲲鹏认证与信创产业有着密切的联系。鲲鹏认证是华为推动信创产业发展的一项重要举措,通过该认证,软件可以在华为的生态系统中实现更好的兼容性和性能优化,从而推动信创产业的全面发展和国产化替代。 鲲鹏认证的定义和重要性 鲲…...
陈志刚解读:国家数据基础设施建设解读(附下载)
本期分享陈志刚解读:国家数据基础设施建设解读,从背景意图、概念内涵、发展愿景与总体功能、总体架构、重点方向、算力底座、网络支撑、安全防护和组织保障十个方面展开,共52页ppt。 加入星球可获取完整版资料 篇幅限制,部分内容…...
QT 中 sqlite 数据库使用
一、前提 --pro文件添加sql模块QT core gui sql二、使用 说明 --用于与数据库建立连接QSqlDatabase--执行各种sql语句QSqlQuery--提供数据库特定的错误信息QSqlError查看qt支持的驱动 QStringList list QSqlDatabase::drivers();qDebug()<<list;连接 sqlite3 数据库 …...
VPN设备
定义: 虚拟专用网络指的是在公用网络上建立专用网络的技术。之所以称为虚拟网主要是因为整个VPN网络的任意两个节点之间的连接并没 有传统专网所需的端到端的物理链路,而是架构在公用网络服务商所提供的网络平台之上的逻辑网络,用户数据在逻辑链路中传输…...
centos部署SkyWalking并在springcloud项目中用法举例
文章目录 场景SkyWalking介绍部署部署Storage [单机版Elasticsearch]部署SkyWalking OAP [下载地址](https://skywalking.apache.org/downloads/#SkyWalkingAPM)部署SkyWalking Java AgentspringCloud 使用举例 场景 SkyWalking是应用性能监控平台,可用于分布式系统…...
[创业之路-186]:《华为战略管理法-DSTE实战体系》-1-为什么UTStarcom死了,华为却活了,而且越活越好?
目录 前言 一、市场定位与战略选择 二、技术创新能力 三、企业文化与团队建设 四、应对危机的能力 五、客户为中心的理念 六、市场适应性与战略灵活性 七、技术创新与研发投入 八、企业文化与团队建设 九、应对危机的能力 前言 UT斯达康(UTStarcom&#…...
算法设计5_分支限界法
分支限界法 分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树,裁剪那些不能得到最优解的子树以提高搜索效率。 步骤: ① 定义解空间(对解编码); ② 确定解空间的树结构; ③ 按BFS等方式搜索: a.每个活…...
【设计模式系列】状态模式(二十三)
一、什么是状态模式 状态模式(State Pattern)是一种行为设计模式,其核心目的是管理一个对象在其内部状态改变时的行为变化,其核心理念是将对象的行为和状态分离。这种模式通过将每个状态相关的行为封装在独立的类中,使…...
github创建发布分支
创建一个名为 latest 的分支,并将其作为稳定版本分支。以下是操作步骤: 1. 创建 latest 分支 首先,确保你在 master 分支(或当前的稳定版本分支)上,并且已经提交了所有更改。然后,你可以创建一…...
【Linux】网络服务
声明,以下内容均学习自《Linux就该这么学》一书 1、创建网络会话 Linux系统使用NetworkManager提供网络服务,它是一种动态管理网络配置的守护进程,能够让网络设备保持连接状态。 nmcli nmcli是一款基于命令行的网络配置工具,它…...
错题:Linux C语言
题目:手写代码:判断一个数(int类型的整数)中有有多少1 题目:手写代码:判断一个数(转换成二进制表示时)有几个1 #include <stdio.h> int main(int argc, const char *argv[]) { //判断一个数…...
机器学习期末速成
文章参考自B站机器学习期末速成课 本文仅作者个人复习使用 一、机器学习分类 聚类和分类的区别: 分类:一开始就知道有哪些类别 聚类:一开始不知道有哪些类别 损失函数:简单来说就是你预测出来的结果和真实值的差距。 0-1损失函数…...
【学习总结|DAY015】Java面向对象高级-抽象类、接口
引言 在今天的课程中,我们详细探讨了 Java 编程语言的几个核心特性:多态、final 关键字、抽象类和接口。这些概念是面向对象编程的基础,对于构建健壮、可维护的应用至关重要。本文将通过具体的例子和解释帮助大家更好地掌握这些知识点。 一…...
单词拼写纠正-04-161.力扣 相隔为 1 的编辑距离
拼写纠正系列 NLP 中文拼写检测实现思路 NLP 中文拼写检测纠正算法整理 NLP 英文拼写算法,如果提升 100W 倍的性能? NLP 中文拼写检测纠正 Paper java 实现中英文拼写检查和错误纠正?可我只会写 CRUD 啊! 一个提升英文单词拼…...
深入理解 NumPy 广播机制:从基础到应用
目录 什么是广播机制?广播机制的规则广播机制示例1. 一维数组与标量运算2. 二维数组与一维数组运算3. 维度不同的数组运算4. 广播失败的情况 广播机制的实际应用场景1. 数据归一化2. 批量计算欧氏距离 总结广播机制的核心要点: 在使用 NumPy 进行数组操作…...
Springboot(五十三)SpringBoot3整合redisson
前边我们有记录Springboot2/3整合redis的方式。是基于Springboot默认集成的Lettuce客户端实现的。 今天我们在项目中集成的redission是在Lettuce之上构建的redis客户端。 Redisson:一个在Jedis和Lettuce之上构建的Redis客户端。提供了一系列分布式Java对象和服务,比如:分布式…...
UAC2.0 speaker——带反馈端点的 USB speaker(16bit 单声道)
UAC2.0 speaker 系列文章 UAC2.0 speaker——单声道 USB speaker(16bit) UAC2.0 speaker——类特殊请求 UAC2.0 speaker——音量控制 UAC2.0 speaker——多采样率支持 UAC2.0 speaker——24/32bit 支持 UAC2.0 speaker——speaker 数据传输 UAC2.0 speaker——同时支持 16bi…...
P2562 [AHOI2002] Kitty猫基因编码
P1498P2562 [AHOI2002] Kitty猫基因编码 #include <iostream> using namespace std; #include <cmath> #include <vector> #include <string> string encode(string str){if(str.find("0") string::npos) return "B";if(str.fin…...
HarmonyOS(65) ArkUI FrameNode详解
Node 1、Node简介2、FrameNode2.1、创建和删除节点2.2、对FrameNode的增删改2.3 FramNode的查询功能3、demo源码4、总结5、参考资料1、Node简介 在HarmonyOS(63) ArkUI 自定义占位组件NodeContainer介绍了自定义节点复用的原理(阅读本本篇博文之前,建议先读读这个),在Node…...
40分钟学 Go 语言高并发:负载均衡与服务治理
负载均衡与服务治理 一、知识要点总览 模块核心内容技术实现难度负载策略轮询、权重、最小连接数自定义负载均衡器中服务降级服务降级、熔断降级、限流降级Hystrix模式高熔断机制熔断器状态机、失败计数、自动恢复Circuit Breaker高限流设计令牌桶、滑动窗口、计数器Rate Lim…...
Python 从入门到实战45(Pandas数据操作)
我们的目标是:通过这一套资料学习下来,可以熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。 上篇文章我们学习了pandas数据读写的相关基础知识。今天学习一下…...
node js 历史版本下载
此为node历史版本下载地址 https://nodejs.org/dist/https://nodejs.org/dist/...
无代码探索AI大模型:腾讯云函数计算的卓越实践
在数字化转型的浪潮中,人工智能(AI)技术已经成为企业提升竞争力的关键。然而,对于许多业务人员来说,技术门槛高、开发周期长等问题限制了他们快速探索和应用AI大模型的能力。同时,对于缺乏GPU资源的开发者来…...
网页数据抓取:融合BeautifulSoup和Scrapy的高级爬虫技术
网页数据抓取:融合BeautifulSoup和Scrapy的高级爬虫技术 在当今的大数据时代,网络爬虫技术已经成为获取信息的重要手段之一。Python凭借其强大的库支持,成为了进行网页数据抓取的首选语言。在众多的爬虫库中,BeautifulSoup和Scra…...
vivado中,generate output product 和Create HDL wrapper的作用
generate output product 以zynq的ip核举例,没有generate output product之前,在ip source 什么也看不到。 但是同样的一个ip核,generate output product之后,会生成综合,布线和仿真文件,约束文件等等。 …...
欧盟R156法规注意事项及实例展示
欧盟 R156 法规即《关于批准车辆的软件升级和软件升级管理体系统一规定的法规》,其注意事项及实例如下: 注意事项: 软件升级管理体系方面: 体系建立与维持:汽车制造商和供应商必须建立完善的软件升级管理体系ÿ…...
HTML语义化的案例分析
HTML语义化的案例分析:对比实际网站中语义化与非语义化标签的差异 在现代Web开发中,HTML语义化被广泛认为是提升网页结构和可访问性的重要做法。HTML语义化不仅仅是为了让代码更清晰,更是为了增强搜索引擎优化(SEO)&a…...
使用 pyperclip 进行跨平台剪贴板操作
简介:pyperclip 是一个轻量级的 Python 库,支持在不同操作系统(Windows、macOS、Linux)中进行剪贴板的复制和粘贴。这个库的设计简单易用,非常适合需要频繁进行文本复制粘贴操作的场景。 历史攻略: 使用f…...
微信小程序报错:http://159.75.169.224:7300不在以下 request 合法域名列表中,请参考文档
要解决此问题,需打开微信小程序开发者工具进行设置,打开详情-本地设置重新运行,该报错就没有啦...
Java:181 基于springboot的考编论坛管理系统
作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本系统一共管理员,用户角色。 主要功能:收货地址管理、经验交流平台管理、公告信息管理、跳蚤市场管理、商品留言管理、商品订…...
通义千问sft-甄嬛对话
流程步骤 https://www.datawhale.cn/activity/110/21/76?rankingPage1 按照上面的流程,准备好数据之后就可以直接对7b的模型进行指令微调了,整个流程不是很复杂,操作起来比较方便。但是发布服务等了较长时间,以为出了bug 结果展…...
如何配置Jackson以忽略Java类中为null或空(empty)的字段
Jackson库提供了JsonInclude注解和ObjectMapper配置选项,可以用来控制是否在JSON输出中包含null或空值的字段。 默认情况下,Jackson会包含所有字段,不论其值为何。 本教程将展示如何使用Include.NON_NULL来忽略null值字段,以及使…...
设置笔记本同时连接内外网
原理:通过笔记本和手机相连,实现双网卡功能能。笔记本连接内网wifi、同时手机端开启usb网络共享,笔记本就有了两个网,然配置那个访问外网,那个访问内网。 1.笔记本wifi连接内网wifi 2.手机端共享网络。 手机打开 -【…...
让文章更具说服力:如何巧妙运用逻辑
在写作的过程中,不论是创作小说、撰写学术论文,还是撰写营销文案,逻辑的运用都至关重要。一个没有逻辑支撑的文章,很容易让读者产生困惑、迷失方向,甚至失去阅读兴趣。因此,如何巧妙地运用逻辑,…...
阿里云云服务器Docker-Execrise
申请云服务器 阿里云每个人可以免费申请三个月的使用的服务器可以用作学习使用建议申请规格2核4g的,2g的有点捉襟见肘了选择服务器建议alibaba-linux服务器,就是linux;选择windows可能由于2核4g的限制,docker不匹配系统起码我就是…...
解决 MySQL 启动失败与大小写问题,重置数据库
技术文档:解决 MySQL 启动失败与大小写问题,重置数据库 1. 问题背景 在使用 MySQL 时,可能遇到以下问题: MySQL 启动失败,日志显示 “permission denied” 或 “Can’t create directory” 错误。MySQL 在修改配置文…...
启智畅想集装箱箱号识别算法,2台相机即可实现较高识别率
启智畅想集装箱箱号识别算法,在货车通道中使用时,一般配备2台相机即可。启智畅想集装箱箱号识别算法,在货车通道中使用时,一般配备2台相机即可实现对集装箱箱号的精准捕捉与识别。这两台相机分别安装在货车通道的后侧和随意侧面&a…...
【C++】指针与智慧的邂逅:C++内存管理的诗意
文章目录 RAII 智能指针auto_ptrunique_ptr shared_ptr模拟实现定制删除器循环引用 和 weak_ptr RAII RAII(Resource Acquisition Is Initialization)是一种广泛应用于 C 等编程语言中的编程范式,它的核心思想是:资源的获取和释放…...
python中的高阶函数
1、什么是高阶函数? 高阶函数是指将函数作为参数传入。就是高阶函数 2、高阶函数有哪些? map 映射函数 >>> print(list(map(lambda x:x*x,range(1,11)))) [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] >>> print(list(map(lambda x:st…...
spark关联hive 报 Filesystem Close 错误
请看如下问题: 假如我想将一个sql语句插入hive表中时,比如 insert into table tmp.app_user_active_range partition (dt2022-11-04) 报如下错误: 我的环境是pyspark,pyspark中操作hive,使用datagrip关联spark,在da…...
MySQL主从同步详解
文章目录 MySQL主从同步概述MySQL主从同步原理MySQL主从同步结构模式MySQL主从同步搭建搭建步骤一主一从实验环境master主机slave1主机验证主从同步 一主多从master主机slave2主机验证主从同步 MySQL主从同步复制模式 读写分离技术MaxScale简介部署MaxScale服务器授权用户maste…...
Python 单元测试基础脚本
单元测试的概念: 单元测试是针对程序中最小可测试单元进行检查和验证的过程。在Python中,通常一个函数或方法就是一个测试单元。 unittest框架: Python自带了一个名为unittest的单元测试框架,它受JUnit启发,为开发者提…...
鸿蒙开发-在ArkTS中实现socket功能
基本概念 在 ArkTS 中实现 Socket 功能主要涉及到网络通信中的套接字(Socket)编程。Socket 是一种用于在不同设备(如客户端和服务器)之间进行双向通信的接口,它允许应用程序发送和接收数据。在网络编程中,有两种主要的 Socket 类型:基于 TCP…...
【设计模式系列】策略模式(二十四)
一、什么是策略模式 策略模式(Strategy Pattern)是软件设计模式中的一种行为型模式。它定义了一系列算法,并将每一个算法封装起来,使它们可以互换使用,算法的变化不会影响使用算法的用户。策略模式让算法的变化独立于…...
D92【python 接口自动化学习】- pytest基础用法
day92 pytest的skip和skipif用法 学习日期:20241208 学习目标:pytest基础用法 -- pytest的skip和skipif用法 学习笔记: 测试用例跳过 skip和skipif用法,测试用例跳过 pytest.mark.skip 跳过标记的用例 pytest.mark.skipif(1 …...
spring中的@Bean和@Component有什么区别?
定义和作用范围 Bean: 是一个方法级别的注解。它主要用于在Java配置类(使用Configuration注解的类)中定义一个Bean。这个方法返回的对象会被Spring容器管理。例如,假设我们有一个配置类AppConfig: import org.sprin…...
docker入门
安装 官方下载 系统:CentOS 7.9 配置docker yum源。 sudo yum install -y yum-utils sudo yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo启动docker 关机后下次开机又得执行 sudo systemctl start dock…...
HDR视频技术之六:色调映射
图像显示技术的最终目的就是使得显示的图像效果尽量接近人们在自然界中观察到的对应的场景。 HDR 图像与视频有着更高的亮度、更深的位深、更广的色域,因此它无法在常见的普通显示器上显示。 入门级的显示器与播放设备(例如普通人家使用的电视࿰…...
MySQL高可用之MHA
华子目录 MHA概述为什么要用MHA什么是MHAMHA的组成MHA的特点故障切换备选主库的算法 MHA工作原理MHA环境搭建环境准备开始部署MHAMHA软件使用介绍配置MHA的管理环境创建MHA管理的模板文件 测试 模拟故障MySQL-master切换手动切换(在master存活状态下切换)…...