mybatis的快速入门以及spring boot整合mybatis(二)

news2024/11/24 9:27:13

需要用到的SQL脚本:

CREATE TABLE dept (
  id int unsigned PRIMARY KEY AUTO_INCREMENT COMMENT 'ID, 主键',
  name varchar(10) NOT NULL UNIQUE COMMENT '部门名称',
  create_time datetime DEFAULT NULL COMMENT '创建时间',
  update_time datetime DEFAULT NULL COMMENT '修改时间'
) COMMENT '部门表';

INSERT INTO dept VALUES (1,'学工部','2023-09-25 09:47:40','2023-09-25 09:47:40'),
						  (2,'教研部','2023-09-25 09:47:40','2023-10-09 15:17:04'),
						  (3,'咨询部2','2023-09-25 09:47:40','2023-11-30 21:26:24'),
						  (4,'就业部','2023-09-25 09:47:40','2023-09-25 09:47:40'),
						  (5,'人事部','2023-09-25 09:47:40','2023-09-25 09:47:40'),
						  (15,'行政部','2023-11-30 20:56:37','2023-11-30 20:56:37');




create table emp(
    id int unsigned primary key auto_increment comment 'ID,主键',
    username varchar(20) not null unique comment '用户名',
    password varchar(50) default '123456' comment '密码',
    name varchar(10) not null comment '姓名',
    gender tinyint unsigned not null comment '性别, 1:男, 2:女',
    phone char(11) not null unique comment '手机号',
    job tinyint unsigned comment '职位, 1 班主任, 2 讲师 , 3 学工主管, 4 教研主管, 5 咨询师',
    salary int unsigned comment '薪资',
    image varchar(300) comment '头像',
    entry_date date comment '入职日期',
    dept_id int unsigned comment '部门ID',
    create_time datetime comment '创建时间',
    update_time datetime comment '修改时间'
) comment '员工表';


