【MyBatis】| MyBatis参数处理(核心知识)

news2024/11/19 0:33:12

目录

一:MyBatis参数处理

1. 单个简单类型参数

2. Map参数

3. 实体类参数(PoJo类)

4. 多参数

5. @Param注解(命名参数)


一:MyBatis参数处理

接口中方法的参数专栏!

1. 单个简单类型参数

简单类型包括:

①基本数据类型:byte 、short、 int、 long、 float、 double、 char

②对应的包装类型:Byte、 Short、 Integer、 Long、 Float、 Double、 Character

③字符串:String

④util包下的Date:java.util.Date

⑤sql包下的Date:java.sql.Date

(1)数据的准备t_student表

①创建表的结构

②向表中插入数据

 (2)把结构搭起来

pom.xml中引入依赖

①①①<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.bjpowernode</groupId>
    <artifactId>mybatis-007-param</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <!--引入依赖-->
    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.10</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.23</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.11</version>
        </dependency>
    </dependencies>
    <!--编译和运行环境-->
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

</project>

①java下mapper包的StudentMapper接口,编写抽象的方法(三兄弟之一)

package com.bjpowernode.mybatis.mapper;

public interface StudentMapper {
}

②java下pojo包的Student类,用来封装对象

package com.bjpowernode.mybatis.pojo;

import java.util.Date;

public class Student {
    private Long id;
    private String name;
    private Integer age;
    private Double height;
    private Date birth;
    private Character sex;

    public Student() {
    }
    public Student(Long id, String name, Integer age, Double height, Date birth, Character sex) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.height = height;
        this.birth = birth;
        this.sex = sex;
    }

    public Long getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Double getHeight() {
        return height;
    }

    public void setHeight(Double height) {
        this.height = height;
    }

    public Date getBirth() {
        return birth;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }

    public Character getSex() {
        return sex;
    }

    public void setSex(Character sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", height=" + height +
                ", birth=" + birth +
                ", sex=" + sex +
                '}';
    }
}

③java下utils包的工具类SqlSessionUtils,用来连接数据库的

package com.bjpowernode.mybatis.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;

