Mybatis之配置文件与映射文件的“那些事”,你真的知道吗?

news2024/9/28 7:16:26

编译软件:IntelliJ IDEA 2019.2.4 x64
操作系统:win10 x64 位 家庭版
Maven版本:apache-maven-3.6.3
Mybatis版本:3.5.6


目录

  • 一.详解Mybatis的核心配置文件【mybatis-config.xml】
    • 1.1 核心配置文件概述
    • 1.2 核心配置文件之根标签
    • 1.3核心配置文件之常用子标签
      • 1.3.1 properties子标签
      • 1.3.2 settings 子标签
      • 1.3.3 typeAliases(类型别名)子标签
        • 1.3.3.1 Mybatis 常用的自定义别名
      • 1.3.4 environments(环境配置)子标签
      • 1.3.5 mappers(映射器)子标签
  • 二. 详解Mybatis的映射文件
    • 2.1 映射文件概述
    • 2.2 映射文件之根标签
    • 2.3 映射文件子标签
      • 2.3.1 insert标签
      • 2.3.2 delete标签
      • 2.3.3 update标签
      • 2.3.4 select标签
      • 2.3.5 Sql标签
      • 2.3.6 cache标签
      • 2.3.7 cache-ref标签
      • 2.3.8 resultMap标签
    • 2.4 映射文件中常用的属性
      • 2.4.1 resultType
    • 2.5 获取主键自增数据
    • 2.6 获取数据库受影响行数


一.详解Mybatis的核心配置文件【mybatis-config.xml】

1.1 核心配置文件概述

MyBatis的配置文件包含了会深深影响MyBatis行为的设置和属性等相关信息

1.2 核心配置文件之根标签

作用:

在根标签内部设置所有的子标签

语法:

<configuration>

</configuration>

1.3核心配置文件之常用子标签

1.3.1 properties子标签

作用:

可以定义属性或引入外部属性文件

为什么要引入外部属性文件?

实现数据库连接属性的解耦

应用场景:

①在properties 元素中设置相应属性

怎么设置?

在properties 元素的子元素中设置数据库连接对象的driver与与ur的属性值

设好的属性driver与url可以在dataSource标签下相同的属性中动态替换它们的属性值,如下图所示。

在这里插入图片描述

用法案例:在核心配置文件中使用properties子标签设置数据库连接需要的driver与url属性,将其属性值引用至environments标签下的dataSource子标签中相应的属性中,运行测试。

示例代码如下:

①在核心配置文件中使用properties子标签设置数据库连接需要的driver与url属性,将其属性值引用至environments标签下的dataSource子标签中相应的属性中

<properties>
    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/0411db?serverTimezone=UTC"/>
</properties>

<environments default="development">
    <environment id="development">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <!--   下面是mysql8版本            -->
            <property name="driver" value="${driver}"/>
            <!--    url后要加时区 ?serverTimezone=UTC" ,不然报错           -->
            <property name="url" value="${url}"/>
        <!-- 下面是mysql5版本的写法
             <property name="driver"value="com.mysql.jdbc.Driver"/>
             <property name="url"value="jdbc:mysql://localhost:3306/0411db"/>
            -->
            <property name="username" value="root"/>
            <property name="password" value="123456"/>
        </dataSource>
    </environment>
</environments>

②运行测试

在这里插入图片描述

②引入外部属性文件

如何在外部定义并引入数据库连接的属性文件?

  1. 例如在resources目录下定义一个db.properties文件,用以存放数据库连接的相关属性值

在这里插入图片描述

  1. 在核心配置文件中使用properties标签引入外部的属性文件db.properties

注意:properties标签内两种引用文件的方式resource与url)的区别,如下图所示:
在这里插入图片描述

示例代码如下:

<properties resource="db.properties"></properties>

<environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--   下面是mysql8版本            -->
                <property name="driver" value="${db.driver}"/>
                <!--    url后要加时区 ?serverTimezone=UTC" ,不然报错           -->
                <property name="url" value="${db.url}"/>
            <!-- 下面是mysql5版本的写法
                 <property name="driver"value="com.mysql.jdbc.Driver"/>
                 <property name="url"value="jdbc:mysql://localhost:3306/0411db"/>
                -->
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

在这里插入图片描述

1.3.2 settings 子标签

作用:

