MyBatis(环境配置+基本CRUD)

文章目录

    • 1.基本介绍
        • 1.为什么需要MyBatis?
        • 2.MyBatis介绍
        • 3.MyBatis工作示意图
        • 4.MyBatis的优势
    • 2.快速入门
        • 文件目录
        • 1.需求分析
        • 2.数据库表设计
        • 3.父子模块环境配置
          • 1.创建maven父项目
          • 2.删除父项目的src目录
          • 3.pom.xml文件
            • 文件解释
          • 4.创建子模块
            • 1.新建一个Module
            • 2.创建一个子模块
            • 3.子模块与父模块的pom.xml文件解析
        • 4.MyBatis配置
          • 1.pox.xml导入依赖
          • 2.mybatis-config.xml配置mybatis配置文件(名字任意,放在resources下)
          • 3.Monster.java映射表结构的bean
          • 4.Mapper的配置
            • 1.MonsterMapper.java操作Monster表的接口
            • 2.MonsterMapper.xml与MonsterMapper相对应的xml
          • 5.修改mybatis-config.xml配置要管理的Mapper.xml文件
          • 6.MyBatisUtils.java工具类获取SqlSession
          • 7.测试
            • 1.src下创建test目录并创建一个java文件夹
            • 2.MonsterMapperTest.java测试初始化
            • 3.报错找不到文件
          • 8.找不到文件解决方式
            • 1.在父模块的pom.xml文件中配置build项目时要拷贝的文件类型
            • 2.clean一下maven项目然后rebuild(不一定好使)
            • 3.切换maven路径
            • 4.再clean一下maven项目然后rebuild
            • 5.执行测试代码
    • 3.MyBatis的CRUD
        • 1.添加
          • 1.代码实例
          • 2.报错ssl问题
        • 2.返回自增长的id(适用于update和insert)
          • 1.修改MonsterMapper.xml
          • 2.修改测试代码
          • 3.结果展示
        • 3.删除
          • 1.MonsterMapper.java添加方法
          • 2.MonsterMapper.xml配置删除方法
          • 3.测试代码
        • 4.修改
          • 1.MonsterMapper.java添加方法
          • 2.MonsterMapper.xml配置修改方法
          • 3.测试代码
        • 5.配置类型别名mybatis-config.xml
        • 6.查询单条记录
          • 1.MonsterMapper.java添加方法
          • 2.MonsterMapper.xml配置查询方法
          • 3.测试代码
        • 7.查询多条记录
          • 1.MonsterMapper.java添加方法
          • 2.MonsterMapper.xml配置查询方法
          • 3.测试代码
    • 4.日志输出配置
        • 1.需求分析
        • 2.解决方案:日志输出
          • 1.mybatis-config.xml最前面配置日志
          • 2.结果展示
        • 3.本阶段完整配置文件
          • 1.MonsterMapper.xml
          • 2.mybatis-config.xml
          • 3.父模块pom.xml

1.基本介绍

1.为什么需要MyBatis?

image-20240301111438891

2.MyBatis介绍

image-20240301111843698

3.MyBatis工作示意图

image-20240301125616637

4.MyBatis的优势

image-20240301130054693

2.快速入门

文件目录

image-20240301193629499

1.需求分析

image-20240301130246382

2.数据库表设计
CREATE DATABASE mybatis
use mybatis

CREATE TABLE monster(
	`id` INT NOT NULL auto_increment,
	`age` INT NOT NULL,
	`birthday` DATE DEFAULT NULL,
	`email` VARCHAR(255) NOT NULL, 
	`gender` TINYINT NOT NULL,
	`name` VARCHAR(255) NOT NULL,
	`salary` DOUBLE NOT NULL,
	PRIMARY KEY (`id`)
)
3.父子模块环境配置
1.创建maven父项目

image-20240301132101162

2.删除父项目的src目录

image-20240301132431047

3.pom.xml文件
文件解释

image-20240301132955818

4.创建子模块
1.新建一个Module

image-20240301134544021

2.创建一个子模块
  • parent应该是上面的mybatis父模块
  • Archetype设置成最基础的配置

image-20240301134719950

3.子模块与父模块的pom.xml文件解析

image-20240301135913041

image-20240301140153077