public class SqlSessionUtils {
    // 工具类的构造方法一般都是私有化的,防止创建对象
    public SqlSessionUtils() {
    }
    // SqlSessionFactory对象,一个SqlSessionFactory对应一个environment,一个environment对应一个数据库
    private static SqlSessionFactory sqlSessionFactory;
    static {
        try {
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-config.xml"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    // 定义一个方法,获取会话对象
    public static SqlSession openSession(){
        return sqlSessionFactory.openSession();
    }

}

① resources下mapper包的StudetMapper.xml,编写sql语句(三兄弟之二)

<?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.bjpowernode.mybatis.mapper.StudentMapper">
</mapper>

 ②resource下的jdbc.properties,连接数据库的配置信息

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=123

 ③resource下的logback.xml,日志配置文件

<?xml version="1.0" encoding="UTF-8"?>

<configuration debug="false">
    <!--定义⽇志⽂件的存储地址-->
    <property name="LOG_HOME" value="/home"/>
    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示⽇期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:⽇志消息,%n是换⾏符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

    <!--mybatis log configure-->
    <logger name="com.apache.ibatis" level="TRACE"/>
    <logger name="java.sql.Connection" level="DEBUG"/>
    <logger name="java.sql.Statement" level="DEBUG"/>
    <logger name="java.sql.PreparedStatement" level="DEBUG"/>

    <!-- ⽇志输出级别,logback⽇志级别包括五个:TRACE < DEBUG < INFO < WARN < ERROR -->
    <root level="DEBUG">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE"/>
    </root>
</configuration>

④resource下的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>
        <package name="com.bjpowernode.mybatis.pojo"/>
    </typeAliases>
    <environments default="dev">
        <environment id="dev">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <package name="com.bjpowernode.mybatis.mapper"/>
    </mappers>
</configuration>

① test包下的java的StudeMapperTest,编写测试方法,用来测试(三兄弟之三)

package com.bjpowernode.mybatis.test;

public class StudentMapperTest {
}

(3)MyBatis参数之单个参数Long类型

需求:根据id查、根据name查、根据birth查、根据sex查

三兄弟之一:StudentMapper接口,编写方法

package com.bjpowernode.mybatis.mapper;

import com.bjpowernode.mybatis.pojo.Student;
import java.util.*;

public interface StudentMapper {
    // 当接口中的方法的参数只有一个(单个参数),并且参数的类型是简单类型
    List<Student> selectById(Long id);
    List<Student> selectByName(String name);
    List<Student> selectByBirth(Date birth);
    List<Student> selectBySex(Character sex);

}

三兄弟之二:StudentMapper.xml文件,编写sql语句

①实际上select标签还有一个属性paraterType,作用是告诉MyBatis框架,方法的参数类型是什么;也可以省略不写,因为MyBatis框架自身带有类型自动推断机制!

②注意:MyBatis框架实际上也内置了很多别名,可以参考开发手册配置_MyBatis中文网 

,例如:java.lang.Long的别名就是long

③注意:实际上#{}里面除了写变量名,也有其它属性,例如:

javaType用来指定类型 、jdbcType用来指定在数据库表中的类型,都可以省略!

④总结:javaType、jdbcType、parameterType这些参数都是可以省略的,加上以后可能效率会更高一些,因为省去了MyBatis去自动类型推断!

<?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.bjpowernode.mybatis.mapper.StudentMapper">
    <!--<select id="selectById" resultType="student" parameterType="long">-->
    <select id="selectById" resultType="student">
        select * from t_student where id = #{id};
    </select>

    <select id="selectByName" resultType="student">
        <!--select * from t_student where name = #{name,javaType=String,jdbcType=VARCHAR};-->
        select * from t_student where name = #{name};
    </select>

    <select id="selectByBirth" resultType="student">
        select * from t_student where birth = #{birth};
    </select>

    <select id="selectBySex" resultType="student">
        select * from t_student where sex = #{sex};
    </select>
</mapper>

三兄弟之三:StudentMappeTest类,用来编写测试类

package com.bjpowernode.mybatis.test;

import com.bjpowernode.mybatis.mapper.StudentMapper;
import com.bjpowernode.mybatis.pojo.Student;
import com.bjpowernode.mybatis.utils.SqlSessionUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * @Author:朗朗乾坤
 * @Package:com.bjpowernode.mybatis.test
 * @Project:mybatis
 * @name:StudentMapperTest
 * @Date:2023/1/4 16:33
 */
public class StudentMapperTest {
    @Test
    public void testSelectById(){
        SqlSession sqlSession = SqlSessionUtils.openSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        List<Student> students = mapper.selectById(1L);
        students.forEach(student -> System.out.println(student));
        sqlSession.close();
    }

    @Test
    public void testSelectByName(){
        SqlSession sqlSession = SqlSessionUtils.openSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        List<Student> students = mapper.selectByName("张三");
        students.forEach(student -> System.out.println(student));
        sqlSession.close();
    }

    @Test
    public void testSelectByBirth() throws Exception{
        SqlSession sqlSession = SqlSessionUtils.openSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);

        // 把一个字符串转化为Date类型
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date birth = sdf.parse("1999-06-04");

        List<Student> students = mapper.selectByBirth(birth);
        students.forEach(student -> System.out.println(student));
        sqlSession.close();
    }

    @Test
    public void testSelectBySex(){
        SqlSession sqlSession = SqlSessionUtils.openSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);

        // 把一个char类型转化为包装类Character
        Character sex = Character.valueOf('男');

        List<Student> students = mapper.selectBySex(sex);
        students.forEach(student -> System.out.println(student));
        sqlSession.close();
    }
}

2. Map参数

三兄弟之一:StudentMapper接口,编写方法

传的参数是一个Map集合:key是String类型,value是具体的值

