当前位置: 首页 > news >正文

MyBatis框架-关联映射

MyBatis关联映射-一对一

1.1 实体关系

实体–数据实体,实体关系指的就是数据与数据之间的关系

例如:订单和商品,用户和角色

实体关系分为以下四种:

  1. **一对一关联:**用户表和用户详情表
  • 数据表关系:

    • 主键关联:用户表主键和用户详情表的主键相同时,表示是匹配的数据

    • 唯一外键关联:用户表和详情表使用外键关联,但需要将外键设置为唯一键

  1. 一对多关联or多对一关联:

    • 一对多:班级对学生

    • 多对一:学生对班级

数据表关系:

  • 在多的一段,添加外键和一的一段进行关联
  1. 多对多关联:
    • 用户和角色、订单和商品

数据表关系:建立第三张关系表,添加两个外键分别和两张表主键进行关联

用户表用户角色表角色表
user_id外键FK: uid=user_id ;rid=role_idrole_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 实体关系 实体–数据实体&#xff0c;实体关系指的就是数据与数据之间的关系 例如&#xff1a;订单和商品&#xff0c;用户和角色 实体关系分为以下四种&#xff1a; **一对一关联&#xff1a;**用户表和用户详情表 数据表关系&#xff1a; 主键关…...

Web开发技术栈选择指南

互联网时代的蓬勃发展&#xff0c;让越来越多人投身软件开发领域。面对前端和后端的选择&#xff0c;很多初学者往往陷入迷茫。让我们一起深入了解这两个领域的特点&#xff0c;帮助你做出最适合自己的选择。 在互联网发展的早期&#xff0c;前端开发主要负责页面布局和简单的…...

工具类的魔力:深入理解 Java 的 String、Math 和 Arrays

Java 提供了许多实用的工具类&#xff0c;帮助开发者简化代码&#xff0c;提升效率。这些工具类包含了各种常见的操作&#xff0c;比如字符串处理、数学计算、数组操作等。掌握这些工具类的高效使用方法&#xff0c;不仅能让你写出更简洁、优雅的代码&#xff0c;还能在性能上有…...

Linux下一次性关闭多个同名进程

要一次性关闭多个同名的 Python 进程&#xff0c;例如&#xff1a; 你可以使用以下几种方法。在执行这些操作之前&#xff0c;请务必确认这些进程确实是你希望终止的&#xff0c;以避免意外关闭其他重要的进程。 方法一&#xff1a;使用 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时&#xff0c;可以通过DMA1进行数据搬运&#xff0c;以防止数据的丢失。如…...

【C++】 算术操作符与数据类型溢出详解

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;C 算术操作符详解基本算术操作符整数除法与取模行为类型转换在算术运算中的作用自增与自减操作符 &#x1f4af;数值溢出&#xff1a;当值超出类型范围时数据类型的取值范围…...

柔性芯片:实现万物互联的催化剂

物联网 (IoT) 市场已经非常成熟&#xff0c;麦肯锡预测&#xff0c;物联网将再创高峰&#xff0c;到 2030 年将达到 12.5 万亿美元的估值。然而&#xff0c;万物互联 (IoE) 的愿景尚未实现&#xff0c;即由数十亿台智能互联设备组成&#xff0c;提供大规模洞察和效率。 究竟是…...

FFmpeg 简介与编译

1. ffmpeg 简介&#xff1a; FFmpeg是一套可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec&#xff0c;为了保证高可移…...

低代码与微服务融合在医疗集团中的补充应用探究

摘要 本论文深入探讨了低代码与微服务融合在医疗系统集群中的应用。分析了其优势&#xff0c;包括提高开发效率、降低技术门槛、灵活适应需求变化和易于维护扩展等&#xff1b;阐述了面临的挑战&#xff0c;如数据安全与隐私保护、技术应用复杂性等&#xff1b;并展望了其在医…...

速盾:高防cdn的搜索引擎回源是什么?

高防CDN&#xff08;Content Delivery Network&#xff09;是一种用于加速网站访问速度和增加安全性的服务&#xff0c;它通过将静态和动态内容缓存在全球分布的服务器上&#xff0c;从而将用户请求的响应时间降至最低&#xff0c;并提供有效的防御攻击的能力。在实际使用过程中…...

减少电路和配电系统谐波的五种方法

K 级变压器 ANSI 标准 C57.110-1986 定义了 K 系数来评估电路消耗多少谐波电流并确定该谐波电流的热效应。根据电路 K 系数&#xff0c;变压器按 K 等级制造。值得注意的是&#xff0c;K 级变压器不会减少谐波。K 等级表示变压器承受谐波有害影响的相对能力。K级变压器增加了铁…...

基于Java Springboot Vue3图书管理系统

一、作品包含 源码数据库设计文档万字全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue3、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA 数据库&#x…...

vue-cli项目质量约束配置

同步发布于我的网站 &#x1f680; 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优化&#xff0c;接下来我们继续编辑器创建资源的UGUI优化 UI篇&#xff08;UGUI&#xff09; 优化UGUI应从哪些方面入手&#xff1f; 可以从CPU和GPU两方面考虑&#xff0c;CPU方面&#xff0c;避免触发或减少Canvas的Rebuild和Rebatch&#xff0c…...

【docker】docker build上下文

什么是 Docker Build 上下文&#xff1f; 在 Docker 中&#xff0c;构建上下文&#xff08;Build Context&#xff09; 是指在执行 docker build 命令时&#xff0c;Docker 会发送给 Docker 引擎的所有文件和目录的集合。构建上下文包含了 Dockerfile 和用于构建镜像的所有文件…...

ESLint 配置文件全解析:格式、层叠与扩展(3)

配置文件系统处于一个更新期&#xff0c;存在两套配置文件系统&#xff0c;旧的配置文件系统适用于 v9.0.0 之前的版本&#xff0c;而新的配置文件系统适用于 v9.0.0之后的版本&#xff0c;但是目前还处于 v8.x.x 的大版本。 配置文件格式 在 ESLint 中&#xff0c;支持如下格…...

org.apache.commons.lang3包下的StringUtils工具类的使用

前言 相信平时在写项目的时候&#xff0c;一定使用到StringUtils.isEmpty()&#xff1b;StringUtils.isBlank();但是你真的了解他们吗&#xff1f; 也许你两个都不知道&#xff0c;也许你除了isEmpty/isNotEmpty/isNotBlank/isBlank外&#xff0c;并不知道还有isAnyEmpty/isNon…...

HarmonyOS4+NEXT星河版入门与项目实战(23)------组件转场动画

文章目录 1、控件图解2、案例实现1、代码实现2、代码解释3、实现效果4、总结1、控件图解 这里我们用一张完整的图来汇整 组件转场动画的用法格式、属性和事件,如下所示: 2、案例实现 这里我们对上一节小鱼游戏进行改造,让小鱼在游戏开始的时候增加一个转场动画,让小鱼自…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...