这是MyBatis中极为重要的调整设置,它会改变MyBatis的运行时行为。

常用属性:

mapUnderscoreToCamelCase属性是否开启驼峰命名自动映射,默认值为false,如设置true会自动将数据库中的字段a_col与Java对象中的aCol属性自动映射

注意:

只能将字母相同的字段与属性自动映射

示例代码如下;

a.在核心配置文件中的settings里未设置mapUnderscoreToCamelCase的值时:

在这里插入图片描述

b.在核心配置文件中设置mapUnderscoreToCamelCase的属性为true时:

<settings>
    <setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>

在这里插入图片描述

1.3.3 typeAliases(类型别名)子标签

作用:

类型别名可为Java类型设置一个别名

语法及特点:

①为Java pojo(Java bean【实体类】)设置别名(不常用)

<typeAliases>
	//为指定类型定义别名,前者是类的全类名,后者是该类的别名(小名)
    <typeAlias type="mybatis.mapper.EmployeeMapper" alias="employee"
</typeAliases>

②为指定包下的所有pojo起别名(常用)

<typeAliases>
	//为指定包【mybatis.pojo】下所有的类定义别名。
	//默认将类名作为别名,不区分大小写【推荐使用小写字母】
    <package name="mybatis.pojo"/>
</typeAliases>

1.3.3.1 Mybatis 常用的自定义别名

别名类型
_intint
integer或intInteger
stringString
list或arraylistArrayList
map或hashmapHashMap

注:Java的其他基本数据类型与int的Mybatis自定义别名的命名风格雷同,包装类型也是如此,这里不做赘述。

1.3.4 environments(环境配置)子标签

作用:

设置数据库连接环境

示例代码如下:

//设置数据库的连接环境
<environments default="development">
	//可设置多个<environment></environment>
    <environment id="development">
    	//设置事务管理器的相应属性
        <transactionManager type="JDBC"/>
        //设置数据源
        <dataSource type="POOLED">
        	//设置数据库连接的相应属性 

            <!--   下面是mysql8版本            -->
            //设置数据库连接的driver(驱动)
            <property name="driver" value="${db.driver}"/>
            <!--    url后要加时区 ?serverTimezone=UTC" ,不然报错  ->
             //设置数据库连接的url
            <property name="url" value="${db.url}"/>
        	<!-- 下面是mysql5版本的写法
             <property name="driver"value="com.mysql.jdbc.Driver"/>
             <property name="url"value="jdbc:mysql://localhost:3306/0411db"/>
            -->
            
             //设置数据库连接所需要的能够登录MySQL的用户名
            <property name="username" value="root"/>
             //设置密码
            <property name="password" value="123456"/>
            
        </dataSource>
    </environment>
</environments>

1.3.5 mappers(映射器)子标签

作用:

设置加载映射文件的路径

示例代码如下:

<mappers>
	<mapper resource="mapper/EmployeeMapper.xml"/>
	
	//有些老项目可能会这么写
	<!--要求:接口的包名与陕射义件的包名需要致-->
	<package name="com.atguigu.mybatis.mapper"/>
</mappers>

注意:

核心配置文件中的子标签,是有顺序要求的

默认顺序如下:
在这里插入图片描述

不信,大可以试试!

在这里插入图片描述


二. 详解Mybatis的映射文件

2.1 映射文件概述

Mybatis的真正强大在于它的语句映射,这是它的魔力所在。如果拿它跟具有相同功能的JDBC代码进行对比,你会立即发现省掉了将近95%的代码。(摘自官方文档)

2.2 映射文件之根标签

根标签:mapper标签

注意:

mapper中的namespace要求与接口的全类名一致

如何获取接口(方法/ pojo)的全类名?

①将光标置于要获取的接口名上

如下图所示:

在这里插入图片描述

②鼠标右击打开下面的选项栏,点击"copy Reference“

在这里插入图片描述

③”mybatis.mapper.DeptMapper"就是刚才接口名的全名称

2.3 映射文件子标签

2.3.1 insert标签

功能:

定义添加sql语句

用法案例:

使用insert标签插入一条数据(employee对象)到数据库中

①在EmployeeMapper接口中先定义添加数据的方法

代码示例如下:

//添加员工
public void insertEmployee(Employee employee);

②在上述接口对应的映射文件中使用insert标签

代码示例如下:

<insert id="insertEmployee">
    insert into
        tbl_employee(last_name,email,salary)
    <!--  这里是要将employee对象中的属性值传到mysql中    -->
    values(#{lastName},#{email},#{salary})
</insert>

③测试

@Test
public void testInsertEmployee(){
    try {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new 				    							SqlSessionFactoryBuilder().build(inputStream);
        //通过SqlSessionFactory对象调用openSession();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取EmployeeMapper的代理对象
        EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
        employeeMapper.insertEmployee(new Employee("张三","hdfjf@163.com",9000.0));

        //开启事务,数据才能真正存进数据库中,why?
        sqlSession.commit();
    } catch (IOException e) {
        e.printStackTrace();
    }


}

在这里插入图片描述

在这里插入图片描述

这里有一个问题:即使用mybatis,添加数据到MySQL数据库中时,代码中为什么要加sqlSession.commit()这句代码后,数据才能真正存进数据库中?

解释:

在使用 Mybatis 操作数据时,调用插入或更新方法后,SQL 语句并不会立即执行,而是被缓存到当前的 SqlSession 对象中。这个字面意义上的 Session 就像一个会话,预计会涉及多个数据库操作,其生命周期通常是跨越过多个请求和响应 (request,response) 阶段。

因此,如果想要将数据真正存入数据库中,需要手动触发一次提交 (commit) 动作。Mybatis 中 SqlSession 接口提供了 commit() 方法来提交事务,以便将所有未提交的 SQL 语句立即执行,并将结果存入数据库。

也就是说,sqlSession.commit() 可以将之前缓存的 SQL 语句批量地发送给数据库进行处理。同时,如果没有提交事务,之前所做的更改全部都将被回滚,并且数据库不会有任何变化。

因此,在使用 Mybatis 进行数据操作时,添加 sqlSession.commit() 这句代码是非常必要的,否则可能出现数据插入失败的情况。

2.3.2 delete标签

功能:

定义删除sql语句

用法案例:

使用delete标签在数据库中删除员工编号为4的数据

①在EmployeeMapper接口中先定义删除数据的方法

代码示例如下:

//删除员工(根据员工编号删除对应的员工信息)
public void deleteEmployee(int empId);

②在上述接口对应的映射文件中使用delete标签

代码示例如下:

<delete id="deleteEmployee">
    delete from tbl_employee
    where id= #{empId}
</delete>

③测试

代码示例如下:

@Test
public void testDeleteEmployee(){
    try {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //通过SqlSessionFactory对象调用openSession();
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //获取EmployeeMapper的代理对象
        EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
        //删除员工编号为4的员工信息
        employeeMapper.deleteEmployee(4);

        //开启事务,数据才能真正存进数据库中
        sqlSession.commit();


    } catch (IOException e) {
        e.printStackTrace();
    }


}

在这里插入图片描述

在这里插入图片描述

2.3.3 update标签

功能:

定义修改sql语句

用法案例:

使用update标签修改员工编号为2的相关员工数据

修改前的数据:

在这里插入图片描述

①在EmployeeMapper接口中先定义修改数据的方法

代码示例如下:

//修改员工数据
public void updateEmployee(Employee employee);

②在上述接口对应的映射文件中使用update标签

代码示例如下:

<update id="updateEmployee">
    update tbl_employee
    set email=#{email} , salary=#{salary}
    where id=#{id}
</update>

③测试

@Test
public void testUpdateEmployee(){
    try {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //通过SqlSessionFactory对象调用openSession();
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //获取EmployeeMapper的代理对象
        EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
		
        //通过调用代理对象去执行删除,这点和当初在Dao层新建接口,接口的实现类去实现删除的功能很像,代理对
        //象就相当于当初接口的实现类一样,但是我并没有写接口的实现类,但在mybatis框架中就真真切切的实现了
        //删除的功能,究其原因,应该是mybatis在底层就帮我实现了,但是具体是怎么实现的,我暂时不知道
        
        //修改员工编号为2的员工部分信息
        employeeMapper.updateEmployee(new Employee(2,"hdjs@qq.com",120.0));;

        //开启事务,数据才能真正存进数据库中
        sqlSession.commit();


    } catch (IOException e) {
        e.printStackTrace();
    }


}

在这里插入图片描述

在这里插入图片描述

2.3.4 select标签

功能:

定义查询sql语句

用法案例:

使用select标签查询数据库中所有的员工信息

①在EmployeeMapper接口中先定义查看所有的员工数据的方法

代码示例如下:

//查看所有的员工信息
public List<Employee> showAllEmployee();

②在上述接口对应的映射文件中使用select标签

代码示例如下:

<!--  查看所有的员工信息  -->
<!-- 如果resultType中的值是一个类的类型,如果之前定义它的别名,这里可填写该类的别名,毕竟有时类的全名太长了   -->
    <select id="showAllEmployee" resultType="mybatis.pojo.Employee">
        select
            id,
            last_name ,
            email,
            salary
        from
            tbl_employee
    </select>

注意:

在resultType中,期望从这条语句中返回结果的类全限定名或别名,如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身的类型。 resultType 和 resultMap 之间只能同时使用

③测试

  @Test
    public void testShowAllEmployee(){
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            //通过SqlSessionFactory对象调用openSession();
            SqlSession sqlSession = sqlSessionFactory.openSession();

            //获取EmployeeMapper的代理对象
            EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);

            List<Employee> employees = employeeMapper.showAllEmployee();
            for (Employee employee : employees) {
                System.out.println(employee);
            }
/*
            //开启事务,数据才能真正存进数据库中
            sqlSession.commit();
*/


        } catch (IOException e) {
            e.printStackTrace();
        }

    }

