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、案例实现 这里我们对上一节小鱼游戏进行改造,让小鱼在游戏开始的时候增加一个转场动画,让小鱼自…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...