INSERT INTO emp VALUES 
(1,'shinaian','123456','施耐庵',1,'13309090001',4,15000,'5.png','2000-01-01',2,'2023-10-20 16:35:33','2023-11-16 16:11:26'),
(2,'songjiang','123456','宋江',1,'13309090002',2,8600,'01.png','2015-01-01',2,'2023-10-20 16:35:33','2023-10-20 16:35:37'),
(3,'lujunyi','123456','卢俊义',1,'13309090003',2,8900,'01.png','2008-05-01',2,'2023-10-20 16:35:33','2023-10-20 16:35:39'),
(4,'wuyong','123456','吴用',1,'13309090004',2,9200,'01.png','2007-01-01',2,'2023-10-20 16:35:33','2023-10-20 16:35:41'),
(5,'gongsunsheng','123456','公孙胜',1,'13309090005',2,9500,'01.png','2012-12-05',2,'2023-10-20 16:35:33','2023-10-20 16:35:43'),
(6,'huosanniang','123456','扈三娘',2,'13309090006',3,6500,'01.png','2013-09-05',1,'2023-10-20 16:35:33','2023-10-20 16:35:45'),
(7,'chaijin','123456','柴进',1,'13309090007',1,4700,'01.png','2005-08-01',1,'2023-10-20 16:35:33','2023-10-20 16:35:47'),
(8,'likui','123456','李逵',1,'13309090008',1,4800,'01.png','2014-11-09',1,'2023-10-20 16:35:33','2023-10-20 16:35:49'),
(9,'wusong','123456','武松',1,'13309090009',1,4900,'01.png','2011-03-11',1,'2023-10-20 16:35:33','2023-10-20 16:35:51'),
(10,'linchong','123456','林冲',1,'13309090010',1,5000,'01.png','2013-09-05',1,'2023-10-20 16:35:33','2023-10-20 16:35:53'),
(11,'huyanzhuo','123456','呼延灼',1,'13309090011',2,9700,'01.png','2007-02-01',2,'2023-10-20 16:35:33','2023-10-20 16:35:55'),
(12,'xiaoliguang','123456','小李广',1,'13309090012',2,10000,'01.png','2008-08-18',2,'2023-10-20 16:35:33','2023-10-20 16:35:57'),
(13,'yangzhi','123456','杨志',1,'13309090013',1,5300,'01.png','2012-11-01',1,'2023-10-20 16:35:33','2023-10-20 16:35:59'),
(14,'shijin','123456','史进',1,'13309090014',2,10600,'01.png','2002-08-01',2,'2023-10-20 16:35:33','2023-10-20 16:36:01'),
(15,'sunerniang','123456','孙二娘',2,'13309090015',2,10900,'01.png','2011-05-01',2,'2023-10-20 16:35:33','2023-10-20 16:36:03'),
(16,'luzhishen','123456','鲁智深',1,'13309090016',2,9600,'01.png','2010-01-01',2,'2023-10-20 16:35:33','2023-10-20 16:36:05'),
(17,'liying','12345678','李应',1,'13309090017',1,5800,'01.png','2015-03-21',1,'2023-10-20 16:35:33','2023-10-20 16:36:07'),
(18,'shiqian','123456','时迁',1,'13309090018',2,10200,'01.png','2015-01-01',2,'2023-10-20 16:35:33','2023-10-20 16:36:09'),
(19,'gudasao','123456','顾大嫂',2,'13309090019',2,10500,'01.png','2008-01-01',2,'2023-10-20 16:35:33','2023-10-20 16:36:11'),
(20,'ruanxiaoer','123456','阮小二',1,'13309090020',2,10800,'01.png','2018-01-01',2,'2023-10-20 16:35:33','2023-10-20 16:36:13'),
(21,'ruanxiaowu','123456','阮小五',1,'13309090021',5,5200,'01.png','2015-01-01',3,'2023-10-20 16:35:33','2023-10-20 16:36:15'),
(22,'ruanxiaoqi','123456','阮小七',1,'13309090022',5,5500,'01.png','2016-01-01',3,'2023-10-20 16:35:33','2023-10-20 16:36:17'),
(23,'ruanji','123456','阮籍',1,'13309090023',5,5800,'01.png','2012-01-01',3,'2023-10-20 16:35:33','2023-10-20 16:36:19'),
(24,'tongwei','123456','童威',1,'13309090024',5,5000,'01.png','2006-01-01',3,'2023-10-20 16:35:33','2023-10-20 16:36:21'),
(25,'tongmeng','123456','童猛',1,'13309090025',5,4800,'01.png','2002-01-01',3,'2023-10-20 16:35:33','2023-10-20 16:36:23'),
(26,'yanshun','123456','燕顺',1,'13309090026',5,5400,'01.png','2011-01-01',3,'2023-10-20 16:35:33','2023-11-08 22:12:46'),
(27,'lijun','123456','李俊',1,'13309090027',2,6600,'8.png','2004-01-01',2,'2023-10-20 16:35:33','2023-11-16 17:56:59'),
(28,'lizhong','123456','李忠',1,'13309090028',5,5000,'6.png','2007-01-01',3,'2023-10-20 16:35:33','2023-11-17 16:34:22'),
(30,'liyun','123456','李云',1,'13309090030',NULL,NULL,'01.png','2020-03-01',NULL,'2023-10-20 16:35:33','2023-10-20 16:36:31'),
(36,'linghuchong','123456','令狐冲',1,'18809091212',2,6800,'1.png','2023-10-19',2,'2023-10-20 20:44:54','2023-11-09 09:41:04');






员工列表查询:

基本查询:

需求:查询员工信息,并查询出部门名称。(涉及到的表:emp,dept)

基本查询的SQL语句:

select e.*, d.name deptName from emp e left join dept d on e.dept_id = d.id ;

 查询结果的封装,需要保证查询返回的字段名与类中的属性名保持一致。

在empController编写查询全部的方法,调用service层

 

    /**
     * 基本查询
     * @return
     */
    @GetMapping("/list")
    public Result getList(){
       List<Emp> empList =  empService.list();
        return Result.success(empList);
    }

编写 empService

  List<Emp> list();

编写empServiceImpl实现类:

    @Override
    public List<Emp> list() {
        return empMapper.getList();
    }

编写empMapper

 

    @Select("select e.*,d.name deptName from emp e left join dept d on e.dept_id = d.id")
    List<Emp> getList();

在Apifox里面测试:

分页查询:
原始的分页查询:

原始的分页查询会执行两条SQL语句

