入门MyBatis

文章目录

  • 入门MyBatis
    • MyBatis快速入门
        • 创建user表添加数据
        • 创建模块导入坐标
        • 编写Mybatis核心配置文件
        • 编写SQL映射文件
        • 编码
    • 使用idea编写sql代码
        • 链接数据库
        • 调出console控制台
    • Mapper代理开发
        • 定义与SQL映射文件同名的Mapper接口
        • 编码
    • MyBatis核心配置文件
    • 安装mybatisx插件
    • 配置文件完成增删改查
      • mybatis完成数据库的查询操作
        • 编写接口方法
        • 编写sql
        • 执行方法
        • 参数占位符
        • 多条件查询
          • 散装参数的多条件查询
          • 对象参数的多条件查询
        • 动态条件查询
        • 但条件动态查询
      • mybatis完成数据库的添加操作
        • 在数据库中插入记录行
        • 在数据库中插入记录行同时获取id
      • mybatis完成数据库的修改操作
        • 修改数据库中某一行的所有数据
        • 修改动态字段
      • mybatis完成数据库的删除操作
        • 删除一个
        • 批量删除

入门MyBatis

使用MyBatis框架的作用主要是简化JDBC

JDBC缺点

  1. 注册驱动,获取连接
  2. SQL语句
  3. 手动设置参数
  4. 手动封装结果集

MyBatis优点

  1. 将字符串信息写入配置文件
  2. 免除几乎所有的JDBC代码,以及获取参数和获取结果集的工作

MyBatis快速入门

  1. 创建user表添加数据
  2. 创建模块导入坐标
  3. 编写Mybatis核心配置文件 – 》替换连接信息 解决硬编码问题
  4. 编写SQL映射文件 --》 统一管理sql语句,解决硬编码问题
  5. 编码
    • 定义POJO类
    • 加载核心配置文件,获取SqlSessionFactory对象
    • 获取Session对象,执行SQL语句
    • 释放资源
创建user表添加数据
名称数据类型长度描述
idint10主键自增
usernamevarchar20
passwordvarchar20
gendervarchar1
addrvarchar30
创建模块导入坐标
<dependencies>
        <!--Mybatis 依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>

        <!--Mysql 驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>

        <!--junit 单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>

        <!--添加slf4j 日志api-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.20</version>
        </dependency>

        <!--添加logback-classic依赖-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>

        <!--添加logback-core依赖-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>
</dependencies>
编写Mybatis核心配置文件
<?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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
<!--                数据库的连接信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        
<!--        加载sql的映射文件-->
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>

注意:

数据库连接信息留下备用。

其中的sql映射文件因为和UserMapper.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">

<!--
    namespace :名称空间
    id: sql语句的唯一标识
    resultType: 返回所要包装的类型
-->
<mapper namespace="test">
    <select id="selectAll" resultType="com.example.pojo.User">
        select * from tb_user;
    </select>
</mapper>
编码
  • 定义POJO类

创建pojo目录,创建实体类(.java文件)按照数据库定义所有的变量,定义所有getter和setter方法

  • 加载核心配置文件,获取SqlSessionFactory对象

  • 获取Session对象,执行SQL语句

  • 释放资源

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;
import java.util.List;

import com.example.pojo.User;
/**
 * Mybatis 快速入门
 * */
public class MybatisDemo {
    public static void main(String[] args) throws IOException {
        // 1. 加载核心配置文件,获取SqlSessionFactory对象
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        // 2. 获取Session对象,执行SQL语句
        SqlSession sqlSession = sqlSessionFactory.openSession();

        // 3. 执行sql
        List<User> users = sqlSession.selectList("test.selectAll");

        System.out.println(users);

        // 4. 释放资源
        sqlSession.close();
    }
}

最后把项目run起来,你的项目就可以运行了

使用idea编写sql代码

链接数据库

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

注意:我使用的MySQL版本是8.0.26

调出console控制台

在这里插入图片描述

现在我们就可以愉快地使用idea来写sql语法了

Mapper代理开发

  1. 定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在统一目录下
  2. 设置SQL映射文件的namespace属性为Mapper接口全限定名
  3. 在Mapper接口中定义方法,方法名就是SQL映射文件中的sql语句中的id,并保持参数类型和返回值类型一致
  4. 编码
    • 通过SqlSession 的 getMapper方法获取Mapper接口的代理对象
    • 调用对应方法完成sql的执行
定义与SQL映射文件同名的Mapper接口

