Mybatis框架映射---代码实现(XML配置以及注解形式)

news2024/9/20 16:48:23

目录

一. 映射关系 1 对 1-映射方式

1.通过xml文件实现映射的一对一关系

总结 :

2.通过注解的方式来实现下面的 1 对 1 的映射关系,实现级联查询

总结:

二. 映射关系多对一

1.通过xml文件实现映射的多对一关系

2.通过注解的方式来实现下面的 多对一 的映射关系,实现级联查询


XML与注解的形式本质都是以XML的形式进行的,只不过注解对XML进行可一个封装。 

映射关系就是你在查询一个表的时候,其中的某个属性对应另外一个表的一条记录,或者多条记录。比如你在查询教师表中的某个教师的信息,同时根据这个教师的工号,你可以查到这个教师所教的班级,以及班级的学生等信息。


一. 映射关系 1 1-映射方式

  映射方式
1. 通过配置 XxxMapper.xml 实现 1 1 [ 配置方式 ]
2. 通过注解的方式实现 1 1 [ 注解方式 ]

1.通过xml文件实现映射的一对一关系

通过配置 XxxMapper.xml 的方式来实现下面的 1 1 的映射关系,实现
联查询 , 通过 person 可以获取到对应的 idencard 信息 

1. 创建 person 表和 idencard 表

CREATE TABLE person
(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(32) NOT NULL DEFAULT '',
card_id INT ,
FOREIGN KEY (card_id) REFERENCES idencard(id)
)CHARSET utf8;

2. 创建 mybatis_idencard 表
CREATE TABLE idencard
(
id INT PRIMARY KEY AUTO_INCREMENT,
card_sn VARCHAR(32) NOT NULL DEFAULT ''
)CHARSET utf8 ;
INSERT INTO idencard VALUES(1,'5002262001121212');
INSERT INTO person VALUES(1,'长离',1);
SELECT * FROM person;
SELECT * FROM idencard

 3.创建IdenCard类

package com.sn.entity;

/**
 * @author sn
 */
public class IdenCard {
    private Integer id;
    private String card_sn;
    public IdenCard() {
    }
    public IdenCard(Integer id, String card_sn) {
        this.id = id;
        this.card_sn = card_sn;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getCard_sn() {
        return card_sn;
    }

    public void setCard_sn(String card_sn) {
        this.card_sn = card_sn;
    }

    @Override
    public String toString() {
        return "IdenCard{" +
                "id=" + id +
                ", card_sn='" + card_sn + '\'' +
                '}';
    }
}

4.创建Person类

package com.sn.entity;

/**
 * @author sn
 */
public class Person {
    private Integer id;
    private String name;
    private IdenCard card;
    public Person() {
    }
    public Person(Integer id, String name, IdenCard card) {
        this.id = id;
        this.name = name;
        this.card = card;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public IdenCard getCard() {
        return card;
    }

    public void setCard(IdenCard card) {
        this.card = card;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", card=" + card +
                '}';
    }
}

5.创建IdenCardMapper接口

package com.sn.mapper;

import com.sn.entity.IdenCard;

/**
 * @author sn
 */
public interface IdenCardMapper {
    //根据 id 获取到身份证
    public IdenCard getIdenCardById(Integer id);
}

6.创建IdenCardMapper.xml映射文件

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sn.mapper.IdenCardMapper">
    <!-- 实现 getIdenCardById -->
    <select id="getIdenCardById" resultType="IdenCard" parameterType="Integer">
        SELECT * FROM idencard
        WHERE id=#{id}
    </select>
</mapper>

7.创建PersonMapper接口

package com.sn.mapper;

import com.sn.entity.Person;

/**
 * @author sn
 */
public interface PersonMapper {
    //通过 Person 的 id 获取到 Person,包括这个 Person 关联的 IdenCard 对象
    public Person getPersonById(Integer id);
}

8.创建PersonMapper.xml文件

1.写xml用association的第一种方式

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sn.mapper.PersonMapper">
    <!-- 实现 getPersonById [方式 1] -->
    <!-- 定义一个 resultMap 来映射返回的结果 -->
    <resultMap type="Person" id="personResultMap">
        <!-- id: 一个 ID 结果;标记出作为 ID 的结果可以帮助提高整体性能, 通常指定主
        键
        property="id" 表示 person 对象的哪个属性代表主键
        column="id" 表示对应的表的字段 -->
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <!-- association: 一个复杂类型的关联 -->
<!--     javaType:返回的java的类型
-->
        <association property="card" javaType="com.sn.entity.IdenCard">
            <!-- 将关联的 card 对象哪些属性放入到这个 resultMap -->
            <result property="id" column="id"/>
            <result property="card_sn" column="card_sn"/>
        </association>
    </resultMap>
    <select id="getPersonById" parameterType="Integer" resultMap="personResultMap">
        select * from person , idencard WHERE person.id=#{id}
                                          AND person.card_id = idencard.id;
    </select>
</mapper>

2.用xml中association的第二种方式 

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sn.mapper.PersonMapper">
    <!-- 实现 getPersonById [方式 2] -->
    <!-- 定义一个 resultMap 来映射返回的结果 -->