在这里插入图片描述

备注:以下子标签的详细功能用法将在接下来的序列文章中详细探讨,这里不做赘述

2.3.5 Sql标签

功能:

定义可重用的SQL语句块

2.3.6 cache标签

功能:

设置当前命名空间的缓存配置

2.3.7 cache-ref标签

功能:

设置其他命名空间的缓存配置

2.3.8 resultMap标签

功能:

描述如何从数据库结果集中加载对象

注意:

在使用多表查询的场景上,resultType解决不了,就用resultMap

2.4 映射文件中常用的属性

2.4.1 resultType

功能描述:

设置期望结果集返回类型【全类名或别名】

注意:

如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身的类型。

resultType和resultMap之间只能同时使用一个

2.5 获取主键自增数据

获取主键自增数据需要用到以下两个属性

  • useGeneratedKeys:启用主键生成策略

  • keyProperty:设置存储属性值

用法案例:基于EmployeeMapper接口中的插入数据的方法,对其映射文件中原有的insert标签内,添加以上两个属性,使在插入数据时获得其自增主键

①在EmployeeMapper接口中书写插入数据的方法

代码示例如下:

//添加员工
public void insertEmployee(Employee employee);

②在EmployeeMapper接口对应的映射文件中对使用inset标签添加获取主键自增数据的两个属性

代码示例如下:

<!--  useGeneratedKeys="true" keyProperty="id" : 启用主键生成策略,返回的结果集中包含自动生成主键的信息,并将其赋值给实体类对象中的 id 属性  -->
    <insert id="insertEmployee" useGeneratedKeys="true" keyProperty="id">
        insert into
            tbl_employee(last_name,email,salary)
        <!--  这里是要将employee对象中的属性值传到mysql中    -->
        values(#{lastName},#{email},#{salary})
    </insert>

③测试

代码示例如下

@Test
public void testInsertKeyEmployee(){
    try {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //通过SqlSessionFactory对象调用openSession();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取EmployeeMapper的代理对象
        EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);

        Employee employee=new Employee("李四1","sshdfjf@163.com",9000.0);

        employeeMapper.insertEmployee(employee);

        //当执行插入sql后,获取新增员工的主键(员工编号)
        System.out.println("employee.getId() : "+employee.getId());

        //开启事务,数据才能真正存进数据库中
        sqlSession.commit();

    } catch (IOException e) {
        e.printStackTrace();
    }


}

在这里插入图片描述
在这里插入图片描述

2.6 获取数据库受影响行数

如何获取数据库受影响行数?

直接将接口中相应方法的返回值设置为int或boolean即可

  • int代表受影响行数

  • boolean代表是否影响了数据库,true代表影响了数据库,false则代表无

用法案例:在插入数据时获取数据库受影响的行数

①基于2.5小节中用法案例的代码,仅仅修改Mapper接口中返回值的类型为int

代码示例如下:

//修改Mapper接口中返回值的类型为int
//添加员工
public int insertEmployee(Employee employee);