package com.bjpowernode.mybatis.mapper;

import com.bjpowernode.mybatis.pojo.Student;

import java.util.*;

public interface StudentMapper {
  
    // 保存学生信息,通过Map参数(单个参数),并且参数的类型不是简单类型,是Map集合
    int insertStringByMap(Map<String,Object> map);

}

三兄弟之二:StudentMapper.xml文件,编写sql语句

注意:这里参数的变量名必须是Map集合的key!

<?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.bjpowernode.mybatis.mapper.StudentMapper">
    
    <insert id="insertStringByMap">
        insert into t_student(id,name,age,height,birth,sex)
        values(null,#{name},#{age},#{height},#{birth},#{sex});
    </insert>
</mapper>

三兄弟之三:StudentMappeTest类,用来编写测试类

需要创建一个Map集合,然后往这个集合里面存数据,最后把这个集合传进去。

注:一定要手动提交,MyBatis是需要手动提交数据的!

package com.bjpowernode.mybatis.test;

import com.bjpowernode.mybatis.mapper.StudentMapper;
import com.bjpowernode.mybatis.pojo.Student;
import com.bjpowernode.mybatis.utils.SqlSessionUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class StudentMapperTest {
    
    @Test
    public void testInsertStringByMap(){
        SqlSession sqlSession = SqlSessionUtils.openSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);

        // 创建一个Map集合,往Map集合当中存数据
        Map<String,Object> map = new HashMap<>();
        map.put("name","王五");
        map.put("age",20);
        map.put("height",1.81);
        map.put("birth",new Date());
        map.put("sex",'男');

        mapper.insertStringByMap(map);
        sqlSession.commit();
        sqlSession.close();
    }
}

3. 实体类参数(PoJo类)

所谓的实体类,就是前面我们写的Student类,用来封装对象的

三兄弟之一:StudentMapper接口,编写方法

把Student类作为参数传过去!

package com.bjpowernode.mybatis.mapper;

import com.bjpowernode.mybatis.pojo.Student;

import java.util.*;

public interface StudentMapper {
    // 保存学生信息,通过PoJo参数(单个参数),并且参数的类型不是简单类型,是Student类
    int insertStudentByPOJO(Student student);
}

三兄弟之二:StudentMapper.xml文件,编写sql语句

注意:#{} ⾥⾯写的是属性名字;这个属性名其本质上是:set/get⽅法名去掉set/get之后全部小写的名字;不仅仅只是属性名,要有对应的setter和getter方法!

<?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.bjpowernode.mybatis.mapper.StudentMapper">
    <insert id="insertStudentByPOJO">
        insert into t_student(id,name,age,height,birth,sex)
        values(null,#{name},#{age},#{height},#{birth},#{sex});
    </insert>
</mapper>

三兄弟之三:StudentMappeTest类,用来编写测试类

需要创建一个student对象,调用无参或者有参构造方法都可以,并给每个属性赋上值!最后把这个student对象传过去!

package com.bjpowernode.mybatis.test;

import com.bjpowernode.mybatis.mapper.StudentMapper;
import com.bjpowernode.mybatis.pojo.Student;
import com.bjpowernode.mybatis.utils.SqlSessionUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class StudentMapperTest {
    @Test
    public void testInsertStudentByPOJO(){
        SqlSession sqlSession = SqlSessionUtils.openSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);

        // 创建一个Student类
        Student student = new Student();
        // 存放数据
        student.setName("赵六");
        student.setAge(22);
        student.setHeight(1.7);
        student.setBirth(new Date());
        student.setSex('男');

        mapper.insertStudentByPOJO(student);
        sqlSession.commit();
        sqlSession.close();
    }
}

4. 多参数

三兄弟之一:StudentMapper接口,编写方法

所谓的多参数就是根据多个字段进行查询,例如:通过name和sex这两个字段进行查询!

package com.bjpowernode.mybatis.mapper;

import com.bjpowernode.mybatis.pojo.Student;

import java.util.*;