4.MyBatis配置
1.pox.xml导入依赖
<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.example</groupId>
  <artifactId>mybatis</artifactId>
  <version>1.0-SNAPSHOT</version>
  <name>Archetype - mybatis</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.49</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.7</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <!--如果设置scope为test,则只能在test包下使用-->
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
2.mybatis-config.xml配置mybatis配置文件(名字任意,放在resources下)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <!--配置事务管理器-->
            <transactionManager type="JDBC"/>
            <!--配置数据源-->
            <dataSource type="POOLED">
                <!--配置驱动-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <!--配置连接url-->
                <!--
                1.jdbc:mysql:协议
                2.127.0.0.1:3306:指定连接mysql的ip+端口
                3.mybatis:连接的db
                4.useSSL:使用安全连接
                5.&amp;:表示&
                6.useUnicode=true:使用unicode,防止编码错误
                7.characterEncoding=UTF-8:字符集使用utf-8
                -->
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <!--用户名-->
                <property name="username" value="root"/>
                <!--密码-->
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <!--<mappers>-->
    <!--    <mapper resource="org/mybatis/example/BlogMapper.xml"/>-->
    <!--</mappers>-->
</configuration>

3.Monster.java映射表结构的bean
  • 属性名与表的列名保持一致
  • 需要有无参构造器(反射使用)
package com.sun.entity;

import java.util.Date;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class Monster {
    private Integer id;
    private Integer age;
    private Date birthday;
    private String email;
    private Integer gender;
    private String name;
    private Double salary;

    //无参构造器
    public Monster() {
    }

    public Monster(Integer id, Integer age, Date birthday, String email, Integer gender, String name, Double salary) {
        this.id = id;
        this.age = age;
        this.birthday = birthday;
        this.email = email;
        this.gender = gender;
        this.name = name;
        this.salary = salary;
    }

    public Integer getId() {
        return id;
    }

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

    public Integer getAge() {
        return age;
    }

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

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getGender() {
        return gender;
    }

    public void setGender(Integer gender) {
        this.gender = gender;
    }

    public String getName() {
        return name;
    }

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

    public Double getSalary() {
        return salary;
    }

    public void setSalary(Double salary) {
        this.salary = salary;
    }

    @Override
    public String toString() {
        return "Monster{" +
                "id=" + id +
                ", age=" + age +
                ", birthday=" + birthday +
                ", email='" + email + '\'' +
                ", gender=" + gender +
                ", name='" + name + '\'' +
                ", salary=" + salary +
                '}';
    }
}

4.Mapper的配置
1.MonsterMapper.java操作Monster表的接口
package com.sun.mapper;

import com.sun.entity.Monster;

/**
 * 这个接口用于声明操作monster表的方法
 *
 * @author 孙显圣
 * @version 1.0
 */
public interface MonsterMapper {
    public void addMonster(Monster monster);
}