②测试代码做相应的微调并测试

//测试代码做相应的微调
@Test
public void testInsertKeyEmployee(){
    try {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //通过SqlSessionFactory对象调用openSession();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取EmployeeMapper的代理对象
        EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);

        Employee employee=new Employee("李四1","sshdfjf@163.com",9000.0);

        //获取返回值i(影响数据库的行数)
        int i = employeeMapper.insertEmployee(employee);

        System.out.println("影响数据库的行数: "+i);

        //当执行插入sql后,获取新增员工的主键(员工编号)
        System.out.println("employee.getId() : "+employee.getId());


        //开启事务,数据才能真正存进数据库中
        sqlSession.commit();


    } catch (IOException e) {
        e.printStackTrace();
    }


}

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

基于Java的房屋租赁管理系统开发与设计(附源码文档)-毕业设计

文章目录 1.适用人群2.你将收获3.项目概述3.1.项目背景3.2.项目简介3.3.软件技术栈 4.项目运行截图4.1.登陆界面4.2.首页4.3.修改密码4.4.用户管理模块4.5.权限管理模块4.6.资源管理模块4.7.区域设置模块4.8.房屋类型管理模块4.9.房屋管理模块4.10.房间管理模块4.11.房东管理模…

论文浅尝 | 利用关系路径的混合语义进行知识图的多跳问答

笔记整理&#xff1a;金龙&#xff0c;浙江大学硕士&#xff0c;研究方向知识图谱 链接&#xff1a;https://aclanthology.org/2022.coling-1.156/ 动机 知识图谱上回答自然语言问题(KGQA)仍然多跳推理面临的一个巨大的挑战。以前的方法通常是利用大规模的实体相关文本体或知识…

MAC移动硬盘无法正常推出:“磁盘无法推出,因为一个或多个程序正在使用它”

MAC移动硬盘在使用中&#xff0c;经常会碰到无法正常退出的情况&#xff0c;提示&#xff1a;“磁盘无法推出&#xff0c;因为一个或多个程序正在使用它”&#xff0c;如果你“直接拔掉”或“强行推出”的话&#xff0c;可能导致你下次重新连接移动硬盘无法识别。&#xff08;参…

[python] 协程学习从0到1,配合案例,彻底理解协程,耗费资源不增加,效果接近多线程

文章目录 前言1.python 生成器1.1 python 生成器概述1.2 关键字yield/yield from1.3 next/send函数1.4 StopInteration异常1.5 利用生成器实现生产者-消费者模型1.6 生成器和协程的关系 2.生成器协程调度器3.python事件驱动编程4.实现协程调度器5.python 协程生态 前言 多进程…

代码随想录算法训练营第二十九天 | 递增子序列(新的树层去重)、排列、排列中树枝树层去重

491.递增子序列 文档讲解&#xff1a;代码随想录 (programmercarl.com) 视频讲解&#xff1a;回溯算法精讲&#xff0c;树层去重与树枝去重 | LeetCode&#xff1a;491.递增子序列_哔哩哔哩_bilibili 状态&#xff1a;能直接写出来。不过还是要再看一遍&#xff0c;因为是新的去…

行人重识别(REID)——原理方法

行人重识别&#xff1a;短时 类内差异增大&#xff0c;类间差异减小 应用——行人跟踪 单摄像头单目标单摄像头多目标多摄像头多目标 行人重识别系统 特征提取 学习能够应对在不同摄像头下行人变化的特征 度量学习 将学习到的特征映射到新的空间使相同的人更近&#xff0c…

【每日一练】谷歌面试题:用JAVA翻转二叉搜索树

文章目录 前言题目分析实战演示1、创建一颗搜索二叉树2、中序遍历二叉搜索树3、根据题意创建二叉搜索树并展示4、算法增加二叉树翻转方法5、根据题意测试翻转二叉树结果6、完整代码 前言 很多同学应该都能够模拟出一个二叉树&#xff0c;那么又有多少同学能够写出翻转二叉树呢…

2d俯视视角游戏,可以切换多种枪械

文章目录 一、 介绍二、 人物移动、鼠标控制转向三、子弹脚本四、子弹随机抛壳五、 爆炸特效六、 发射子弹七、 子弹、弹壳对象池八、 散弹枪九、 火箭弹、发射火箭十、 下载工程文件 一、 介绍 2d俯视视角游戏。 人物视角跟随鼠标移动 多种枪械 抛壳效果 多种设计效果 对象池…