public interface StudentMapper {
    // 根据name和sex查询Student信息
    List<Student> selectByNameAndSex(String name,Character sex);
}

三兄弟之二:StudentMapper.xml文件,编写sql语句

如果是多个参数的话,MyBatis底层是怎样做的呢?MyBatis框架会自动创建一个Map集合,并且Map集合是这种方式存储参数的:

①第一种:map.put("arg0",name)和map.put("arg1",sex);下标是从0开始

②第二种:map.put("param1",name)和map.put("param2",sex);下标从1开始

注意:也可以两个参数混合着用;对于低版本的MyBatis中,使用的是:#{0}和#{1}形式...

<?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.bjpowernode.mybatis.mapper.StudentMapper">
    <select id="selectByNameAndSex" resultType="student">
        select * from t_student
        <!--where name = #{arg0} and sex = #{arg1};-->
        <!--where name = #{arg0} and sex = #{param2};-->
        where name = #{param1} and sex = #{param2};
    </select>
</mapper>

三兄弟之三:StudentMappeTest类,用来编写测试类

按照变量对应的类型,进行传参!

package com.bjpowernode.mybatis.test;

import com.bjpowernode.mybatis.mapper.StudentMapper;
import com.bjpowernode.mybatis.pojo.Student;
import com.bjpowernode.mybatis.utils.SqlSessionUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class StudentMapperTest {
    @Test
    public void testSelectByNameAndSex(){
        SqlSession sqlSession = SqlSessionUtils.openSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        List<Student> students = mapper.selectByNameAndSex("张三", '男');
        students.forEach(student -> System.out.println(student));
        sqlSession.close();
    }
}

5. @Param注解(命名参数)

可以不使⽤arg0、arg1, param1、param2吗?这个map集合的key我们可以⾃定义当然。使⽤ @Param注解即可,这样可以增强可读性。

三兄弟之一:StudentMapper接口,编写方法

编写sql语句时,使用@Param注解的方式对参数进行重命名,其中属性名是value可以省略;重命名后MyBatis框架底层的实现原理:map.put("name",name),map.put("sex",sex)

package com.bjpowernode.mybatis.mapper;

import com.bjpowernode.mybatis.pojo.Student;
import org.apache.ibatis.annotations.Param;

import java.util.*;

public interface StudentMapper {
    // 使用@Param注解的方式重命名
    List<Student> selectByNameAndSexParam(@Param(value = "name") String name,
    @Param("sex") Character sex);
}

三兄弟之二:StudentMapper.xml文件,编写sql语句

使用@Param注解重名后,只有arg0、arg1这种方式失效了,还是有两种存储方式:

第一种:map.put("name",name)和map.put("sex",sex);使用自己定义的名字作为key

第二种:map.put("param1",name)和map.put("param2",sex);这种方式还是能使用

<?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.bjpowernode.mybatis.mapper.StudentMapper">
    <select id="selectByNameAndSexParam" resultType="student">
        select * from t_student
        <!--where name = #{param1} and sex = #{param2};-->
        where name = #{name} and sex = #{sex};
    </select>
</mapper>

三兄弟之三:StudentMappeTest类,用来编写测试类

package com.bjpowernode.mybatis.test;

import com.bjpowernode.mybatis.mapper.StudentMapper;
import com.bjpowernode.mybatis.pojo.Student;
import com.bjpowernode.mybatis.utils.SqlSessionUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class StudentMapperTest {
    @Test
    public void testSelectByNameAndSexParam(){
        SqlSession sqlSession = SqlSessionUtils.openSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        List<Student> students = mapper.selectByNameAndSexParam("张三", '男');
        students.forEach(student -> System.out.println(student));
        sqlSession.close();
    }
}

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

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

相关文章

RSA加密算法

RSA算法原理 非对称加密算法&#xff0c;有公钥和私钥之分通过公钥加密的数据必须通过私钥才能解密&#xff0c;反之&#xff0c;私钥加密的数据需要通过公钥解私钥能生成公钥&#xff0c;当公钥不能推导出私钥 欧拉函数 指小于n的正整数中与n互质的数的总个数&#xff08;记…