在这里插入图片描述

在这里插入图片描述

注意:这里创建目录的时候需要使用/作为分隔符,否则编译的时候创建文件会加上.

在这里插入图片描述

别忘了修改mybatis.config.xml文件

编码
package com.example;

import com.example.mapper.UserMapper;
import com.example.pojo.User;
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;
import java.util.List;

/**
 * Mybatis 代理开发
 * */
public class MybatisDemo2 {
    public static void main(String[] args) throws IOException {
        // 1. 加载核心配置文件,获取SqlSessionFactory对象
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        // 2. 获取Session对象,执行SQL语句
        SqlSession sqlSession = sqlSessionFactory.openSession();

        // 3. 执行sql
        // List<User> users = sqlSession.selectList("test.selectAll");

            // 3.1 获取UserMapper接口的代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = userMapper.selectAll();

        System.out.println(users);

        // 4. 释放资源
        sqlSession.close();
    }

}

在上面mybatis.config.xml文件中可以使用包扫描的方式来读入mapper接口文件

在这里插入图片描述

MyBatis核心配置文件

<?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>

<!--    配置别名-->
    <typeAliases>
        <package name="com.example.pojo"/>
    </typeAliases>

<!--
        environment:配置数据库连接环境信息,可以配置多个,通过default属性切换不同的environment
-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
<!--                数据库的连接信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>

        <environment id="test">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--                数据库的连接信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
<!--        加载sql的映射文件-->
<!--        <mapper resource="com/example/mapper/UserMapper.xml"/>-->
<!--        使用包扫描的方式 Mapper代理 可以获取所有的mapper接口-->
            <package name="com.example.mapper"/>
    </mappers>
</configuration>

安装mybatisx插件

mybatisx插件的优点:方便mybatis中的xml文件与java的mapper接口之间的跳转。

配置文件完成增删改查

mybatis完成数据库的查询操作

步骤:

  1. 编写接口方法
  2. 编写sql
  3. 执行方法
编写接口方法
public interface BrandMapper {
    /**
     * 查询所有
     * */
    public List<Brand> selectAll();
}
编写sql
<mapper namespace="com.example.mapper.BrandMapper">
    <select id="selectAll" resultType="brand">
        select *
        from tb_brand;
    </select>
</mapper>
执行方法
@Test
public void testSelectAll() throws IOException {
    // 1. 获取sqlSessionFactory
    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

    // 2. 获取sqlSession对象
    SqlSession sqlSession = sqlSessionFactory.openSession();

    // 3. 获取mapper接口的代理对象
    BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);

    // 4. 执行方法
    List<Brand> brands = brandMapper.selectAll();
    System.out.println(brands);

    // 5. 释放资源
    sqlSession.close();
}

注意:Springboot里面可以设置命名规则关系映射,可以有效映射出所有的下划线命名和驼峰命名

mybatis里面可以在xml文件中设置resultMap标签一个一个设置驼峰命名

参数占位符

参数占位符:

​ 1. #{} : 会将值替换为?,防止了SQL注入

​ 2. ${} : 拼sql,会存在SQL注入问题

​ 3. 使用时机:

​ * 参数传递的时候 : #{}
​ * 表名或者列名不固定的时候 : ${}

多条件查询
散装参数的多条件查询

brandMapper.xml

<select id="selectByCondition" resultMap="brandResultMap">
        select *
        from tb_brand
        where
            status = #{status}
            and company_name like #{companyName}
            and brand_name like #{brandName}
</select>

BrandMapper.java

public interface BrandMapper {
    /**
     * 条件查询
     * 参数接收:
     *  1. 散装参数:需要使用@Param()。对象属性名称需要和参数占位符一致。
     *  2. 对象参数
     *  3. map集合的参数
     * */
    public List<Brand> selectByCondition(@Param("status") int status, @Param("companyName") String companyName, @Param("brandName") String brandName);
}

MybatisTest.java

@Test
    public void testSelectByCondition() throws IOException {

        // 接收参数
        int status = 1;
        String companyName = "华为";
        String brandName = "华为";

        // 处理参数
        companyName = "%" + companyName + "%";
        brandName = "%" + brandName + "%";

        // 1. 获取sqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        // 2. 获取sqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();

        // 3. 获取mapper接口的代理对象
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);

        // 4. 执行方法
        List<Brand> brands = brandMapper.selectByCondition(status,companyName,brandName);
        System.out.println(brands);

        // 5. 释放资源
        sqlSession.close();
    }
