MyBatis框架-关联映射
MyBatis关联映射-一对一
1.1 实体关系
实体–数据实体,实体关系指的就是数据与数据之间的关系
例如:订单和商品,用户和角色
实体关系分为以下四种:
- **一对一关联:**用户表和用户详情表
数据表关系:
主键关联:用户表主键和用户详情表的主键相同时,表示是匹配的数据
唯一外键关联:用户表和详情表使用外键关联,但需要将外键设置为唯一键
-
一对多关联or多对一关联:
-
一对多:班级对学生
-
多对一:学生对班级
-
数据表关系:
- 在多的一段,添加外键和一的一段进行关联
- 多对多关联:
- 用户和角色、订单和商品
数据表关系:建立第三张关系表,添加两个外键分别和两张表主键进行关联
| 用户表 | 用户角色表 | 角色表 |
|---|---|---|
| user_id | 外键FK: uid=user_id ;rid=role_id | role_id |
1.2 一对一关联
实例:用户表user–用户详情表 userDetail
1.2.1 创建数据表
-- 用户信息表
CREATE TABLE user(user_id int PRIMARY KEY auto_increment,user_name VARCHAR(20) NOT NULL UNIQUE,user_pwd VARCHAR(20) NOT NULL,user_realname VARCHAR(20) NOT NULL,user_img VARCHAR(100) NOT NULL
);-- 用户详情表
CREATE TABLE userDetail(detail_id INT PRIMARY KEY auto_increment,user_addr VARCHAR(50) NOT NULL,user_tel CHAR(11) NOT NULL,user_desc VARCHAR(200),uid INT NOT null UNIQUE
);
1.2.2 创建工具类
MyBatisUtils
package com.feng.utils;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 java.io.IOException;
import java.io.InputStream;/*** @program: mybatis_project2* @description: MyBatis工具类* @author: FF* @create: 2024-11-28 18:52**/
public class MyBatisUtils {private static SqlSessionFactory sqlSessionFactory;//为SqlSession加锁private static final ThreadLocal<SqlSession> sqlSessionlock = new ThreadLocal<>();static {InputStream inputStream = null;try {//构建sqlSession工厂inputStream = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();sqlSessionFactory = builder.build(inputStream);inputStream.close();} catch (IOException e) {throw new RuntimeException(e);}}/*** @Description: 通过sqlSessionFactory,获取sqlSession对象(private不对外)* @Param: [isAutoCommit]* @return: org.apache.ibatis.session.SqlSession* @Author: FF* @Date: 2024/11/27*/private static SqlSession getSqlSession(boolean isAutoCommit) {SqlSession sqlSession = sqlSessionlock.get();if (sqlSession == null) {sqlSession = sqlSessionFactory.openSession(isAutoCommit);sqlSessionlock.set(sqlSession);}return sqlSession;}/*** @Description: 获取sqlSession对象,默认手动提交事务(public对外)* @Param: []* @return: org.apache.ibatis.session.SqlSession* @Author: FF* @Date: 2024/11/27*/public static SqlSession getSqlSession() {return getSqlSession(false);}/*** @Description: 提供getMapper方法,获取mapper代理对象,默认自动提交事务* @Param: [c]* @return: T* @Author: FF* @Date: 2024/11/27*/public static <T extends Object> T getMapper(Class<T> c) {return getSqlSession(true).getMapper(c);}
}
1.2.3 创建实体类
package com.feng.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;/*** @program: mybatis_project2* @description: 用户实体类* @author: FF* @create: 2024-11-28 18:56**/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class User {private int userID;private String userName;private String password;private String realName;private String img;private UserDetail userDetail;
}
package com.feng.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;/*** @program: mybatis_project2* @description: 用户详情实体类* @author: FF* @create: 2024-11-28 18:57**/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class UserDetail {public int detailId;public String userAddr;public String userTel;public String userDesc;public int uid;
}
1.2.4 创建Dao接口
package com.feng.dao;import com.feng.pojo.User;import java.util.List;public interface UserDao {public int addUser(User user);public List<User> selectAllUser();public User selectUserByUserName(String userName);public User selectUserByRealName(String realName);
}
package com.feng.dao;import com.feng.pojo.UserDetail;public interface UserDetailDao {public int insertUserDetail(UserDetail userDetail);public UserDetail selectUserDetailByUid(int Uid);}
1.2.5 创建MyBatis主配置文件
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><properties resource="jdbc.properties"/><typeAliases><typeAlias type="com.feng.pojo.User" alias="User"/><typeAlias type="com.feng.pojo.UserDetail" alias="UserDetail"/></typeAliases><environments default="mysql"><environment id="mysql"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${mysql_driver}"/><property name="url" value="${mysql_url}"/><property name="username" value="${mysql_username}"/><property name="password" value="${mysql_password}"/></dataSource></environment></environments><mappers><mapper resource="mappers/userMapper.xml"/><mapper resource="mappers/userDetailMapper.xml"/></mappers>
</configuration>
1.2.6 创建jdbc.properties
mysql_driver=com.mysql.jdbc.Driver
mysql_url=jdbc:mysql://localhost:3306/db_test?characterEncoding=utf-8
mysql_username=root
mysql_password=root
1.2.7 创建Dao映射文件
useMapper.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.feng.dao.UserDao"><resultMap id="User" type="User"><id column="user_id" property="userID"/><result column="user_name" property="userName"/><result column="user_pwd" property="password"/><result column="user_realname" property="realName"/><result column="user_img" property="img"/><!--子查询,通过主表userID关联到子表uid,查询出子表信息,赋值给User.userDetail--><association property="userDetail" select="com.feng.dao.UserDetailDao.selectUserDetailByUid" column="user_id"/><!--<result column="detail_id" property="userDetail.detailId"/><result column="user_addr" property="userDetail.userAddr"/><result column="user_tel" property="userDetail.userTel"/><result column="user_desc" property="userDetail.userDesc"/><result column="uid" property="userDetail.uid"/>--></resultMap><insert id="addUser" useGeneratedKeys="true" keyProperty="userID">insert into user(user_name,user_pwd,user_realname,user_img)values (#{userName},#{password},#{realName},#{img})</insert><select id="selectAllUser" parameterType="int" resultMap="User">SELECT *FROM user</select><select id="selectUserByUserName" resultMap="User">select * from user u inner join userDetail d on u.user_id = d.detail_id where user_name = #{userName}</select><select id="selectUserByRealName" resultMap="User" >select * from user where user_realname = #{realName}</select>
</mapper>
userDetailMapper.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.feng.dao.UserDetailDao"><resultMap id="UserDetail" type="UserDetail"><id column="detail_id" property="detailId"/><result column="user_addr" property="userAddr"/><result column="user_tel" property="userTel"/><result column="user_desc" property="userDesc"/><result column="uid" property="uid"/></resultMap><insert id="insertUserDetail">insert into userDetail(user_addr,user_tel,user_desc,uid)values (#{userAddr},#{userTel},#{userDesc},#{uid})</insert><select id="getById" >SELECT *FROM userDetailWHERE id = #{id}</select><select id="selectUserDetailByUid" resultMap="UserDetail">select * from userDetail where uid = #{Uid}</select>
</mapper>
1.2.8 创建测试类
package com.feng.dao;import com.feng.pojo.User;
import com.feng.pojo.UserDetail;
import com.feng.utils.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;import java.util.List;public class UserDaoTest {@Testpublic void selectAllUser() {UserDao mapper = MyBatisUtils.getMapper(UserDao.class);List<User> list = mapper.selectAllUser();for (User user : list) {System.out.println(user);}}@Testpublic void addUser() {SqlSession sqlSession = MyBatisUtils.getSqlSession();try {UserDao mapper = sqlSession.getMapper(UserDao.class);User user = new User();user.setUserName("admin2");user.setPassword("123456");user.setRealName("关羽");user.setImg("123");int i = mapper.addUser(user);System.out.println(i);System.out.println("userID" + user.getUserID());int uid = user.getUserID();UserDetail userDetail = new UserDetail(0, "北京市延庆区", "134113311", "test", uid);UserDetailDao userDetailDao = sqlSession.getMapper(UserDetailDao.class);userDetailDao.insertUserDetail(userDetail);sqlSession.commit();}catch (Exception e){e.printStackTrace();sqlSession.rollback();}}@Testpublic void selectUserByUserName() {UserDao mapper = MyBatisUtils.getMapper(UserDao.class);User user = mapper.selectUserByUserName("admin");System.out.println(user);}@Testpublic void selectUserByRealName() {User user = MyBatisUtils.getMapper(UserDao.class).selectUserByRealName("夏侯惇");System.out.println(user);}
}
package com.feng.dao;import com.feng.pojo.UserDetail;
import com.feng.utils.MyBatisUtils;
import org.junit.Test;import static org.junit.Assert.*;public class UserDetailDaoTest {@Testpublic void insertUserDetail() {UserDetailDao userDetailDao = MyBatisUtils.getMapper(UserDetailDao.class);int i = userDetailDao.insertUserDetail(new UserDetail(0,"北京市昌平区","13566666","test",2));System.out.println(i);}@Testpublic void selectUserDetailByUid() {UserDetailDao userDetailDao = MyBatisUtils.getMapper(UserDetailDao.class);UserDetail userDetail = userDetailDao.selectUserDetailByUid(2);System.out.println(userDetail);}
}
1.3 一对多关联
1.3.1 创建数据表
班级对学生,一个多级对多个学生关联
-- 创建班级表
CREATE TABLE classes(cid int PRIMARY KEY auto_increment,cname VARCHAR(30) NOT NULL UNIQUE,cdesc VARCHAR(100)
);-- 创建学生表
CREATE TABLE student(sid int PRIMARY KEY auto_increment,sname VARCHAR(20) NOT NULL,sage INT NOT NULL,scid int NOT NULL
);
1.3.2 创建实体类
package com.feng.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;/*** @program: mybatis_project* @description: 班级表实体类* @author: FF* @create: 2024-11-29 15:52**/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Clazz {private int cid;private String cname;private String cdesc;
}
package com.feng.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;/*** @program: mybatis_project* @description: 学生表实体类* @author: FF* @create: 2024-11-29 15:54**/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Student2 {private int sid;private String sname;private int sage;private int scid;
}
1.3.3 关联查询
当查询一个班级时,要关联查询出这个班级下的所有学生
连接查询
classMapper.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.feng.dao.ClassDao"><resultMap id="classMap" type="class"><id column="cid" property="cid"/><result column="cname" property="cname"/><result column="cdesc" property="cdesc"/><!--Clazz对象的student2List是个List集合,需要使用collection--><!--Collection标签的ofType属性声明集合中元素的类型--><collection property="student2List" ofType="Student2"><result column="sid" property="sid"/><result column="sname" property="sname"/><result column="sage" property="sage"/></collection></resultMap><select id="queryClassInfo" resultMap="classMap">select * from classes c INNER JOIN student s on c.cid = s.scid where c.cid = #{cid}</select>
</mapper>
子查询
classMapper.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.feng.dao.ClassDao"><resultMap id="classMap" type="Clazz"><id column="cid" property="cid"/><result column="cname" property="cname"/><result column="cdesc" property="cdesc"/><!--连接查询--><!-- <collection property="studentList" ofType="Student"><result column="sid" property="sid"/><result column="sname" property="sname"/><result column="sage" property="sage"/></collection>--><!--子查询--><collection property="studentList" select="com.feng.dao.StudentDao.getStudentByScid" column="cid"><id column="sid" property="sid"/><result column="sname" property="sid"/><result column="sage" property="sage"/><result column="scid" property="scid"/></collection></resultMap><!--select * from classes c inner join student s on c.cid = s.scid where c.cid = #{cid} --><select id="queryClassInfo" resultMap="classMap">select * from classes c where c.cid = #{cid}</select></mapper>
1.4 多对一
通过学生id查询学生所在班级
连接查询
StudentMapper.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.feng.dao.Student2Dao"><resultMap id="student2Map" type="Student2"><id column="sid" property="sid"/><result column="sname" property="sname"/><result column="sage" property="sage"/><result column="scid" property="scid"/><result column="cid" property="clazz.cid"/><result column="cname" property="clazz.cname"/><result column="cdesc" property="clazz.cdesc"/></resultMap><select id="queryStudent2" resultMap="student2Map">select * from student s INNER JOIN classes c ON s.scid = c.cid where s.sid = #{sid}</select></mapper>
子查询
studentMapper.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.feng.dao.Student2Dao"><resultMap id="student2Map" type="Student2"><id column="sid" property="sid"/><result column="sname" property="sname"/><result column="sage" property="sage"/><result column="scid" property="scid"/>
<!-- <result column="cid" property="clazz.cid"/>-->
<!-- <result column="cname" property="clazz.cname"/>-->
<!-- <result column="cdesc" property="clazz.cdesc"/>--><!--子查询--><association property="clazz" select="com.feng.dao.ClassDao.queryClassInfo" column="scid"/></resultMap><select id="queryStudent2" resultMap="student2Map">select * from student s where s.sid = #{sid}</select></mapper>
1.4 多对多关联
1.4.1 数据准备
-- 课程表
CREATE TABLE courses(course_id int PRIMARY KEY auto_increment,course_name VARCHAR(50) not null
);-- 选课信息表/成绩表
CREATE TABLE greades(sid char(5) not NULL,course_id INT NOT NULL,score INT NOT NULL
);
1.4.2 关联查询
查询学生时,同时查询出学生选择的课程
- 连接查询
Student实体类
package com.feng.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;import java.util.List;/*** @program: mybatis_project* @description: 学生表实体类* @author: FF* @create: 2024-11-29 15:54**/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Student {private int sid;private String sname;private int sage;private int scid;private List<Courses> coursesList;
}
StudentMapper.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.feng.dao.StudentDao"><resultMap id="StudentMap" type="Student"><id column="sid" property="sid"/><result column="sname" property="sname"/><result column="sage" property="sage"/><result column="scid" property="scid"/><collection property="coursesList" ofType="Courses"><result property="courseId" column="course_id"/><result property="courseName" column="course_name"/></collection></resultMap><select id="getStudentBySid" resultMap="StudentMap">select s.sid,s.sname,c.course_id,c.course_name from student s INNER JOIN greades g INNER JOIN courses cON s.sid = g.sid AND g.course_id = c.course_id where s.sid = #{sid};</select>
</mapper>
-
子查询
StudentMapper.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.feng.dao.StudentDao"><resultMap id="StudentMap" type="Student"><id column="sid" property="sid"/><result column="sname" property="sname"/><result column="sage" property="sage"/><result column="scid" property="scid"/><!--连接查询--><!--<collection property="coursesList" ofType="Courses"><result property="courseId" column="course_id"/><result property="courseName" column="course_name"/></collection>--><!--子查询--><collection property="coursesList" select="com.feng.dao.CoursesDao.getCourses" column="sid"><id property="courseId" column="course_id"/><result property="courseName" column="course_name"/></collection></resultMap><select id="getStudentBySid" resultMap="StudentMap">select s.sid,s.sname,c.course_id,c.course_name from student s INNER JOIN greades g INNER JOIN courses cON s.sid = g.sid AND g.course_id = c.course_id where s.sid = #{sid};</select> </mapper>
相关文章:
MyBatis框架-关联映射
MyBatis关联映射-一对一 1.1 实体关系 实体–数据实体,实体关系指的就是数据与数据之间的关系 例如:订单和商品,用户和角色 实体关系分为以下四种: **一对一关联:**用户表和用户详情表 数据表关系: 主键关…...
Web开发技术栈选择指南
互联网时代的蓬勃发展,让越来越多人投身软件开发领域。面对前端和后端的选择,很多初学者往往陷入迷茫。让我们一起深入了解这两个领域的特点,帮助你做出最适合自己的选择。 在互联网发展的早期,前端开发主要负责页面布局和简单的…...
工具类的魔力:深入理解 Java 的 String、Math 和 Arrays
Java 提供了许多实用的工具类,帮助开发者简化代码,提升效率。这些工具类包含了各种常见的操作,比如字符串处理、数学计算、数组操作等。掌握这些工具类的高效使用方法,不仅能让你写出更简洁、优雅的代码,还能在性能上有…...
Linux下一次性关闭多个同名进程
要一次性关闭多个同名的 Python 进程,例如: 你可以使用以下几种方法。在执行这些操作之前,请务必确认这些进程确实是你希望终止的,以避免意外关闭其他重要的进程。 方法一:使用 pkill 命令 pkill 是一个用于根据名称…...
记录一些虚拟机桥接网络,windows网络遇到的小问题
1 virtual box 桥接的虚拟系统无 ipv4 地址 https://blog.csdn.net/qq_44847649/article/details/122582954 原因是 wlan 无线网卡没开共享给 virtual box host only (之前用过 vmware 也类似) 2 无法两台 windows10 物理机无法相互 ping 通 https://blog.csdn.net/qq_35…...
MATLAB —— 机械臂工作空间,可达性分析
系列文章目录 前言 本示例展示了如何使用可操作性指数对不同类型的机械手进行工作空间分析。工作空间分析是一种有用的工具,可用于确定机器人工作空间中最容易改变末端效应器位置和方向的区域。本示例的重点是利用不同的可操控性指数类型来分析各种机械手的工作空间。了解工作…...
18:(标准库)DMA二:DMA+串口收发数据
DMA串口收发数据 1、DMA串口发送数据2、DMA中断串口接收定长数据包3、串口空闲中断DMA接收不定长数据包4、串口空闲中断DMA接收不定长数据包DMA发送数据包 1、DMA串口发送数据 当串口的波特率大于115200时,可以通过DMA1进行数据搬运,以防止数据的丢失。如…...
【C++】 算术操作符与数据类型溢出详解
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯C 算术操作符详解基本算术操作符整数除法与取模行为类型转换在算术运算中的作用自增与自减操作符 💯数值溢出:当值超出类型范围时数据类型的取值范围…...
柔性芯片:实现万物互联的催化剂
物联网 (IoT) 市场已经非常成熟,麦肯锡预测,物联网将再创高峰,到 2030 年将达到 12.5 万亿美元的估值。然而,万物互联 (IoE) 的愿景尚未实现,即由数十亿台智能互联设备组成,提供大规模洞察和效率。 究竟是…...
FFmpeg 简介与编译
1. ffmpeg 简介: FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移…...
低代码与微服务融合在医疗集团中的补充应用探究
摘要 本论文深入探讨了低代码与微服务融合在医疗系统集群中的应用。分析了其优势,包括提高开发效率、降低技术门槛、灵活适应需求变化和易于维护扩展等;阐述了面临的挑战,如数据安全与隐私保护、技术应用复杂性等;并展望了其在医…...
速盾:高防cdn的搜索引擎回源是什么?
高防CDN(Content Delivery Network)是一种用于加速网站访问速度和增加安全性的服务,它通过将静态和动态内容缓存在全球分布的服务器上,从而将用户请求的响应时间降至最低,并提供有效的防御攻击的能力。在实际使用过程中…...
减少电路和配电系统谐波的五种方法
K 级变压器 ANSI 标准 C57.110-1986 定义了 K 系数来评估电路消耗多少谐波电流并确定该谐波电流的热效应。根据电路 K 系数,变压器按 K 等级制造。值得注意的是,K 级变压器不会减少谐波。K 等级表示变压器承受谐波有害影响的相对能力。K级变压器增加了铁…...
基于Java Springboot Vue3图书管理系统
一、作品包含 源码数据库设计文档万字全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue3、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA 数据库&#x…...
vue-cli项目质量约束配置
同步发布于我的网站 🚀 package.json scriptslint-stageddevDependencies git-hooksno-eslintdevDependencies - scssdevDependencies - lessengines pre-commit.eslintrc.js.stylelintrc scssless vue.config.jsREADME.md package.json scripts "scripts&…...
第七课 Unity编辑器创建的资源优化_UI篇(UGUI)
上期我们学习了简单的Scene优化,接下来我们继续编辑器创建资源的UGUI优化 UI篇(UGUI) 优化UGUI应从哪些方面入手? 可以从CPU和GPU两方面考虑,CPU方面,避免触发或减少Canvas的Rebuild和Rebatch,…...
【docker】docker build上下文
什么是 Docker Build 上下文? 在 Docker 中,构建上下文(Build Context) 是指在执行 docker build 命令时,Docker 会发送给 Docker 引擎的所有文件和目录的集合。构建上下文包含了 Dockerfile 和用于构建镜像的所有文件…...
ESLint 配置文件全解析:格式、层叠与扩展(3)
配置文件系统处于一个更新期,存在两套配置文件系统,旧的配置文件系统适用于 v9.0.0 之前的版本,而新的配置文件系统适用于 v9.0.0之后的版本,但是目前还处于 v8.x.x 的大版本。 配置文件格式 在 ESLint 中,支持如下格…...
org.apache.commons.lang3包下的StringUtils工具类的使用
前言 相信平时在写项目的时候,一定使用到StringUtils.isEmpty();StringUtils.isBlank();但是你真的了解他们吗? 也许你两个都不知道,也许你除了isEmpty/isNotEmpty/isNotBlank/isBlank外,并不知道还有isAnyEmpty/isNon…...
HarmonyOS4+NEXT星河版入门与项目实战(23)------组件转场动画
文章目录 1、控件图解2、案例实现1、代码实现2、代码解释3、实现效果4、总结1、控件图解 这里我们用一张完整的图来汇整 组件转场动画的用法格式、属性和事件,如下所示: 2、案例实现 这里我们对上一节小鱼游戏进行改造,让小鱼在游戏开始的时候增加一个转场动画,让小鱼自…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...
Element-Plus:popconfirm与tooltip一起使用不生效?
你们好,我是金金金。 场景 我正在使用Element-plus组件库当中的el-popconfirm和el-tooltip,产品要求是两个需要结合一起使用,也就是鼠标悬浮上去有提示文字,并且点击之后需要出现气泡确认框 代码 <el-popconfirm title"是…...
Git 命令全流程总结
以下是从初始化到版本控制、查看记录、撤回操作的 Git 命令全流程总结,按操作场景分类整理: 一、初始化与基础操作 操作命令初始化仓库git init添加所有文件到暂存区git add .提交到本地仓库git commit -m "提交描述"首次提交需配置身份git c…...
【多线程初阶】单例模式 指令重排序问题
文章目录 1.单例模式1)饿汉模式2)懒汉模式①.单线程版本②.多线程版本 2.分析单例模式里的线程安全问题1)饿汉模式2)懒汉模式懒汉模式是如何出现线程安全问题的 3.解决问题进一步优化加锁导致的执行效率优化预防内存可见性问题 4.解决指令重排序问题 1.单例模式 单例模式确保某…...