    <resultMap type="Person" id="personResultMap2">
        <!-- id: 一个 ID 结果;标记出作为 ID 的结果可以帮助提高整体性能, 通常指定主
        键
        property="id" 表示 person 对象的哪个属性代表主键
        column="id" 表示对应的表的字段 -->
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <!-- association: 一个复杂类型的关联 -->
        <association property="card" column="card_id"
                     select="com.sn.mapper.IdenCardMapper.getIdenCardById"/>

    </resultMap>
    <select id="getPersonById2" parameterType="Integer" resultMap="personResultMap2">
select * from person where id = #{id}
    </select>
</mapper>

测试结果:

查询的结果:: 

总结 :

上面上述案例就是:多表查询,就是当我们查询一个表的一条记录的时候,其中的某个属性是另外一个表的主键(也就是可以标识一条记录的属性)。也就是外键约束!

当我们实现一对一的映射的时候,想要使返回的结果如上图所示,就必须用resultMap进行结果的映射。

 当我们在XML文件进行方法的实现的时候,mybatis框架会根据方法中的结果映射,返回出你所想要的结果。这里的一对一的映射,就是平常大学老师教的方法,同时这里涉及到了级联查询(也就是所说的多表查询)


2.通过注解的方式来实现下面的 1 1 的映射关系,实现级联查询

 1.创建IdenCardMapperAnnotaion

package com.sn.mapper;

import com.sn.entity.IdenCard;
import org.apache.ibatis.annotations.Select;

/**
 * @author sn
 */
public interface IdenCardMapperAnnotaion {
    //根据 id 获取到身份证
//这个方法不需要返回任何级联对象
    @Select("SELECT * FROM idencard WHERE id=#{id}")
    public IdenCard getIdenCardById(Integer id);
}

2.创建 PersonMapperAnnotatio

package com.sn.mapper;

import com.sn.entity.Person;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;

/**
 * @author sn
 */
public interface PersonMapperAnnotation {
    //通过 Person 的 id 获取到 Person,包括这个 Person 关联的 IdenCard 对象
//想:你到底返回什么结果,然后你想办法给他
/*
* private Integer id;
private String name;
private IdenCard card;
*/
    @Select("select * from person WHERE id=#{id}")
    @Results({
            @Result(id = true, property = "id", column = "id"), 
            @Result(property = "name", column = "name"), 
            @Result(property = "card", column = "card_id", 
            one = @One(select =
            "com.sn.mapper.IdenCardMapperAnnotaion.getIdenCardById"))
    })
    public Person getPersonById(Integer id);
}

查询的结果:: 

 

运行的结果也和之前是一样的,用动态代理的方式 

总结:

1. 表是否设置外键 , MyBatis 进行对象 / 级联映射没有影响
也就是无论是否有外键约束,在mybatis中依然可以查到相关联的身份证号所带来的消息。

 

2.  去掉 person 表的外键 , 进行测试 , 依然可以获取相应的级联对象
通过注解的方法和XML的方法其实本质是一致的,更推荐使用XML的形式来进行解耦!
另外还有一点column中的属性值是你查询过后的表的字段名,如果你的SQL语句给表的字段取别名了那么这个column是别名的名字

二. 映射关系多对一

1. 项目中多对 1 的关系是一个基本的映射关系 , 多对 1, 也可以理解成是 1 对多 .
User --- Pet : 一个用户可以养多只宠物
Dep ---Emp : 一个部门可以有多个员工
目的就是:
通过 User 可以查询到对应的 Pet, 反过
来,通过 Pet 也可以级联查询到对应的 User 信息 .实现双向的多对一的映射。

1.通过xml文件实现映射的多对一关系

1. 创建 mybatis_user 和 mybatis_pet 表

CREATE TABLE mybatis_user
(id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(32) NOT NULL DEFAULT '' )CHARSET=utf8 ;

CREATE TABLE mybatis_pet
(id INT PRIMARY KEY AUTO_INCREMENT,
nickname VARCHAR(32) NOT NULL DEFAULT '',
user_id INT ,
FOREIGN KEY (user_id) REFERENCES mybatis_user(id)
)CHARSET=utf8 ;

INSERT INTO mybatis_user
VALUES(NULL,'宋江'),(NULL,'张飞');


INSERT INTO mybatis_pet
VALUES(1,'黑背',1),(2,'小哈',1);


INSERT INTO mybatis_pet
VALUES(3,'波斯猫',2),(4,'贵妃猫',2);

SELECT * FROM mybatis_user;
SELECT * FROM mybatis_pet;