对象参数的多条件查询

BrandMapper.java

public interface BrandMapper {
    /**
     * 条件查询
     * 参数接收:
     *  1. 散装参数:需要使用@Param()
     *  2. 对象参数
     *  3. map集合的参数
     * */

    List<Brand> selectByCondition(Brand brand);
}

MybatisTest.java

@Test
    public void testSelectByCondition() throws IOException {

        // 接收参数
        int status = 1;
        String companyName = "华为";
        String brandName = "华为";

        // 处理参数
        companyName = "%" + companyName + "%";
        brandName = "%" + brandName + "%";

        // 封装对象
        Brand brand = new Brand();
        brand.setStatus(status);
        brand.setBrandName(brandName);
        brand.setCompanyName(companyName);

        // 1. 获取sqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        // 2. 获取sqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();

        // 3. 获取mapper接口的代理对象
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);

        // 4. 执行方法
//        List<Brand> brands = brandMapper.selectByCondition(status,companyName,brandName);
        List<Brand> brands = brandMapper.selectByCondition(brand);
        System.out.println(brands);

        // 5. 释放资源
        sqlSession.close();
    }
动态条件查询

情境:输入条件时,用户是否都会填写内容

<select id="selectByCondition" resultMap="brandResultMap">
    select *
    from tb_brand
    where
        <if test="status != null">
            status = #{status}
        </if>
        <if test="companyName != null and companyName != ''">
            and company_name like #{companyName}
        </if>
        <if test="brandName != null and brandName != ''">
            and brand_name like #{brandName}
        </if>
</select>

if标签:

​ test:逻辑表达式

​ 问题:如果第一个if判断没有值会出现where-and 语法错误

​ 解决1:在每一个if里面加上and,然后在where后面加上and

​ 解决2:where标签替换where关键字

<!--解决方案1-->
<select id="selectByCondition" resultMap="brandResultMap">
    select *
    from tb_brand
    where 1 = 1
        <if test="status != null">
            and status = #{status}
        </if>
        <if test="companyName != null and companyName != ''">
            and company_name like #{companyName}
        </if>
        <if test="brandName != null and brandName != ''">
            and brand_name like #{brandName}
        </if>
</select>
<!--解决方案1-->
<select id="selectByCondition" resultMap="brandResultMap">
    select *
    from tb_brand
    <where>
        <if test="status != null">
            status = #{status}
        </if>
        <if test="companyName != null and companyName != ''">
            and company_name like #{companyName}
        </if>
        <if test="brandName != null and brandName != ''">
            and brand_name like #{brandName}
        </if>
    </where>
</select>
但条件动态查询

BrandMapper.xml

<select id="selectByConditionSingle" resultMap="brandResultMap">
    select *
    from tb_brand
    where
        <choose>
            <when test="status != null">
                status = #{status}
            </when>
            <when test="companyName != null and companyName != ''">
                company_name like #{companyName}
            </when>
            <when test="brandName != null and brandName != ''">
                brand_name like #{brandName}
            </when>
        </choose>
</select>

BrandMapper.java

public interface BrandMapper {
    List<Brand> selectByCondition(Brand brand);
    // 单条件动态查询
    List<Brand> selectByConditionSingle(Brand brand);
}

MybatisTest.java

@Test
public void testSelectByConditionSingle() throws IOException {

    // 接收参数
    int status = 1;
    String companyName = "华为";
    String brandName = "华为";

    // 处理参数
    companyName = "%" + companyName + "%";
    brandName = "%" + brandName + "%";

    // 封装对象
    Brand brand = new Brand();
    brand.setStatus(status);
//        brand.setBrandName(brandName);
//        brand.setCompanyName(companyName);

    // 1. 获取sqlSessionFactory
    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

    // 2. 获取sqlSession对象
    SqlSession sqlSession = sqlSessionFactory.openSession();

    // 3. 获取mapper接口的代理对象
    BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);

    // 4. 执行方法
//        List<Brand> brands = brandMapper.selectByCondition(status,companyName,brandName);
    List<Brand> brands = brandMapper.selectByConditionSingle(brand);
    System.out.println(brands);

    // 5. 释放资源
    sqlSession.close();
}

mybatis完成数据库的添加操作

在数据库中插入记录行

BrandMapper.java

public interface BrandMapper {
    void add(Brand brand);
}

MybatisTest.java