select * from emp e left join dept d on e.dept_id = d.id limit; 分页查询

select count(*)  from emp e left join dept d e.dept_id = d.id;  查询数量

前端如何传递数据给后端:

当前页面:page

每页显示记录数: pageSize 

在empController编写方法:

    @GetMapping
    public Result list(Integer page,Integer pageSize){
        PageBean pageBean =  empService.getList(page,pageSize);
        return Result.success(pageBean);
    }

编写empService接口:

 

    /**
     * 分页查询
     * @param page
     * @param pageSize
     * @return
     */
    PageBean getList(Integer page, Integer pageSize);

编写empServiceImpl实现类:

    @Override
    public PageBean getList(Integer page, Integer pageSize) {
        //计算起始索引
        Integer start = (page - 1) * pageSize;
        //查询全部数据
        List<Emp> empList = empMapper.list(start,pageSize);
        //查询总的记录数
        Long count = empMapper.getCount();
        return new PageBean(count,empList);
    }

编写empMapper接口:

    @Select("select e.*,d.name deptName from emp e left join dept d on e.dept_id = d.id limit #{start},#{pageSize}")
    List<Emp> list(Integer start, Integer pageSize);

    @Select("select count(*) from emp left join dept on emp.dept_id = dept.id")
    Long getCount();

后端给前端返回的数据:

数据列表: List rows;

总记录数: Long total;

PageHelper分页插件:

PageHelper 是第三方提供的在mybatis框架中用来实现分页的插件,用来简化分页操作,提高开发效率。 

PageHelper实现机制:

 

使用步骤:
  •  引入PageHelper的依赖
  • 定义Mapper接口的查询方法(无需考虑分页)
  • 在Service方法中实现分页查询 

引入依赖:

<!--        分页插件-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.7</version>
        </dependency>

 编写 EmpController层:

    @GetMapping
    public Result list(Integer page,Integer pageSize){
        PageBean pageBean =  empService.getList(page,pageSize);
        return Result.success(pageBean);
    }

编写EmpService接口:

 

    PageBean getList(Integer page, Integer pageSize);

编写 EmpServiceImpl实现类:

    /**
     * PageHeloer分页查询
     * @param page
     * @param pageSize
     * @return
     */
    @Override
    public PageBean getList(Integer page, Integer pageSize) {
        PageHelper.startPage(page,pageSize);
        List<Emp> empList = empMapper.PageList();
        Page<Emp> emps = (Page<Emp>) empList;
        return new PageBean(emps.getTotal(),emps.getResult());
    }

编写EmpMapper接口:

    /**
     * pageHelper分页查询
     */
    @Select("select e.*,d.name deptName from emp e left join dept d on e.dept_id = d.id ")
    List<Emp> PageList();

 调用Apifox测试:

控制台:

使用PageHelper分页插件的注意事项:
  • SQL语句结尾不要加分号(;)
  • PageHelper只会对紧跟在其后的第一条SQL语句进行分页处理