基于蜣螂算法优化的核极限学习机(KELM)回归预测-附代码

基于蜣螂算法优化的核极限学习机(KELM)回归预测 文章目录基于蜣螂算法优化的核极限学习机(KELM)回归预测1.KELM理论基础2.回归问题数据处理4.基于蜣螂算法优化的KELM5.测试结果6.Matlab代码摘要&#xff1a;本文利用蜣螂算法对核极限学习机(KELM)进行优化&#xff0c;并用于回归…

C 语言零基础入门教程(十九)

C 文件读写 上一章我们讲解了 C 语言处理的标准输入和输出设备。本章我们将介绍 C 程序员如何创建、打开、关闭文本文件或二进制文件。 一个文件&#xff0c;无论它是文本文件还是二进制文件&#xff0c;都是代表了一系列的字节。C 语言不仅提供了访问顶层的函数&#xff0c;也…

激光SLAM闭环方案总结

高质量的闭环是建图必不可少的元素之一。而激光SLAM不像视觉那样可以提供细致的纹理信息&#xff0c;因此常常出现误检和漏检的情况。最近&#xff0c;看了不少关于激光SLAM闭环方法的论文&#xff0c;总结一下。一、构建点云的描述子1、Scan Context&#xff08;2018&#xff…

抗抑郁药如何帮助细菌抵抗抗生素

谷禾健康 迄今为止最全面的全球抗菌素耐药性 (AMR) 研究发现&#xff0c;由耐药菌引起的感染是所有年龄段人群死亡的主要原因之一。 22年发表在《柳叶刀》杂志上的分析估计&#xff0c;2019 年有 495 万人死于细菌性 AMR 发挥作用的疾病。其中&#xff0c;127 万人死亡是 AMR 的…

如何使用matlab对时间序列进行ADF检验?|adftest函数(获取不同显著性下的统计结果)

ADF检验 迪基富勒检验&#xff08;ADF检验&#xff09;是一种常见的统计检验&#xff0c;用于检验给定时间序列是否平稳。在分析序列的平稳性时&#xff0c;它是最常用的统计检验之一。matlab中提供了函数adftest可以完成该检验&#xff0c;本文重点介绍该函数的用法。 Matla…

创建表和管理表

文章目录基础知识一条数据存储的过程标识符命名规则MySQL中的数据类型创建和管理数据库创建数据库使用数据库修改数据库删除数据库创建表创建方式1创建方式2查看数据表结构修改表追加一个列修改一个列重命名一个列删除一个列重命名表删除表清空表内容拓展拓展1&#xff1a;阿里…

setState的使用+React更新机制+events+受控和非受控组件

setState是异步更新 总结&#xff1a; 1.setState设计为异步&#xff0c;可以显著的提升性能 如果每次调用 setState都进行一次更新&#xff0c;那么意味着render函数会被频繁调用&#xff0c;界面重新染&#xff0c;这样效率是很低的&#xff1b;最好的办法应该是获取到多个更…

单片机开发---ESP32S3移植lvgl+触摸屏

书接上文 《单片机开发—ESP32-S3模块上手》 本章内容 熟悉一下ESP32S3的开发&#xff0c;修改范例程序的lvgl&#xff0c;使之能够匹配现在的显示屏。 具体工作大概为通过SPI接口连接一块SPI串口屏幕&#xff0c;并且适配lvgl&#xff0c;最后加上触摸屏作为输入。 屏幕 …

【计算机网络】第一章 计算机网络结构

文章目录第一章 体系结构1.1 计算机网络概述1.1.1 计算机网络的概念1.1.2 计算机网络的组成1.1.3 计算机网络的功能1.1.4 计算机网络的分类*1.1.5 计算机网络的标准化工作1.1.6 计算机网络的性能指标1.2 计算机网络体系结构与参考模型1.2.1 计算机网络分层结构1.2.2 计算机网络…