@Test
public void testAdd() throws IOException {
    // 接收参数
    int status = 1;
    String companyName = "波导手机";
    String brandName = "波导";
    String description = "手机中的战斗机";
    int ordered = 100;

    // 封装对象
    Brand brand = new Brand();
    brand.setStatus(status);
    brand.setBrandName(brandName);
    brand.setCompanyName(companyName);
    brand.setDescription(description);
    brand.setOrdered(ordered);

    // 1. 获取sqlSessionFactory
    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

    // 2. 获取sqlSession对象
    SqlSession sqlSession = sqlSessionFactory.openSession(true);

    // 3. 获取mapper接口的代理对象
    BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);

    // 4. 执行方法
    brandMapper.add(brand);

//        // 提交事物
//        sqlSession.commit();

    // 5. 释放资源
    sqlSession.close();
}

BrandMapper.xml

<insert id="add">
    insert into tb_brand(brand_name, company_name, ordered, description, status)
    values (#{brandName},#{companyName},#{ordered},#{description},#{status})
</insert>
在数据库中插入记录行同时获取id

在插入代码中进行修改

MybatisTest.java

Integer id = brand.getId();
System.out.println(id);

BrandMapper.xml

<insert id="add" useGeneratedKeys="true" keyProperty="id">
    insert into tb_brand(brand_name, company_name, ordered, description, status)
    values (#{brandName},#{companyName},#{ordered},#{description},#{status})
</insert>

mybatis完成数据库的修改操作

修改数据库中某一行的所有数据

BrandMapper.java

public interface BrandMapper {
    void update(Brand brand);
}

BrandMapper.xml

<update id="update">
    update tb_brand
    set
        brand_name = #{brandName},
        company_name = #{companyName},
        ordered = #{ordered},
        description = #{description},
        status = #{status}
    where id = #{id};
</update>

Mybatis.java

@Test
public void testUpdate() throws IOException {
    // 接收参数
    int status = 1;
    String companyName = "波导手机";
    String brandName = "波导";
    String description = "波导手机,手机中的战斗机";
    int ordered = 200;
    int id = 4;

    // 封装对象
    Brand brand = new Brand();
    brand.setStatus(status);
    brand.setBrandName(brandName);
    brand.setCompanyName(companyName);
    brand.setDescription(description);
    brand.setOrdered(ordered);
    brand.setId(id);

    // 1. 获取sqlSessionFactory
    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

    // 2. 获取sqlSession对象
    SqlSession sqlSession = sqlSessionFactory.openSession(true);

    // 3. 获取mapper接口的代理对象
    BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);

    // 4. 执行方法
    brandMapper.update(brand);

//        // 提交事物
//        sqlSession.commit();

    // 5. 释放资源
    sqlSession.close();
}
修改动态字段

BrandMapper.xml

<update id="update">
    update tb_brand
    <set>
        <if test="brandName != null and brandName != ''">
            brand_name = #{brandName},
        </if>
        <if test="companyName != null and companyName != ''">
            company_name = #{companyName},
        </if>
        <if test="ordered != null and ordered != ''">
            ordered = #{ordered},
        </if>
        <if test="description != null and description != ''">
            description = #{description},
        </if>
        <if test="status != null and status != ''">
            status = #{status}
        </if>
    </set>
    where id = #{id};
</update>

mybatis完成数据库的删除操作

删除一个

BrandMapper.java

public interface BrandMapper {
    void deleteById(int id);
}

BrandMapper.xml

<delete id="deleteById">
    delete from tb_brand where id = #{id};
</delete>

Mybatis.java

@Test
public void testDeleteById() throws IOException {
    // 接收参数
    int id = 4;

    // 1. 获取sqlSessionFactory
    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

    // 2. 获取sqlSession对象
    SqlSession sqlSession = sqlSessionFactory.openSession(true);

    // 3. 获取mapper接口的代理对象
    BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);

    // 4. 执行方法
    brandMapper.deleteById(id);

//        // 提交事物
//        sqlSession.commit();

    // 5. 释放资源
    sqlSession.close();
}
批量删除

BrandMapper.java

public interface BrandMapper {
    void deleteByIds(@Param("ids") int[] ids);
}

BrandMapper.xml

注意:动态删除的sql语句在mybatis的foreach标签中collection属性只能是array,除非在传参的时候用@Params注解修饰过

上面的方法中也可以不用@Param注解修饰

<delete id="deleteByIds">
    delete from tb_brand where id
    in (<foreach collection="ids" item="id" separator=",">
            #{id}
        </foreach>);