2.MonsterMapper.xml与MonsterMapper相对应的xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--指定该xml文件和哪个接口对应-->
<mapper namespace="com.sun.mapper.MonsterMapper">
    <!--addMonster是接口的方法名,parameterType是接口的参数类型-->
    <insert id="addMonster" parameterType="com.sun.entity.Monster">
        <!--#{age}, #{birthday}, #{email}, #{gender}, #{name}, #{salary}是从传入的Monster对象中获取的-->
        INSERT INTO `monster`(`id`,`age`,`birthday`,`email`,`gender`,`name`,`salary`)
        VALUES(NULL, #{age}, #{birthday}, #{email}, #{gender}, #{name}, #{salary})
    </insert>
</mapper>
5.修改mybatis-config.xml配置要管理的Mapper.xml文件
    <!--配置需要管理的Mapper.xml文件-->
    <mappers>
        <mapper resource="com/sun/mapper/MonsterMapper.xml"/>
    </mappers>

image-20240301160743861

6.MyBatisUtils.java工具类获取SqlSession
package com.util;

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;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class MyBatisUtils {
    private static SqlSessionFactory sqlSessionFactory;

    //使用静态代码块初始化SqlSessionFactory
    static {
        try {
            //获取Mybatis配置文件的输入流
            String resource = "mybatis-config.xml";
            //默认是从类路径下获取资源,在maven中指的就是resources文件夹下,会映射到实际的工作目录
            InputStream resourceAsStream = Resources.getResourceAsStream(resource);
            //读取资源获取SessionFactory,可以理解为连接池
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    //编写方法返回SqlSession
    public static SqlSession getSqlSession() {
        return sqlSessionFactory.openSession();
    }
}

  • 注意这里的Resources不要选错了!

image-20240301161439766

7.测试
1.src下创建test目录并创建一个java文件夹

image-20240301162733504

2.MonsterMapperTest.java测试初始化
import com.sun.mapper.MonsterMapper;
import com.util.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Before;
import org.junit.Test;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class MonsterMapperTest {
    //两个属性
    private SqlSession sqlSession;
    private MonsterMapper monsterMapper;

    //编写方法完成初始化
    @Before //标注了Before之后表示了在执行目标测试方法前会执行该方法
    public void init() {
        //获取到sqlSession
        sqlSession = MyBatisUtils.getSqlSession();
        //获取到MonsterMapper对象
        monsterMapper = sqlSession.getMapper(MonsterMapper.class);
        System.out.println(monsterMapper.getClass());
    }

    @Test
    public void t1() {
        System.out.println("t1");
    }

}

3.报错找不到文件

image-20240301164140989

image-20240301164219954

8.找不到文件解决方式
1.在父模块的pom.xml文件中配置build项目时要拷贝的文件类型
  <!--在父模块中的pom.xml文件中配置在build的时候要扫描的文件,解决某些类型文件拷贝到target目录失败的问题-->
  <build>
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <!--在java文件夹下的多级目录下的xml文件-->
          <include>**/*.xml</include>
        </includes>
      </resource>
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <!--在resources文件夹下的多级目录下的xml文件和properties文件-->
          <include>**/*.xml</include>
          <include>**/*.properties</include>
        </includes>
      </resource>
    </resources>
  </build>
2.clean一下maven项目然后rebuild(不一定好使)

3.切换maven路径

image-20240301170153831

4.再clean一下maven项目然后rebuild

成功!

image-20240301170243802

5.执行测试代码

可以看出返回的是一个针对接口的代理对象,所以底层是使用的代理对象来调用接口的方法

image-20240301170303814

3.MyBatis的CRUD

1.添加
1.代码实例
import com.sun.entity.Monster;
import com.sun.mapper.MonsterMapper;
import com.util.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Before;
import org.junit.Test;

import java.util.Date;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class MonsterMapperTest {
    //两个属性
    private SqlSession sqlSession; //相当于连接
    private MonsterMapper monsterMapper;

    //编写方法完成初始化
    @Before //标注了Before之后表示了在执行目标测试方法前会执行该方法
    public void init() {
        //获取到sqlSession
        sqlSession = MyBatisUtils.getSqlSession();
        //获取到MonsterMapper对象
        monsterMapper = sqlSession.getMapper(MonsterMapper.class);
        System.out.println(monsterMapper.getClass());
    }

    //添加信息
    @Test
    public void add() {
        for (int i = 0; i < 2; i ++) {
            Monster monster = new Monster
                    (null, 10 + i, new Date(), "sun@qq.com", 0, "孙显圣", 10.0 + i);
            //代理对象执行接口的方法
            monsterMapper.addMonster(monster);
        }
        //如果是增删改还要提交一下事务
        if (sqlSession != null) {
            sqlSession.commit();
            //将连接放回连接池
            sqlSession.close();
        }
        System.out.println("成功");

    }

}

2.报错ssl问题

将mybatis-config.xml中的useSSL改成false

image-20240301173401047

2.返回自增长的id(适用于update和insert)
1.修改MonsterMapper.xml

image-20240301182943568

2.修改测试代码

image-20240301183117303

3.结果展示

image-20240301183132142

3.删除
1.MonsterMapper.java添加方法
    public void delMonster(Integer id);
2.MonsterMapper.xml配置删除方法
    <!--parameterType如果是java的数据类型可以直接简写-->
    <delete id="delMonster" parameterType="Integer">
        <!--这里可以直接使用形参名来取出形参-->
        DELETE FROM `monster` where id = #{id}
    </delete>
3.测试代码
    //删除指定id的信息
    @Test
    public void delMonster() {
        monsterMapper.delMonster(1);
        //如果是增删改还要提交一下事务
        if (sqlSession != null) {
            sqlSession.commit();
            //将连接放回连接池
            sqlSession.close();
        }
        System.out.println("删除成功");
    }
4.修改
1.MonsterMapper.java添加方法
    public void updateMonster(Monster monster);
2.MonsterMapper.xml配置修改方法
    <update id="updateMonster" parameterType="com.sun.entity.Monster" useGeneratedKeys="true" keyProperty="id">
        UPDATE `monster` SET
        `age` = #{age}, `birthday` = #{birthday},
        `email` = #{email}, `name` = #{name}, `salary` = #{salary}
        WHERE `id` = #{id}
    </update>
3.测试代码
    //修改信息
    @Test
    public void updateMonster() {
        Monster monster = new Monster
                (null, 10, new Date(), "sun@qq.com", 0, "孙显圣", 10.0);
        monsterMapper.updateMonster(monster);
        //如果是增删改还要提交一下事务
        if (sqlSession != null) {
            sqlSession.commit();
            //将连接放回连接池
            sqlSession.close();
        }
        System.out.println("修改成功");
    }
5.配置类型别名mybatis-config.xml
    <!--配置类型别名-->
    <typeAliases>
        <!--这样配置完了就可以直接使用Monster来表示Monster类型的全类名了-->
        <typeAlias type="com.sun.entity.Monster" alias="Monster"/>
    </typeAliases>
6.查询单条记录
1.MonsterMapper.java添加方法
    public Monster getMonsterById(Integer id);
2.MonsterMapper.xml配置查询方法
    <select id="getMonsterById" resultType="Monster">
        SELECT * FROM `monster` WHERE id = #{id}
    </select>
3.测试代码
    //查询单条记录
    @Test
    public void getMonsterById() {
        Monster monsterById = monsterMapper.getMonsterById(3);
        System.out.println(monsterById);
    }
7.查询多条记录
1.MonsterMapper.java添加方法
    public List<Monster> findAllMonster();
2.MonsterMapper.xml配置查询方法
    <!--注意:即使这里返回的是一个集合,返回类型要是集合中包含的类型,不需要是集合类型-->
    <select id="findAllMonster" resultType="Monster">
        SELECT * FROM `monster`
    </select>
3.测试代码
    //查询多条记录
    @Test
    public void findAllMonster() {
        List<Monster> allMonster = monsterMapper.findAllMonster();
        for (Monster monster : allMonster) {
            System.out.println(monster);
        }
    }

4.日志输出配置

1.需求分析

image-20240301192613753

2.解决方案:日志输出
1.mybatis-config.xml最前面配置日志
    <!--配置mybatis自带的日志,settings需要放到最前面-->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
2.结果展示

image-20240301193144994

3.本阶段完整配置文件
1.MonsterMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--指定该xml文件和哪个接口对应-->
<mapper namespace="com.sun.mapper.MonsterMapper">
    <!--addMonster是接口的方法名,parameterType是接口的参数类型-->
    <insert id="addMonster" parameterType="com.sun.entity.Monster" useGeneratedKeys="true" keyProperty="id">
        <!--#{age}, #{birthday}, #{email} , #{gender}, #{name}, #{salary}是从传入的Monster对象中获取的-->
        INSERT INTO `monster`(`id`,`age`,`birthday`,`email`,`gender`,`name`,`salary`)
        VALUES(NULL, #{age}, #{birthday}, #{email}, #{gender}, #{name}, #{salary})
    </insert>
    <!--parameterType如果是java的数据类型可以直接简写-->
    <delete id="delMonster" parameterType="Integer">
        <!--这里可以直接使用形参名来取出形参-->
        DELETE FROM `monster` where id = #{id}
    </delete>
    <update id="updateMonster" parameterType="Monster" useGeneratedKeys="true" keyProperty="id">
        UPDATE `monster` SET
        `age` = #{age}, `birthday` = #{birthday},
        `email` = #{email}, `name` = #{name}, `salary` = #{salary}
        WHERE `id` = #{id}
    </update>
    <select id="getMonsterById" resultType="Monster">
        SELECT * FROM `monster` WHERE id = #{id}
    </select>
    <!--注意:即使这里返回的是一个集合,返回类型要是集合中包含的类型,不需要是集合类型-->
    <select id="findAllMonster" resultType="Monster">
        SELECT * FROM `monster`
    </select>
</mapper>
2.mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--配置mybatis自带的日志,settings需要放到最前面-->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    <!--配置类型别名-->
    <typeAliases>
        <!--这样配置完了就可以直接使用Monster来表示Monster类型的全类名了-->
        <typeAlias type="com.sun.entity.Monster" alias="Monster"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <!--配置事务管理器-->
            <transactionManager type="JDBC"/>
            <!--配置数据源-->
            <dataSource type="POOLED">
                <!--配置驱动-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <!--配置连接url-->
                <!--
                1.jdbc:mysql:协议
                2.127.0.0.1:3306:指定连接mysql的ip+端口
                3.mybatis:连接的db
                4.useSSL:使用安全连接
                5.&amp;:表示&
                6.useUnicode=true:使用unicode,防止编码错误
                7.characterEncoding=UTF-8:字符集使用utf-8
                -->
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <!--用户名-->
                <property name="username" value="root"/>
                <!--密码-->
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <!--配置需要管理的Mapper.xml文件-->
    <mappers>
        <mapper resource="com/sun/mapper/MonsterMapper.xml"/>
    </mappers>
</configuration>

3.父模块pom.xml
<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.example</groupId>
  <artifactId>mybatis</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>
  <name>Archetype - mybatis</name>
  <url>http://maven.apache.org</url>
  <modules>
    <module>mybatis_quickstart</module>
  </modules>
  <dependencies>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.49</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.7</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <!--如果设置scope为test,则只能在test包下使用-->
      <scope>test</scope>
    </dependency>
  </dependencies>
  <!--在父模块中的pom.xml文件中配置在build的时候要扫描的文件,解决某些类型文件拷贝到target目录失败的问题-->
  <build>
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <!--在java文件夹下的多级目录下的xml文件-->
          <include>**/*.xml</include>
        </includes>
      </resource>
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <!--在resources文件夹下的多级目录下的xml文件和properties文件-->
          <include>**/*.xml</include>
          <include>**/*.properties</include>
        </includes>
      </resource>
    </resources>
  </build>
</project>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

面向对象编程三大特征:封装、继承、多态

封装、继承、多态 1. 封装 1.1 介绍 封装(encapsulation)就是把抽象出的数据 [属性] 和对数据的操作 [方法] 封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作 [方法] ,才能对数据进行操作。 1.2 封装的理解和好处 1) 隐藏实现细节:方法(连接数据库)<…

UE Snap03 启动参数设置

UE Snap03 启动参数设置 UE打包后传入自定义参数及解析。 void UGameInstance::StartGameInstance() {Super::StartGameInstance();UE_LOG(LogTemp, Warning, TEXT("--StartGameInstance--"));FString param;FParse::Value(FCommandLine::Get(), TEXT("-UserN…

Python | Leetcode Python题解之第50题Pow(x,n)

题目&#xff1a; 题解&#xff1a; class Solution:def myPow(self, x: float, n: int) -> float:def quickMul(N):ans 1.0# 贡献的初始值为 xx_contribute x# 在对 N 进行二进制拆分的同时计算答案while N > 0:if N % 2 1:# 如果 N 二进制表示的最低位为 1&#xf…

新手一文掌握 ea怎么注册?ea官网注册账号的详细教程

新手一文掌握 ea怎么注册&#xff1f;ea官网注册账号的详细教程 知名游戏平台EA平台&#xff0c;说到这个各位游戏玩家肯定不会陌生是全球知名的互动娱乐软件公司美国艺电&#xff08;Electronic Arts&#xff09;旗下的游戏平台。该平台主营电子游戏的开发、出版和销售业务&…

万兆以太网MAC设计(10)UDP协议解析以及模块设计

文章目录 前言&#xff1a;UDP报文格式一、UDP模块设计二、仿真总结&#xff1a; 前言&#xff1a;UDP报文格式 参考&#xff1a;https://sunyunqiang.com/blog/udp_protocol/ UDP (User Datagram Protocol) 是常用的传输层协议之一, 它向应用层提供无连接, 不可靠, 尽最大努力…

GitHub Copilot申请和使用

GitHub Copilot申请和使用 文章目录 前言一、申请二、使用总结 前言 之前已经成功进行了Github学生认证&#xff0c;今天邮件通知之前的学生认证已经通过。那么就去进行GitHub Copilot申请和使用。 前面准备&#xff1a;Github学生认证 一、申请 进入github的settings&#x…

上位机图像处理和嵌入式模块部署(树莓派4b开机界面程序自启动)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们学习了如何在树莓派4b上面开发qt&#xff0c;也学习了如何用/etc/rc.local启动控制台程序&#xff0c;那今天我们继续学习一下如何利用树莓…

selenium 4.x 验证码处理(python)

验证码处理 一般情况公司如果涉及web自动化测试需要对验证码进行处理的方式一般有一下几种&#xff1a; 关闭验证码功能&#xff08;开发处理&#xff09;设置万能验证码&#xff08;开发处理&#xff09;使用智能识别库进行验证 通过第三方打码平台识别验证码 1. 跳过验证功…

视频转换过程中的几个基本注意事项

1.迟滞 海康的摄像头迟滞大概会到1秒的量级&#xff0c;一般如果你自己搭个框架做转发&#xff0c;迟滞有时会达到20秒&#xff0c;这是为什么呢&#xff1f;请看例程&#xff1a; class VideoCamera(object):def __init__(self):# 打开系统默认摄像头self.cap cv2.VideoCaptu…

看看大家都在做哪些有趣的项目

最近发现两个比较有趣的项目 1.中国独立开发者项目列表 该项目旨在聚合中国独立开发者的项目&#xff0c;分享开发者们正在进行的工作&#xff0c;项目列表包括网站或 App&#xff0c;并且正在持续更新中 项目分为程序员版和主版面&#xff1a; 程序员版&#xff1a;用户是程…

docker compose安装redis

一、安装准备 在docker hub查看redis镜像版本。查看地址如下&#xff1a; Dockerhttps://hub-stage.docker.com/_/redis/tags 二、拉取docker镜像 我这里用redis:6.2.14版本&#xff0c;先拉取镜像。命令如下&#xff1a; docker pull redis:6.2.14 查看刚刚下载的镜像&am…

M2 Mac mini跑Llama3

前言 在4-19左右&#xff0c;Meta 宣布正式推出下一代开源大语言模型 Llama 3&#xff1b;共包括 80 亿和 700 亿参数两种版本&#xff0c;号称 “是 Llama 2 的重大飞跃”&#xff0c;并为这些规模的 LLM 确立了新的标准。实际上笔者早就体验过&#xff0c;只不过自己电脑没什…

nuxt3使用记录五:禁用莫名其妙的Tailwind CSS(html文件大大减小)

发现这个问题是因为&#xff0c;今天我突然很好奇&#xff0c;我发现之前构建的自动产生的200.html和404.html足足290k&#xff0c;怎么这么大呢&#xff1f;不是很占用我带宽&#xff1f; 一个啥东西都没有的静态页面&#xff0c;凭啥这么大&#xff01;所以我就想着手动把他…

matlab新手快速上手6(引力搜索算法)

本文根据一个较为简单的matlab引力搜索算法框架详细分析蚁群算法的实现过程&#xff0c;对matlab新手友好&#xff0c;源码在文末给出。 引力搜索算法简介&#xff1a; 引力搜索算法是一种启发式优化算法&#xff0c;最初于2009年由伊朗的Esmat Rashedi、Hossein Nezamabadi-p…

MyBatis(注解方式操作)

文章目录 1.注解方式操作文件目录1.快速入门&#xff08;完整步骤&#xff09;1.pom.xml&#xff08;完整&#xff09;2.resources/jdbc.properties外部配置文件&#xff08;根据实际情况修改参数&#xff09;3.在resources/mybatis-config.xml&#xff08;完整&#xff09;中配…

Linux基本指令(3)

目录 时间相关的指令&#xff1a; 1.在显示方面&#xff0c;使用者可以设定欲显示的格式&#xff0c;格式设定为一个加好后接数个标记&#xff0c;其中常用的标记列表如下&#xff1a; 2.在设定时间方面&#xff1a; 3.时间戳&#xff1a; Cal指令&#xff1a; find指令&a…

韩国云主机安装AMP环境要求科普

AMP环境&#xff0c;即Apache、MySQL和PHP的组合&#xff0c;是许多网站开发者和运维人员常用的环境配置。在韩国云主机上安装AMP环境&#xff0c;需要满足一定的要求以确保顺利运行和高效性能。下面我们将对韩国云主机安装AMP环境的要求进行科普。 首先&#xff0c;韩国云主机…

深入探索MySQL锁机制:揭秘死锁原因与RC隔离级别下的事务处理

MySQL锁的类型及死锁概述 在数据库系统中&#xff0c;为了保证事务可以正确地访问数据&#xff0c;防止数据不一致&#xff0c;通常会使用锁机制。MySQL作为广泛使用的数据库之一&#xff0c;其InnoDB存储引擎提供了多种锁类型&#xff0c;主要包括行锁&#xff08;Record Loc…

每日一题(力扣55):跳跃游戏--贪心

刚开始像这道题&#xff0c;想的是这么从当前可以走的那几步中选择一步&#xff0c;所以一坨屎一样的代码 class Solution { public:bool canJump(vector<int>& nums) {int nnums.size();int step0;int u0;int u_max0;int step_size0;int max_size0;int loci0;while…

机器学习-11-卷积神经网络-基于paddle实现神经网络

文章目录 总结参考本门课程的目标机器学习定义第一步&#xff1a;数据准备第二步&#xff1a;定义网络第三步&#xff1a;训练网络第四步&#xff1a;测试训练好的网络 总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍基于paddle实现神经网络。 参考 MNIST 训练_副…