 2.创建User类

package com.sn.entity;

import java.util.List;

/**
 * @author sn
 */
public class User {
    private Integer id;
    private String name;
    //一个用户可以对应多个宠物
    private List<Pet> pets;
    public User() {
    }
    public User(Integer id, String name, List<Pet> pets) {
        this.id = id;
        this.name = name;
        this.pets = pets;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public List<Pet> getPets() {
        return pets;
    }
    public void setPets(List<Pet> pets) {
        this.pets = pets;
    }
}

3创建Pet类

package com.sn.entity;

/**
 * @author sn
 */
public class Pet {
    private Integer id;
    private String nickname;
    //一个宠物只能对应一个主人 User
    private User user;
    public Pet() {
    }
    public Pet(Integer id, String nickname, User user) {
        this.id = id;
        this.nickname = nickname;
        this.user = user;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getNickname() {
        return nickname;
    }
    public void setNickname(String nickname) {
        this.nickname = nickname;
    }
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
    @Override
    public String toString() {
        return "Pet{" +
                "id=" + id +
                ", nickname='" + nickname + '\'' +
                '}';
    }
}

 

3. 创建 PetMapper.java 和 UserMapper.java
public interface PetMapper {
// 通过 User id 来获取 pet 对象,可能有多个,因此使用 List 接收
public List < Pet > getPetByUserId ( Integer userId);
// 通过 pet id 获取 Pet 对象
public Pet getPetById ( Integer id);
}
public interface UserMapper {
// 通过 id 获取 User 对象
public User getUserById ( Integer id);
}

 

4. 创建 UserMapper.xml 

 <!DOCTYPE mapper
                PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sn.mapper.UserMapper">
<resultMap type="com.sn.entity.Pet" id="PetResultMap">
    <id property="id" column="id"/>
    <result property="nickname" column="nickname"/>
    <association property="user" column="user_id" select="com.sn.mapper.PetMapper.getUserById"></association>
</resultMap>
<!-- :
1. user_id=#{userId} userId 就是调用 getPetByUserId 传入的用户 id
2. userId 名称,由程序员来确定,比如你写成 id,uId 等都可以-->
<select id="getPetByUserId" parameterType="Integer" resultMap="PetResultMap">
    select * from mybatis_pet where user_id=#{userId}
</select>
<select id="getPetById" parameterType="Integer" resultMap="PetResultMap">
    select * from mybatis_pet where id=#{id}
</select>
</mapper>

 

5. 创建 PetMapper.xm
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sn.mapper.PetMapper">
    <!-- collection : 一对多关联查询, 表示一个用户可能对应多个 pet 对象
    ofType: 集合中元素对象的类型 -->
    <resultMap type="com.sn.entity.User" id="UserResultMap">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <!-- column="id" 就是当前 User 表的主键字段名,通过这个 user 的 id,
        去查询对应的 pet 有哪些 -->
        <collection property="pets" ofType="com.sn.entity.Pet" column="id"
                    select="com.sn.mapper.UserMapper.getPetByUserId"></collection>
    </resultMap>
    <select id="getUserById" parameterType="Integer" resultMap="UserResultMap">
        select * from mybatis_user where id=#{id};
    </select>
</mapper>

  那么问题来了?有人会问那如果这个方法的参数有多个怎么办呢?

: 在数据库库中表和表的联系可以通过外键约束进行,也就是一个表的非主属性,对应的是另外一个表的主键,而表的主键只有一个(主键就是可以唯一标识一条记录的属性字段)。所以为啥只有一个参数了。

2.通过注解的方式来实现下面的 多对一 的映射关系,实现级联查询

1.UserMapperAnnotation 接口

package com.sn.mapper;

import com.sn.entity.User;
import org.apache.ibatis.annotations.Many;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;

/**
 * @author sn
 */
public interface UserMapperAnnotation {
    //通过 user 的 id 号,返回该用户的方法
    @Select("select * from mybatis_user where id=#{id}")
    @Results({
            @Result(id=true,property="id",column="id"),
            @Result(property="name",column="name"),
            @Result(property="pets",column="id",
            many=@Many(select="com.sn.mapper.PetMapperAnnotation.getPetByUserId"))
    })
    public User getUserById(Integer id);
}

 