『python爬虫』10. 数据解析之xpath解析(保姆级图文)

目录 安装库xpath入门怎么快速得到xpath路径xpath节点的关系xpath方法小型实战总结 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 安装库 pip install lxmlxpath入门 怎么快速得到xpath路径 &#xff08;相对路…

第三十章 Unity角色控制器 Character Controller

在我们之前的章节中&#xff0c;我们已经了解了碰撞体和刚体。但是&#xff0c;对于刚体这个组件来讲&#xff0c;有两种使用方式。其一就是用它来模拟现实世界的移动或碰撞效果&#xff08;例如&#xff0c;门的开关&#xff09;&#xff1b;其二就是使用代码来控制物体移动或…

【网络进阶】HTTP服务器(一)

文章目录 1. HTTP简介2. HTTP工作原理3. HTTP注意事项4. HTTP消息结构5. 客户端请求消息6. 服务器响应消息7. GET传递数据实例8. HTTP请求方法9. HTTP响应头信息 1. HTTP简介 HTTP&#xff08;超文本传输协议&#xff0c;Hypertext Transfer Protocol&#xff09;是一种用于传…

Spring Cloud的五大组件你知道多少

前言 Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发&#xff0c;如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等&#xff0c;都可以用Spring Boot的开发风格做到一键启动和部署。 Spring Clo…

瑞萨e2studio(25)----电容触摸配置(2)

瑞萨e2studio.24--电容触摸配置1 概述初始配置监控检测电容按键显示和测量标准差显示多个触摸按键曲线 概述 篇文档将在上篇文章基础上修改电容触摸配置。 初始配置 需要进入Debug模式才可以进行电容触摸配置。 监控检测电容按键 从电容触摸主界面&#xff08;QE&#xf…

解决Xshell安装时错误代码-1603的问题

安装流程 官网下载&#xff1a;家庭/学校免费 - NetSarang Website 填写姓名&#xff0c;邮箱&#xff0c;申请下载&#xff0c;就能在邮箱收到下载链接 点击链接即可自动开始下载&#xff1b; 下载完成后进行安装即可 问题描述 安装进行到最后一步时&#xff0c;出现下图…

CCED2000后,中文编程软件再次脱颖而出,系出金山

WPS抗衡微软&#xff0c;CCEDE却被淹没&#xff1f; DOS代&#xff0c;我们用WPS来进行文字编辑&#xff0c;CCED来做表格&#xff0c;两者在那个时代可以称得上是国产办公领域的“必装软件”。 如今&#xff0c;30年过去了&#xff0c;WPS一步一步成长为抗衡微软office的国产…

4d毫米波雷达聚类检测和追踪

待整理和写代码&#xff0c;准备先用dbcan聚类&#xff0c;用激光那一套做做看看效果 流程 4D雷达毫米波聚类跟踪流程如下图&#xff1a; 预处理主要包括标定、坐标转换和动静分离。 标定使用水平仪、角反&#xff0c;采集数据分析&#xff0c;得到水平和俯仰偏角。 坐标转…

nssctf web (3)

[HUBUCTF 2022 新生赛]checkin <?php show_source(__FILE__); #将当前文件的代码显示到页面 $username "this_is_secret"; #给username赋值 $password "this_is_not_known_to_you"; #给password赋值 include("flag.php");//here I ch…

MySQL数据管理

一、MySQL数据库管理 1、库和表 行&#xff08;记录&#xff09;&#xff1a;用来描述一个对象的信息 列&#xff08;字段&#xff09;&#xff1a;用来描述对象的一个属性 2、常用的数据类型 int &#xff1a;整型 float &#xff1a;单精度浮点 4字节32位 double &…

《网络安全审查办法》

1发展历程 2020年4月27日&#xff0c;12部门联合发布《网络安全审查办法》&#xff0c;2020年6月1日起实施。 2021年7月10日&#xff0c;国家互联网信息办公室发布关于《网络安全审查办法&#xff08;修订草案征求意见稿&#xff09;》公开征求意见的通知。11月16日国家互联网信…

【C++入门】你知道为什么C++有函数重载而C语言没有函数重载吗?

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…