#8链表的中间结点#

链表的中间结点 1题目链接 链接 2思路 思路1:遍历一遍 计数 然后/2 再遍历一遍 思路2:slow fast指针 slow指针一次走1步 fast指针一次走2步 当fast为空的时候 slow的位置就是中间结点 奇数个: 1 2 3 4 5 fast走完第三次为空 slow走完第三次就是3 偶数个: 1 2 3 4 5 6 fast走完…

智慧型物业管理系统功能解析

随着当前社会经济的发展与科技发达&#xff0c;物业管理系统化已经成为常态了。尤其是随着智慧物业管理系统功能越来越多&#xff0c;人们对智慧物业管理系统的依赖就更明显了。毕竟系统真的可以给生活带来很多的便利之处&#xff1a; 业主可通过该系统查询自己住房的详细信息…

“揾”钱,最紧要系稳

我是腾讯安全的樊自磊。我们团队在腾讯主要负责金融风控产品&#xff0c;解决相关产品交付和服务维护工作&#xff0c;像国内知名大型国有银行、城商行、互联网金融公司等&#xff0c;都是我们的服务对象。今年春节&#xff0c;我和我的的同事们都在深圳为金融行业的网络安全进…

连续多输入多输出对象最优控制

连续多输入多输出对象最优控制 控制对象:平面二自由度机械臂 动力学模型: M ( q ) q + C ( q , q ) + G ( q ) =

【HDRP】自动生成的光照探针——Probe Volume

HDRP中&#xff0c;增加了Probe Volume&#xff0c;可代替旧版的光照探针Light Probe Group。 使用此功能的物体&#xff0c;不再需要光照贴图。 一、优缺点比较 详细说明可查看官方说明。 1.Probe Volume按像素而不是按对象发光&#xff0c;这意味着 HDRP 可以更准确地照亮…

软件著作权申请材料

(一)按要求填写的软件申请表; (二)软件的鉴别材料; 1、软件的操作手册&#xff1a;图文并茂的详细介绍软件的各功能&#xff0c;文档应不超过60页&#xff0c;超过60页应当删除中间内容&#xff0c;保留前后30页&#xff1b; 2、软件的源代码&#xff1a;每页不少于50行&…

Go第 15 章 :单元测试

Go第 15 章 &#xff1a;单元测试 15.1 先看一个需求 在我们工作中&#xff0c;我们会遇到这样的情况&#xff0c;就是去确认一个函数&#xff0c;或者一个模块的结果是否正确&#xff0c; 如&#xff1a; 15.2 传统的方法 15.2.1 传统的方式来进行测试 在 main 函数中&a…

k8s集群调度、亲和性、污点和容忍、pod状态、排障步骤

目录 一、调度约束 二、创建资源工作流程 三、Scheduler调度过程 1.Scheduler调度中考虑的问题 2.调度过程的步骤 3.预算策略&#xff08;predicate&#xff09;的常见算法 4.优选策略&#xff08;priorities&#xff09;的优先级 四、Pod 调度到指定Node节点 1.nodeNa…

微服务的服务拆分与远程调用

​ 哈喽大家好呀&#xff01;好久不见甚是想念&#xff0c;给大家拜个年啦~应该不晚吧(ಥ_ಥ) 放假在家确实是容易躺平&#xff0c;有心而无力呀哈哈哈哈。但是闲着也是闲着&#xff0c;最近学了学微服务相关知识&#xff0c;马上也快毕业了就更到抓紧了 今天我来说说关于微服…

医疗影像容积重建-物体坐标系和渲染图像坐标系

1 物体坐标系&#xff08;mm为单位&#xff0c;并三方向都是各向同性的情况)将所有数据的正中间&#xff08;这里所有的数据&#xff0c;是指各体素按照实际位置在空间排列&#xff09;&#xff0c;作为物体坐标系的原点&#xff0c;以图像的image orientation X方向&#xff0…