 2.PetMapperAnnotation接口

package com.sn.mapper;

import com.sn.entity.Pet;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * @author sn
 */
public interface PetMapperAnnotation {
    //通过 User 的 id 来获取 pet 对象,可能有多个,因此使用 List 接收
    @Select("select * from mybatis_pet where user_id=#{userId}")
    @Results({
            @Result(id = true, property = "id", column = "id"),
            @Result(property = "nickname", column = "nickname")
    })
    public List<Pet> getPetByUserId(Integer userId);
//通过 pet 的 id 获取 Pet 对象
    @Select("select id AS tnId,nickname AS tnNickname, user_id AS tnUser_id from mybatis_pet where id=#{id}")
            @Results({
                    @Result(id = true, property = "id", column = "tnId"),
                    @Result(property = "nickname", column = "tnNickname"),
                    @Result(property = "user", column = "tnUser_id",
                            one = @One(select =
                    "com.sn.mapper.UserMapperAnnotation.getUserById"))
            })
            public Pet getPetById(Integer id);
}

XML与注解的形式本质都是以XML的形式进行的,只不过注解对XML进行可一个封装。

映射关系就是你在查询一个表的时候,其中的某个属性对应另外一个表的一条记录,或者多条记录。比如你在查询教师表中的某个教师的信息,同时根据这个教师的工号,你可以查到这个教师所教的班级,以及班级的学生等信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2149442.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PHP发邮件教程:配置SMTP服务器发送邮件?

PHP发邮件的几种方式&#xff1f;如何使用PHP通过SMTP协议发信&#xff1f; PHP作为一种广泛使用的服务器端脚本语言&#xff0c;提供了多种方式来发送邮件。AokSend将详细介绍如何通过配置SMTP服务器来实现PHP发邮件教程的核心内容。 PHP发邮件教程&#xff1a;设置参数 这…

Qt 模型视图(一):概述

文章目录 Qt 模型视图(一):概述1、模型/视图结构基本原理2、模型3、视图4、代理5、简单实例 Qt 模型视图(一):概述 ​ 模型/视图结构是一种将数据存储和界面展示分离的编程方法。模型存储数据&#xff0c;视图组件显示模型中的数据&#xff0c;在视图组件里修改的数据会被自动…

PCIe扫盲(11)

系列文章目录 PCIe扫盲&#xff08;一&#xff09; PCIe扫盲&#xff08;二&#xff09; PCIe扫盲&#xff08;三&#xff09; PCIe扫盲&#xff08;四&#xff09; PCIe扫盲&#xff08;五&#xff09; PCIe扫盲&#xff08;六&#xff09; PCIe扫盲&#xff08;七&#xff09…

剪画:一带一路机遇下,自媒体如何跨越语言障碍!

随着国家 “一带一路” 的持续推进&#xff0c;我国的文化魅力如璀璨星辰&#xff0c;在世界舞台上熠熠生辉。美食的独特风味、华服的精美绝伦&#xff0c;越来越受到外国人的喜爱。这对于做自媒体的小伙伴们而言&#xff0c;无疑是一个巨大的机遇。 然而&#xff0c;机遇往往与…

利用Leaflet.js和turf.js创建交互式地图:航道路线绘制

引言 在现代Web应用中&#xff0c;地图的交互性是提供丰富用户体验的关键。Leaflet.js是一个轻量级的开源JavaScript库&#xff0c;它提供了简单易用的API来构建交云的地图。与此同时&#xff0c;turf.js作为一个强大的地理空间分析库&#xff0c;能够处理复杂的地理数据操作。…

Broadcast:Android中实现组件及进程间通信

目录 一&#xff0c;Broadcast和BroadcastReceiver 1&#xff0c;简介 2&#xff0c;广播使用 二&#xff0c;静态注册和动态注册 三&#xff0c;无序广播和有序广播 1&#xff0c;有序广播的使用 2&#xff0c;有序广播的截断 3&#xff0c;有序广播的信息传递 四&am…

AI产品经理面试100问,三天看完一周拿4个offer

AI产品经理面试100问 Attention(重点掌握) 1.什么是 Attention?为什么要用 Attention?它有什么作用? 2.Attention的流程是什么样的? 3.普通的Attention和Transformer的Self-attention之间有什么关系? 4.什么是Self-attention? Transformer(重点掌握) 1.Transformer是什…

[Linux]:信号(上)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;Linux学习 贝蒂的主页&#xff1a;Betty’s blog 1. 信号的引入 1.1 信号的概念 在Linux系统中&#xff0c;信号&#xff08;…

在泰国旅游不会口语怎么办?求推荐翻译软件!!!

如果在泰国旅游时遇到语言障碍&#xff0c;可以采取以下措施&#xff1a;学习一些基础的泰语短语&#xff0c;使用翻译应用程序&#xff0c;携带翻译卡片&#xff0c;利用身体语言&#xff0c;参加有导游的旅行团&#xff0c;选择提供中文服务的酒店和旅行社&#xff0c;使用地…

【leetcode】字典 哈希表习题

1.两数之和&#xff08;查找表法-哈希表&#xff09; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案&#xff0c;并且你不能使用两次…

【人工智能学习笔记】7_智能语音技术基础

智能语音技术概述 智能语音技术通过对语音进行分析、理解和合成,是计算机设备实现“能听会说”、具备自然语音交流的技术能力。其涉及的范围主要有: 语音合成技术语音识别技术语音测评技术语音降噪与增强技术…智能语音技术的研究内容 智能语音技术的研究难点 智能语音技术…

旅行社区应该如何规划?

近年来&#xff0c;旅游行业逐渐恢复&#xff0c;包括微度假、精致露营、康养旅游、乡村民宿等旅游模式。用户旅游支出、旅游人次逐渐恢复&#xff0c;旅游收入仍待提升。 那么旅游社区应该如何搭建&#xff0c;内容如何规划呢&#xff1f; 我们了解到&#xff0c;很多旅游网…

哪个快?用300万个图斑测试ArcGIS Pro的成对叠加与经典叠加

​​​ 点击下方全系列课程学习 点击学习—>ArcGIS全系列实战视频教程——9个单一课程组合系列直播回放 点击学习——>遥感影像综合处理4大遥感软件ArcGISENVIErdaseCognition 在使用ArcGIS Pro的过程中&#xff0c;很多朋友发现&#xff0c;Pro有个成对叠加工具集。很多…

PSG3D V2024 注册机 蓝天大数据三维测绘系统

PSG3D2024三维测绘系统是基于 AutoCAD 平台开发的&#xff0c;以“智能、 专业、高效、易学”为设计目标开发的全新一代地理数据采集、编辑 和联动的专业软件。 系统集成了三维测图、坐标转换、地形处理、数字地模、无人机 辅助、不动产调查、土地确权、部件普查和数据转换等专…

数字产业中心:技术赋能产业,如何重塑行业格局!

在数字化浪潮的推动下&#xff0c;数字产业中心正逐步成为推动经济转型升级的重要引擎。这里&#xff0c;技术不仅仅是工具&#xff0c;更是重塑行业格局、引领未来发展的核心力量。 一、技术融合创新&#xff0c;打破传统边界 数字产业中心通过云计算、大数据、人工智能等前沿…

【Python】练习:控制语句(二)第1关

第1关&#xff1a;分支结构基础实训 第一题第二题第三题第四题&#xff08;※&#xff09;第五题&#xff08;※&#xff09;第六题第七题 第一题 #第一题 for temp in [-280, -100, 0, 20, 120, 200]:#请在下面编写代码# ********** Begin ********** #if temp>-273.15:F9/…

【Git 操作】Git 的基本操作

文章目录 1. Git 的配置2. 工作区、暂存区、版本库 1. Git 的配置 &#x1f427;①首先要新建一个目录&#xff0c;该目录用于放项目代码&#xff0c;在该目录下执行git init命令&#xff0c;用于创建一个 Git的本地仓库。 .git ⽬录是 Git 来跟踪管理仓库的。&#x1f427;②…

原生+jquery写自动消失的提示框

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>自动消失消息提示</title> <style>/…

linux内核 devtmpfs介绍

文章目录 概要整体架构流程技术细节 概要 提示&#xff1a;这里可以添加技术概要 linux内核中 devtmpfs实现介绍 内核版本&#xff1a;5.10 Devtmpfs在Linux中是一个特殊的设备文件系统&#xff0c;主要用来linux内核中加速启动过程和管理设备节点。高版本的linux基本都是使用…

25届计算机专业毕设选题推荐-基于python的二手电子设备交易平台【源码+文档+讲解】

&#x1f496;&#x1f525;作者主页&#xff1a;毕设木哥 精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; 实战项目 文章目录 实战项目 一、基于python的二手电子设备交…