测试 在SQL语句结尾加分号(;)

    <select id="wherePage" resultType="com.sde.pojo.Emp">
        select e.*,d.name deptName from emp e left join dept d on e.dept_id = d.id
        <where>
            <if test="name != null and name != ''">
                e.name like concat('%',#{name},'%')
            </if>
            <if test="gender != null">
                and e.gender = #{gender}
            </if>
            <if test="begin != null and end != null">
                and e.entry_date between #{begin} and #{end}
            </if>
        </where>
        order by e.update_time desc;
    </select>

然后启动项目运行在Apifox测试:

 

控制台输出:

因为我们在后面加了分号,所以在最后执行 limit分页的时候,前面多了一个分号,所以SQL语句就报错了。

解决办法:去掉SQL语句后面最后面的一个分号(;) 

2,测试PageHelper之后执行,紧跟在后面的第一条SQL语句进行处理

 我把empMapper.PageList();方法复制一行写在下面,然后把它执行的SQL语句,强转成page,最后return出去。

在ApiFox里面测试:

 看看控制台:

条件分页查询:
  • select * from emp e ... where e.name like ?
  • select * from emp e ... where e.gender = ?
  • select * from emp e ... where e.name like ? and e.gender = ?

 接收请求参数:

接收条件分页查询的请求参数:GET /emps?name=张&gender=1&begin=2007-09-01&end=2022-09-01&page=1&pageSize=1

通过方法多形参,接收多参数:

就是前端在传递条件分页数据时,有多少参数就,在这个方法里面定义多少形参。

编写 EmpController

    /**
     * 条件分页查询--多参数接收
     * @param
     * @param
     * @return
     */
    @GetMapping("/getByList")
    public Result list(String name,Integer gender,
                       @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,
                       @DateTimeFormat(pattern = "yyyy-MM-dd")  LocalDate end,
                       @RequestParam(defaultValue = "1") Integer page,
                       @RequestParam(defaultValue = "10") Integer pageSize){
        log.info("接收到前端传递来的参数:{},{},{},{},{},{}",name,gender,begin,end,page,pageSize);
       PageBean pageBean =  empService.moreQuery(name,gender,begin,end,page,pageSize);
      return Result.success(pageBean);
    }

编写EmpService接口:

PageBean moreQuery(String name, Integer gender, LocalDate begin, LocalDate end, Integer page, Integer pageSize);

编写 EmpServiceImpl实现类:

    @Override
    public PageBean moreQuery(String name, Integer gender, LocalDate begin, LocalDate end, Integer page, Integer pageSize) {
        PageHelper.startPage(page,pageSize);
       List<Emp> empList =  empMapper.getByWhere(name,gender,begin,end);
       Page p = (Page) empList;
        return new PageBean(p.getTotal(),p.getResult());
    }

编写 EmpMapper接口:

  List<Emp> getByWhere(String name, Integer gender, LocalDate begin, LocalDate end);

EmpMapper.xml配置文件:

在Apifox里面测试:

场景:如果参数个数比较少,建议直接接收即可。 如果参数个数较多,不便于维护和管理

在Controller方法中,通过实体对象接收。

在Controller方法中通过实体对象封装多个参数。(实体属性与请求参数名保持一致)

前端的请求:

GET /emps?name=张&gender=1&begin=2007-09-01&end=2022-09-01&page=1&pageSize=10

 定义一个 EmpQuery的实体类:

@Data
public class EmpQuery {
    private String name;
    private Integer gender;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate begin;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate end;
    private Integer page = 1;
    private Integer pageSize = 10;
}

编写 EmpController

/**
 * 条件分页查询用对象接收
 * @param empQuery
 * @return
 */
@GetMapping
public Result listQuery(EmpQuery empQuery){
    log.info("接收到前端传递来的参数:{}",empQuery);
   PageBean pageBean =  empService.wherePage(empQuery);
    return Result.success(pageBean);
}

编写EmpService接口:

    /**
     * 条件分页查询
     * @param empQuery
     * @return
     */
    PageBean wherePage(EmpQuery empQuery);

EmpServiceImpl实现类:

    /**
     * 条件分页查询
     * @param empQuery
     * @return
     */
    @Override
    public PageBean wherePage(EmpQuery empQuery) {
        //设置分压查询的参数
        PageHelper.startPage(empQuery.getPage(), empQuery.getPageSize());
        // 调用mapper接口,进行条件查询
       List<Emp> empList =  empMapper.wherePage(empQuery);
       //强转为page类型
        Page<Emp> page = (Page<Emp>) empList;
        return new PageBean(page.getTotal(),page.getResult());
    }

编写 EmpMapper接口:

    /**
     * 条件分页查询
     * @param empQuery
     * @return
     */
    List<Emp> wherePage(EmpQuery empQuery);

EmpMapper.xml配置文件:

    <select id="getByWhere" resultType="com.sde.pojo.Emp">
        select e.*,d.name deptName from emp e left join dept d on e.dept_id = d.id
        <where>
            <if test="name != null and name != ''">
                e.name like concat('%',#{name},'%')
            </if>
            <if test="gender != null">
                and e.gender = #{gender}
            </if>
            <if test="begin != bull and end != null ">
                and e.entry_date between #{begin} and #{end}
            </if>
        </where>
    </select>

在Apifox里面测试:

接收时间日期的参数:

@LocalDateTime 这个注解,有一个pattern属性,可以指定接收前端的数据格式。

@LocalDateTime(pattern="yyyy-MM-dd")

where 标签的作用:
  • 自动根据条件判定是否添加 where 关键字
  • 可以去除掉第一个前面多余的and或or

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

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

相关文章

P1044 [NOIP2003 普及组] 栈——卡特兰数

传送门&#xff1a; P1044 [NOIP2003 普及组] 栈 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P1044 公式一&#xff1a;递推式(注意开 long long &#xff0c;然后 先乘完再除&#xff0c;防止下取整&#xff09; typedef long long ll;…

超过 1450 个 pfSense 服务器因错误链而遭受 RCE 攻击

在线暴露的大约 1450 个 pfSense 实例容易受到命令注入和跨站点脚本漏洞的攻击&#xff0c;这些漏洞如果链接起来&#xff0c;可能使攻击者能够在设备上执行远程代码。 pfSense 是一款流行的开源防火墙和路由器软件&#xff0c;允许广泛的定制和部署灵活性。 它是一种经济高效…

SpringCloud-高级篇(七)

前面在微服务里整合了Seata&#xff0c;下面利用Seata去解决分布式事务的问题&#xff0c;回去学习Seata中的四种解决方案 &#xff1a;首先学习XA模式 &#xff08;1&#xff09;XA模式 RM在前面讲的是资源管理器&#xff0c;在XA标准中RM都是由数据库来实现的&#xff0c;数…

【二分查找】【双指针】LeetCode:2565最少得分子序列

作者推荐 【动态规划】【广度优先】LeetCode2258:逃离火灾 本文涉及的基础知识点 二分查找算法合集 有序向量的二分查找&#xff0c;初始化完成后&#xff0c;向量不会修改。 双指针&#xff1a; 用于计算子字符串是s的字符串的子系列。 题目 给你两个字符串 s 和 t 。 你…

19.java绘图

A.Graphics类 Graphics类是java.awt包中的一个类&#xff0c;它用于在图形用户界面&#xff08;GUI&#xff09;或其他图形应用程序中进行绘制。该类通常与Component的paint方法一起使用&#xff0c;以在组件上进行绘制操作。 一些Graphics类的常见用法和方法&#xff1a; 在组…

Java基础语法之类和对象

类的定义 类就是对一个实体的属性功能进行描述 类的定义格式 首先要用到class关键字&#xff1b; 其次&#xff0c;类名采用大驼峰形式例如Dog ClassName Student…… 最后&#xff0c;类中包含该类的属性&#xff0c;即成员变量&#xff1b;以及该类的功能&#xff0…

HelpLook VS Confluence:知识管理方面谁更有优势?

多年来&#xff0c;在线协作和文档工具市场一直被Confluence所主导。Confluence由Atlassian于2004年创立&#xff0c;很迅速地成为企业寻求强大而全面的协作解决方案和知识管理的热门选择。然而&#xff0c;随着新工具如Notion和HelpLook的出现&#xff0c;市场格局发生了变化&…

各地加速“双碳”落地,数字能源供应商怎么选?

作者 | 曾响铃 文 | 响铃说 随着我国力争2030年前实现“碳达峰”、2060年前实现“碳中和”的“双碳”目标提出&#xff0c;为各地区、各行业的低碳转型和绿色可持续发展制定“倒计时”时间表&#xff0c;一场围绕“数字能源”、“智慧能源”、“新能源”等关键词的创新探索进…

十六 动手学深度学习v2计算机视觉 ——样式迁移

文章目录 基于CNN的样式迁移 基于CNN的样式迁移 我们通过前向传播&#xff08;实线箭头方向&#xff09;计算风格迁移的损失函数&#xff0c;并通过反向传播&#xff08;虚线箭头方向&#xff09;迭代模型参数&#xff0c;即不断更新合成图像。 风格迁移常用的损失函数由3部分组…

【lombok】从easyExcel read不到值到cglib @Accessors(chain = true)隐藏的大坑

背景: 在一次使用easyExcel.read 读取excel时&#xff0c;发现实体类字段没有值&#xff0c;在反复测试后&#xff0c;发现去掉Accessors(chain true)就正常了&#xff0c;为了验证原因&#xff0c;进行了一次代码跟踪 由于调用链路特别长&#xff0c;只列举出部分代码&#x…

141 环形链表

解题思路&#xff1a; \qquad 最容易想到的方法&#xff0c;就是遍历链表同时用哈希表unordered_map把节点存下来&#xff1a; \qquad\qquad 遇到重复节点则认为存在环&#xff0c;返回true&#xff1b; \qquad\qquad 遍历到nullptr&#xff0c;则链表中不存在环&#xff0c…

使命召唤9缺少buddha.dll的解决方法分享,如何快速修复buddha.dll

《使命召唤》系列作为备受欢迎的第一人称射击游戏,经常会在新作发行后引起广大玩家的讨论。最近&#xff0c;《使命召唤9》玩家中出现了一个常见的技术问题&#xff1a;游戏无法启动&#xff0c;因为系统找不到 buddha.dll 文件。这篇文章将探讨 buddha.dll 的相关信息、丢失原…

奥比中光 Femto Bolt相机ROS配置

机械臂手眼标定详解 作者&#xff1a; Herman Ye Auromix 测试环境&#xff1a; Ubuntu20.04/22.04 、ROS1 Noetic/ROS2 Humble、X86 PC/Jetson Orin、Kinect DK/Femto Bolt 更新日期&#xff1a; 2023/12/12 注1&#xff1a; Auromix 是一个机器人爱好者开源组织。 注2&#…

机器学习笔记 - 基于C# + .net framework 4.8的ONNX Runtime进行分类推理

该示例是从官方抄的,演示了如何使用 Onnx Runtime C# API 运行预训练的 ResNet50 v2 ONNX 模型。 我这里的环境基于.net framework 4.8的一个winform项目,主要依赖下面版本的相关库。 Microsoft.Bcl.Numerics.8.0.0 Microsoft.ML.OnnxRuntime.Gpu.1.16.3 SixLabors.ImageShar…

“百里挑一”AI原生应用亮相,百度智能云千帆AI加速器首个Demo Day来了!

作者简介&#xff1a; 辭七七&#xff0c;目前大二&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f…

机器视觉系统选型-同轴光源分类及应用场景

同轴光源 从与相机同轴的方向均匀照射漫射光 Mark点定位条码识别二维码识别反光物体表面缺陷检测 高亮同轴光源 照射光线与水平方向成低角度夹角Mark点定位反光件表面凹坑、损伤、缺陷印刷电路板二维码识别 平行同轴光源 从与相机同轴方向照射平行度高 的平行光尺寸测量玻璃检…

Linux---Ubuntu操作系统

1. Ubuntu操作系统的介绍 Ubuntu操作系统是属于Linux操作系统中的一种&#xff0c;它是免费、稳定又可以拥有绚丽界面的一个操作系统 2. Ubuntu图形界面的介绍 任务栏 窗口操作按钮 窗口菜单条 任务栏效果图: 窗口操作按钮效果图: 窗口菜单条效果图: 3. 与Windows目录结…

单变量线性回归的机器学习代码

本文为学习吴恩达版本机器学习教程的代码整理&#xff0c;使用的数据集为https://github.com/fengdu78/Coursera-ML-AndrewNg-Notes/blob/f2757f85b99a2b800f4c2e3e9ea967d9e17dfbd8/code/ex1-linear%20regression/ex1data1.txt 将数据集和py代码放到同一目录中&#xff0c;使…

HarmonyOS(二)—— 初识ArkTS开发语言(下)之ArkTS声明式语法和组件化基础

前言&#xff1a; 通过前面ArkTS开发语言&#xff08;上&#xff09;之TypeScript入门以及ArkTS开发语言&#xff08;中&#xff09;之ArkTS的由来和演进俩文我们知道了ArkTS的由来以及演进&#xff0c;知道了ArkTS具备了声明式语法和组件化特性&#xff0c;今天&#xff0c;搭…

计网 - 如何理解 Mac地址 、 IP地址 、端口号

文章目录 概述Mac地址IP 地址IP 地址和 MAC 地址之间的区别端口号为什么端口号有 65535 个&#xff1f;端口号的确定标准既定的端口号时序分配法 观察端口号 小结 概述 Mac地址&#xff08;Media Access Control Address&#xff09;和IP地址&#xff08;Internet Protocol Ad…