</delete>

Mybatis.java

@Test
public void testDeleteByIds() throws IOException {
    // 接收参数
    int ids [] = {1,2,3};

    // 1. 获取sqlSessionFactory
    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

    // 2. 获取sqlSession对象
    SqlSession sqlSession = sqlSessionFactory.openSession(true);

    // 3. 获取mapper接口的代理对象
    BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);

    // 4. 执行方法
    brandMapper.deleteByIds(ids);

//        // 提交事物
//        sqlSession.commit();

    // 5. 释放资源
    sqlSession.close();
}

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

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

相关文章

llama2的python视角

1 调试代码 if __name__ __main__ :config ModelArgs(dim8, n_layers2, n_heads32, n_kv_heads32, vocab_size32000, hidden_dimNone, multiple_of256, norm_eps1e-05, max_seq_len3, dropout0.0)model Transformer(config)input_tokens torch.randint(0, 32000, (1, 3)) …

【Linux】UDP编程【上】{诸多编程接口/小白入门式讲解}

文章目录 0.预备知识0.1套接字0.2TCP/UDP0.3大小端问题 1.socket 常见API1.1socket1.2各个接口1.3int bind();1.3网络头文件四件套1.4bzero1.5recvfrom1.6sendto() 2.UDP编程2.1服务器编程2.2客户端编程2.3运行测试2.3.1本机通信2.3.2popen2.3.3strcasestr2.3.4回顾C11智能指针…

靠劳保手套代加工赚钱 这几点一定要记牢

中国劳保手套代加工行业是一个与劳动保护密切相关的行业&#xff0c;随着中国经济的快速发展和安全生产意识的提高&#xff0c;劳保手套的需求呈现出稳步增长的趋势。得益于国内制造业、建筑业、矿业等劳动密集型行业的持续快速发展&#xff0c;中国劳保手套市场规模在过去几年…

路径规划——搜索算法详解(六):LPA*算法详解与Matlab代码

上文讲解了D*算法&#xff0c;D*算法为在动态环境下进行路径规划的场景提出了可行的解决方案&#xff0c;本文将继续介绍另外一种动态规划路径的方法——Lifelong Planning A*&#xff08;LPA*&#xff09;算法。 该算法可以看作是A*的增量版本&#xff0c;是一种在固定起始点…

P8749 [蓝桥杯 2021 省 B] 杨辉三角形

[蓝桥杯 2021 省 B] 杨辉三角形 题目描述 下面的图形是著名的杨辉三角形: 如果我们按从上到下、从左到右的顺序把所有数排成一列&#xff0c;可以得到如下数列&#xff1a; 1 , 1 , 1 , 1 , 2 , 1 , 1 , 3 , 3 , 1 , 1 , 4 , 6 , 4 , 1 , … 1,1,1,1,2,1,1,3,3,1,1,4,6,4,1, …

背包问题---

一、背包模型 有一个体积为V的背包,商店有n个物品,每个物品有一个价值v和体积w,每个物品只能被拿一次,问能够装下物品的最大价值。 这里每一种物品只有两种状态即"拿"或"不拿". 设状态dp[i][j]表示到第i个物品为止,拿的物品总体积为j的情况下的最大价…

网络网络层之(3)IPv6地址

网络网络层之(3)IPv6协议 Author: Once Day Date: 2024年4月2日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文档可参考专栏&#xff1a;通信网络技术_Once-Day的…

简化备案域名查询的最新API接口

随着互联网的发展&#xff0c;越来越多的网站和域名被注册和备案。备案域名查询是一个非常重要的功能&#xff0c;可以帮助用户在特定时间段内查询已备案的域名信息。现在&#xff0c;我将介绍一个简化备案域名查询的最新API接口&#xff0c;该接口可以帮助用户快速查询备案域名…

SQL 注入神器:jSQL Injection 保姆级教程

一、介绍 jSQL Injection是一种用于检测和利用SQL注入漏洞的工具&#xff0c;它专门针对Java应用程序进行SQL注入攻击。以下是关于jSQL Injection的一些介绍&#xff1a; 功能特点&#xff1a; 自动化扫描&#xff1a; jSQL Injection具有自动化扫描功能&#xff0c;能够检测J…

Cesium入门路上的问题解决和知识点集合

想要进行cesium事件处理&#xff0c;必然会涉及到Cesium.ScreenSpaceEventHandler(viewer.scene.canvas)但是与js不同&#xff0c;viewer的位置要先于viewer调用代码大小写错了&#xff0c;就会找不到构造的东西​ 练习时这个方法无效主要是setInputAction方法的括号位置错误应…

精品推荐-2024护网HVV实战教程资料合集(共20章)

以下是资料目录&#xff0c;如需下载&#xff0c;请前往星球获取&#xff1a;https://t.zsxq.com/19vwYrf4t 精品推荐&#xff0c;2024护网HVV实战教程资料合集&#xff0c;压缩包内涵大量实战资料&#xff0c;共20章。星球内会持续更新教程包。 01-HW介绍.zip 02-HTTP&Bu…

揭秘微信如何设置自动回复

01 自动通过好友后自动回复设置 02 个人聊天的关键字自动回复设置 不仅如此&#xff0c;在微信私域管理系统上还可以进行批量多个号自动添加好友、批量群发、定时发朋友圈等操作&#xff0c;可以大幅度提升工作效率&#xff0c;将繁琐的任务交给系统来完成&#xff0c;从而节省…

【【萌新的Pytorch入门之Python的学习】】

学习记录 - 参考记录来自B站up主 -爆肝杰哥 ① NumPy 包为 Python 加上了关键的数组变量类型&#xff0c;弥补了 Python 的不足&#xff1b; ② Pandas 包在 NumPy 数组的基础上添加了与 Excel 类似的行列标签&#xff1b; ③ Matplotlib 库借鉴 Matlab&#xff0c;帮 Python 具…

论文《Structural Information Enhanced Graph Representation for Link Prediction》阅读

论文《Structural Information Enhanced Graph Representation for Link Prediction》阅读 论文概况Introduction问题一&#xff1a;**现有的节点标记技巧只能帮助感知路径深度&#xff0c;而缺乏对路径“宽度”的感知&#xff0c;例如节点度或路径数量**。问题二&#xff1a;G…

软考117-上午题-【计算机网络】-杂题+小结

一、杂题 真题1&#xff1a; 真题2&#xff1a; 真题3&#xff1a; 真题4&#xff1a; 真题5&#xff1a; 真题6&#xff1a; 真题7&#xff1a; 真题8&#xff1a; 真题9&#xff1a; 真题10&#xff1a; 真题11&#xff1a; 真题12&#xff1a; 真题13&#xff1a; 真题14&a…

【算法集训】基础算法:二分查找 | 概念篇

二分枚举&#xff0c;也叫二分查找&#xff0c;指的就是给定一个区间&#xff0c;每次选择区间的中点&#xff0c;并且判断区间中点是否满足某个条件&#xff0c;从而选择左区间继续求解还是右区间继续求解&#xff0c;直到区间长度不能再切分为止。 由于每次都是把区间折半&am…

AUTOSAR MCAL for SemiDrive E3 功能模块使用介绍:I2C

一、 概述 本文主要介绍如何使用芯驰提供的 AUTOSAR MCAL 软件包&#xff0c;开发 SemiDrive E3 的 I2C 模块&#xff0c;对 RTC 芯片进行读写操作。 硬件使用 E3640 GATEWAY 开发板&#xff0c;软件包为 mcal3.1。 图1 硬件环境 二、模块简介 E3 系列最多支持 8 个 I2C&am…

【51单片机入门记录】A/D D/A转换器概述

目录 一、A/D D/A转换器简介 &#xff08;1&#xff09;模数转换器-ADC &#xff08;analogue-to-digital conversion&#xff09; &#xff08;2&#xff09;数模转换器-DAC&#xff08;digital-to-analogue conversion&#xff09; &#xff08;3&#xff09;应用场景 二…

全国计算机等级考试三级Linux应用与开发技术考试-习题汇总

https://blog.csdn.net/qq_42025798/article/details/119155696 3.第1章-计算机体系结构与操作系统-练习题-简答题 https://blog.csdn.net/qq_42025798/article/details/119186151 4.第1章-计算机体系结构与操作系统-练习题-填空题 https://blog.csdn.net/qq_42025798/article/…

gulp项目配置,压缩css,压缩js,进行监听文件改动

1&#xff0c;创建项目 npm install -g gulp这个应该很熟悉&#xff0c;就是全局安装gulp 2&#xff0c;创建一个工程&#xff0c;使用node创建&#xff0c;统一命令 npm init -y3,创建后&#xff0c;目录出现一个package.json文件&#xff0c;没错&#xff0c;就是我们用vu…