三十七、MyBatis-Plus(3)

news2024/9/24 11:22:52

🌻🌻 目录

  • 一、CRUD 扩展 (2)
    • 1.1 Select
    • 1.2 分页查询
    • 1.3 Delete
      • 1.3.1 物理删除
      • 1.3.2 逻辑删除
  • 二、性能分析插件
  • 三、条件构造器
  • 四、代码自动生成器

一、CRUD 扩展 (2)

1.1 Select

  1. 查询所有:

在这里插入图片描述

/*
* 查询
* */

@Test //查询全部
public void selectUser(){

    List<User> users = userMapper.selectList(null);

    users.forEach(System.out::println);
}

在这里插入图片描述

  1. 根据id查询:

在这里插入图片描述

@Test //通过id查询单个用户
public void selectUser1(){

    User user = userMapper.selectById(3);

    System.out.println(user);

}

在这里插入图片描述

  1. 通过id查询多个用户

在这里插入图片描述

@Test //批量查询
public void selectUser2(){

    List<User> users = userMapper.selectBatchIds(Arrays.asList(1L, 2L, 3L));

    users.forEach(System.out::println);

}

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

  1. 条件查询 通过map封装

在这里插入图片描述

@Test // 条件查询 通过map封装
public void selectUser3(){

    Map<String,Object> map = new HashMap<>();

    map.put("name","xieMax");
    map.put("age",22);
    List<User> users = userMapper.selectByMap(map);

    users.forEach(System.out::println);
}

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

1.2 分页查询

分页在网站的使用十分之多!

  • 1、原始的limit分页
  • 2、pageHelper第三方插件
  • 3、MybatisPlus其实也内置了分页插件!

如何使用:参考官网 分页插件

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

  • 1、配置拦截器组件(在config下面的MybatisPlusConfig

在这里插入图片描述

/**
 * 添加分页插件
 */
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
    return new MybatisPlusInterceptor();
}
  • 2、增加测试方法直接使用page对象即可

在这里插入图片描述

/*
* 分页
* */
@Test //测试分页查询
public void pageTest(){
    //参数一 current:当前页   参数二size:页面大小
    //使用了分页插件之后,所有的分页操作都变得简单了
    Page<User> page = new Page<>(2,5);

    Page<User> userPage = userMapper.selectPage(page, null);

    userPage.getRecords().forEach(System.out::println);

    System.out.println("总页数==>"+page.getTotal());
}

运行结果查看:

在这里插入图片描述

1.3 Delete

1.3.1 物理删除

  • ① 通过id删除

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

@Test  //通过id删除
public void deleteUserById(){

    userMapper.deleteById(1819427560255004676L);
}

运行删除后:

在这里插入图片描述

在这里插入图片描述

  • ② 批量删除

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

运行后:

在这里插入图片描述

在这里插入图片描述

  • ③ 通过map删除

在这里插入图片描述

@Test//批量删除 通过map删除
public void deleteByMap(){

    Map<String,Object> map = new HashMap<>();

    map.put("name","xieMax");

    userMapper.deleteByMap(map);
}

在这里插入图片描述

运行后

在这里插入图片描述

在这里插入图片描述

1.3.2 逻辑删除

官网逻辑删除 逻辑删除支持

在这里插入图片描述

我们在工作中会遇到一些问题:逻辑删除!

  • 物理删除:从数据库中直接删除
  • 逻辑删除:在数据库中没有被删除,而是通过一个变量来使他失效! deleted=0 ==> deleted=1

管理员可以查看被删除的记录!防止数据的丢失,类似于回收站!

上手测试一下:

  • 1、在数据表中增加一个deleted字段

在这里插入图片描述

  • 2、实体类中添加对应属性

在这里插入图片描述

@TableLogic//逻辑删除注解
private Integer deleted;
  • 3、在 application.yml 中配置 MyBatis-Plus 的全局逻辑删除属性

在这里插入图片描述

mybatis-plus:
  #配置逻辑删除  没删除的为0 删除的为1
  global-config:
    db-config:
      logic-delete-field: deleted # 全局逻辑删除字段名
      logic-delete-value: 1 # 逻辑已删除值
      logic-not-delete-value: 0 # 逻辑未删除值
  • 4、测试一下删除

在这里插入图片描述

运行删除:

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

刷新数据库查看:

在这里插入图片描述

再次运行查询:

在这里插入图片描述

在这里插入图片描述

发现: 记录还在,deleted变为1,再次测试查询被删除的用户,发现查询为空

以上所有的CRUD及其扩展操作,我们都必须精通掌握!会大大提高工作写项目的效率!

二、性能分析插件

我们在平时的开发中,会遇到一些满Sql。测试、druid···
MybatisPlus也提供了性能分析插件,如果超过这个时间就停止运行!

性能分析拦截器作用:用于输出每条sql语句及其执行时间

  • 1、导入插件遇见下面问题

在这里插入图片描述

解决(降低依赖版本):

在这里插入图片描述

在这里插入图片描述

//性能分析插件
@Bean
@Profile({"dev","test"})//设置dev开发、test测试 环境开启  保证我们的效率
public PerformanceInterceptor performanceInterceptor(){
    PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
    performanceInterceptor.setMaxTime(100);//设置sql最大执行时间*ms,如果超过了则不执行
    performanceInterceptor.setFormat(true);//开启sql格式化
    return performanceInterceptor;
}

注意: 要在application.yml中配置环境为devtest环境!

#设置开发环境
spring:
  profiles:
    active: dev
  • 2、测试使用

① 测试查询全部所用的时间:

@Test //查询全部
public void selectUser(){

    List<User> users = userMapper.selectList(null);

    users.forEach(System.out::println);
}

显示结果如下:

在这里插入图片描述

② 测试查询全部所用的时间将来最大时间改为1ms运行则如下抛出异常

在这里插入图片描述

使用性能分析插件,可以帮助我们提高效率!

三、条件构造器

官网 条件构造器

十分重要:Wrapper 记住查看输出的SQL进行分析

表数据
在这里插入图片描述

  • 测试一:

增加方法:

在这里插入图片描述

@Test
public void test1(){
   //参数是一个wrapper ,条件构造器,和刚才的map对比学习!
   //查询name不为空,email不为空,age大于18的用户
   QueryWrapper<User> wrapper = new QueryWrapper<>();

   wrapper.isNotNull("name")
          .isNotNull("email")
          .ge("age",18);
   userMapper.selectList(wrapper);
}

查询结果:

在这里插入图片描述

  • 测试二

增加方法:
在这里插入图片描述

@Test
public void test2(){
   //查询name=Sandy
   QueryWrapper<User> wrapper = new QueryWrapper<>();
   wrapper.eq("name","Sandy");
   //查询一个数据selectOne,若查询出多个会报错
   //Expected one result (or null) to be returned by selectOne(), but found: *
   //若出现多个结果使用list或map
   userMapper.selectOne(wrapper);//查询一个数据,若出现多个结果使用list或map
}

查询结果:

在这里插入图片描述

  • 测试三

增加方法

在这里插入图片描述

@Test
public void test3(){
    //查询age在10-20之间的用户
    QueryWrapper<User> wrapper = new QueryWrapper<>();

    wrapper.between("age",20,30);//区间

    System.out.println(userMapper.selectCount(wrapper));//输出查询的数量selectCount
}

查询结果:

在这里插入图片描述

  • 测试四

增加方法:

在这里插入图片描述

@Test
public void test4(){
    //模糊查询 查询表中名字包含 a,不包含 c ,且test%的
    QueryWrapper<User> wrapper = new QueryWrapper<>();

    wrapper.like("name","a")
           .notLike("name","c")
           .likeRight("email","test"); //qq%  左和右?
    List<Map<String, Object>> maps = userMapper.selectMaps(wrapper);

    maps.forEach(System.out::println);
}

查询结果:

在这里插入图片描述

  • 测试五

增加查询方法:

在这里插入图片描述

@Test
public void test5(){
    //模糊查询
    //SELECT id,name,age,email,version,deleted,create_time,update_time
    // FROM user WHERE id IN (select id from user where id < 3)
    QueryWrapper<User> wrapper = new QueryWrapper<>();

    wrapper.inSql("id","select id from user where id < 3");

    List<User> users = userMapper.selectList(wrapper);

    users.forEach(System.out::println);
}

查询结果显示:

在这里插入图片描述

  • 测试六

增加方法:

在这里插入图片描述

@Test
public void test6(){
   //通过id进行降序排序
   QueryWrapper<User> wrapper = new QueryWrapper<>();

   wrapper.orderByDesc("id");

   List<User> users = userMapper.selectList(wrapper);

   users.forEach(System.out::println);
}

查询结果显示:

在这里插入图片描述

条件构造器所有查询代码:

package com.gansu;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.gansu.mapper.UserMapper;
import com.gansu.pojo.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;


import java.util.List;
import java.util.Map;


@RunWith(SpringRunner.class)
@SpringBootTest
public  class WrapperTests {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void test1(){
        //参数是一个wrapper ,条件构造器,和刚才的map对比学习!
        //查询name不为空,email不为空,age大于18的用户
        QueryWrapper<User> wrapper = new QueryWrapper<>();

        wrapper.isNotNull("name")
               .isNotNull("email")
               .ge("age",18);
        userMapper.selectList(wrapper);
    }

    @Test
    public void test2(){
        //查询name=Sandy
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.eq("name","Sandy");
        //查询一个数据selectOne,若查询出多个会报错
        //Expected one result (or null) to be returned by selectOne(), but found: *
        //若出现多个结果使用list或map
        userMapper.selectOne(wrapper);//查询一个数据,若出现多个结果使用list或map
    }

    @Test
    public void test3(){
        //查询age在10-20之间的用户
        QueryWrapper<User> wrapper = new QueryWrapper<>();

        wrapper.between("age",20,30);//区间

        System.out.println(userMapper.selectCount(wrapper));//输出查询的数量selectCount
    }

    @Test
    public void test4(){
        //模糊查询 查询表中名字包含 a,不包含 c ,且test%的
        QueryWrapper<User> wrapper = new QueryWrapper<>();

        wrapper.like("name","a")
               .notLike("name","c")
               .likeRight("email","test"); //qq%  左和右?
        List<Map<String, Object>> maps = userMapper.selectMaps(wrapper);

        maps.forEach(System.out::println);
    }

    @Test
    public void test5(){
        //模糊查询
        //SELECT id,name,age,email,version,deleted,create_time,update_time
        // FROM user WHERE id IN (select id from user where id < 3)
        QueryWrapper<User> wrapper = new QueryWrapper<>();

        wrapper.inSql("id","select id from user where id < 3");

        List<User> users = userMapper.selectList(wrapper);

        users.forEach(System.out::println);
    }

    @Test
    public void test6(){
        //通过id进行降序排序
        QueryWrapper<User> wrapper = new QueryWrapper<>();

        wrapper.orderByDesc("id");

        List<User> users = userMapper.selectList(wrapper);

        users.forEach(System.out::println);
    }
}

Mysql => JDBC => Mybatis => MybatisPlus

四、代码自动生成器

AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。

官网👉👉代码生成器

生成前提要有表:

在这里插入图片描述

  • ① 创建一个springboot maven项目

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • ② 修改版本号,删除不需要的目录

在这里插入图片描述

  • ③ 导入依赖
<!--1.数据库驱动-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.30</version>
</dependency>
<!--2.lombok-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>
<!--3.mybatis-plus  版本很重要3.0.5-->
<!--mybatis-plus自己开发的,并非官方的-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.0.5</version><!--3.4.2  3.0.5-->
</dependency>
<!--4.h2-->
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>
<!--5.junit-->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>

<!--模板引擎 依赖:mybatis-plus代码生成的时候报异常-->
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.0</version>
</dependency>
<!--配置ApiModel在实体类中不生效-->
<dependency>
    <groupId>com.spring4all</groupId>
    <artifactId>spring-boot-starter-swagger</artifactId>
    <version>1.5.1.RELEASE</version>
</dependency>
<!--freemarker-->
<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.30</version>
</dependency>
<!--beetl-->
<dependency>
    <groupId>com.ibeetl</groupId>
    <artifactId>beetl</artifactId>
    <version>3.3.2.RELEASE</version>
</dependency>

整个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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.gansu</groupId>
    <artifactId>CodeGenerator</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>CodeGenerator</name>
    <description>CodeGenerator</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--1.数据库驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </dependency>
        <!--2.lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!--3.mybatis-plus  版本很重要3.0.5-->
        <!--mybatis-plus自己开发的,并非官方的-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.0.5</version><!--3.4.2  3.0.5-->
        </dependency>
        <!--4.h2-->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--5.junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

        <!--模板引擎 依赖:mybatis-plus代码生成的时候报异常-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.0</version>
        </dependency>
        <!--配置ApiModel在实体类中不生效-->
        <dependency>
            <groupId>com.spring4all</groupId>
            <artifactId>spring-boot-starter-swagger</artifactId>
            <version>1.5.1.RELEASE</version>
        </dependency>
        <!--freemarker-->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.30</version>
        </dependency>
        <!--beetl-->
        <dependency>
            <groupId>com.ibeetl</groupId>
            <artifactId>beetl</artifactId>
            <version>3.3.2.RELEASE</version>
        </dependency>
    </dependencies>
</project>
  • ④ 编写生成器 AutoGenerator

在这里插入图片描述

package com.gansu;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.util.ArrayList;

public class CodeGenerator {

    public static void main(String[] args) {
        //我们需要构建一个代码生成器对象
        AutoGenerator mpg = new AutoGenerator();
        //怎么样去执行,配置策略
        //1、全局配置
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");//获取当前目录
        gc.setOutputDir(projectPath+"/src/main/java");//输出到哪个目录
        gc.setAuthor("Daniel");
        gc.setOpen(false);
        gc.setFileOverride(false);//是否覆盖
        gc.setServiceName("%sService");//去Service的I前缀
        gc.setIdType(IdType.ID_WORKER);
        gc.setDateType(DateType.ONLY_DATE);
        gc.setSwagger2(true);
        mpg.setGlobalConfig(gc);
        //2、设置数据源
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUsername("root");
        dsc.setPassword("root");
        dsc.setUrl("jdbc:mysql://localhost:3306/mybatis_plus?useSSL=false&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setDbType(DbType.MYSQL);
        mpg.setDataSource(dsc);
        //3、包的配置
        PackageConfig pc = new PackageConfig();
        pc.setModuleName("study");
        pc.setParent("com.gansu");
        pc.setEntity("pojo");
        pc.setMapper("mapper");
        pc.setService("service");
        pc.setController("controller");
        mpg.setPackageInfo(pc);
        //4、策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setInclude("user");//设置要映射的表名,只需改这里即可,可以添加多个表名
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        strategy.setEntityLombokModel(true);//是否使用lombok开启注解
        strategy.setLogicDeleteFieldName("deleted");
        //自动填充配置
        TableFill gmtCreate = new TableFill("gmt_create", FieldFill.INSERT);
        TableFill gmtUpdate = new TableFill("gmt_update", FieldFill.INSERT_UPDATE);
        ArrayList<TableFill> tableFills = new ArrayList<>();
        tableFills.add(gmtCreate);
        tableFills.add(gmtUpdate);
        strategy.setTableFillList(tableFills);
        //乐观锁配置
        strategy.setVersionFieldName("version");
        strategy.setRestControllerStyle(true);//开启驼峰命名
        strategy.setControllerMappingHyphenStyle(true);//localhost:8080/hello_id_2
        mpg.setStrategy(strategy);
        mpg.execute();//执行
    }
}
  • ⑤ 运行上面代码,生成后显示:

在这里插入图片描述

  • ⑥ 拷贝到自己的项目中就可以使用了。

文章所有源码

至此,MyBatis-Plus总结完毕,还需要进一步学习可以到官网继续探索

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

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

相关文章

PCB设计经验——布线原则

1.连线精简——避免直角布线 导线也应看作一种元器件&#xff0c;有自己的电阻&#xff0c;电感&#xff0c;电容 PCB走线在直角转弯的地方&#xff0c;信号前后部分相互影响&#xff0c;导致分布电容增加&#xff0c;对信号上升沿和下降沿有延缓影响。从阻抗的角度来说&#…

鸿蒙媒体开发【相机数据采集保存】拍照和图片

相机数据采集保存 介绍 本示例主要展示了相机的相关功能 接口实现相机的预览拍照功能。 效果预览 使用说明 弹出是否允许“CameraSample”使用相机&#xff1f;点击“允许”弹出是否允许“CameraSample”使用麦克风&#xff1f;点击“允许”进入预览界面&#xff0c;预览正…

快递点“内鬼”才是倒卖我们个人信息的源头

下面是一个真实的案例来分析一下我们的信息是怎么被倒卖出去的。以次来给大家敲响警钟&#xff0c;不要相信所谓的退货退款类的诈骗。【所有涉及到金钱的都是诈骗&#xff0c;获取你信息也很容易&#xff0c;所以不要轻信诈骗谎言】 01-盗取快递信息过程 内鬼与骗子勾结&…

深度学习(1)--机器学习、人工智能、深度学习的关系

1956 年提出 AI 概念&#xff0c;短短3年后&#xff08;1959&#xff09; Arthur Samuel 就提出了机器学习的概念&#xff1a; Field of study that gives computers the ability to learn without being explicitly programmed. 机器学习研究和构建的是一种特殊算法&#xff0…

Mindspore框架DCGAN模型实现漫画头像生成|(二)DCGAN模型构建

Mindspore框架DCGAN模型实现漫画头像生成 Mindspore框架DCGAN模型实现漫画头像生成|&#xff08;一&#xff09;漫画头像数据集准备Mindspore框架DCGAN模型实现漫画头像生成|&#xff08;二&#xff09;DCGAN模型构建Mindspore框架DCGAN模型实现漫画头像生成|&#xff08;三&a…

广州市广州城市信息模型(CIM)白皮书学习

一级标题 二级标题 框架 四级标题 五级标题 六级标题 CIM平台定义 以建筑信息模型(BIM)、地理信息系统(GIS)、物联网(IoT)等技术为基础&#xff0c;整合城市地上地下、室内室外、历史现状未来多维多尺度信息模型数据和城市感知数据&#xff0c;构建起三维数字空间的城市…

主持人大赛活动流程和规则

比赛内容&#xff1a; ①命题主持三分钟 选手抽签获得一命题主持内容&#xff0c;思考三十秒后开始主持 ②模拟主持两分钟 选手提前自己准备好&#xff0c;模拟主持一段电视或广播节目。 要求创意新颖、声情并茂。 ③即兴演讲两分钟 选手现场抽题。抽到一个话题&#xff0c;思…

算法021:山脉数组的峰顶索引

山脉数组的峰顶索引. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/peak-index-in-a-mountain-array/ 这个题&#xff0c;看似好像不是递增或者递减数组&#xff…

【网络安全入门】学习网络安全必须知道的77个网络基础知识

1、TCP/IP 协议的四层模型&#xff08;网络接口层、网络层、传输层、应用层&#xff09; TCP/IP 协议是互联网通信的基础&#xff0c;四层模型中&#xff0c;网络接口层负责与物理网络的连接&#xff1b;网络层主要处理 IP 数据包的路由和转发&#xff1b;传输层提供端到端的可…

电路原理分析

文章目录 0 基础符号说明电容电感电阻U/IC二极管三极管变压器杂合元件IGBT电机运放开关TPJ高组态电阻上拉电阻可靠高电平提高驱动能力阻值选择下拉电阻可靠低电平晶振压电效应晶振原理实物电荷泵电路防倒灌电路0 基础符号说明 电容 电容 C Electrolytic capacitor 电解电容 E…

内网穿透--LCX端口转发实验

实验背景 通过公司带有防火墙功能的路由器接入互联网&#xff0c;然后由于私网IP的缘故&#xff0c;公网无法直接访问内部主机&#xff0c;通过端口转发&#xff0c;穿透访问内网主机服务。 实验设备 1.路由器一台&#xff0c;实现内部 DHCP 分配和边界 NAT 2.外网 window20…

Java语言程序设计——篇十一(3)

&#x1f33f;&#x1f33f;&#x1f33f;跟随博主脚步&#xff0c;从这里开始→博主主页&#x1f33f;&#x1f33f;&#x1f33f; 欢迎大家&#xff1a;这里是我的学习笔记、总结知识的地方&#xff0c;喜欢的话请三连&#xff0c;有问题可以私信&#x1f333;&#x1f333;&…

JavaFX布局-ButtonBar

JavaFX布局-ButtonBar 常用属性buttonOrderpaddingbuttonMinWidth 实现方式Java实现fxml实现 一个特殊的容器&#xff0c;用于创建一组按钮&#xff0c;水平排列按钮太多&#xff0c;会被遮住&#xff0c;不会自动产生滚动条 常用属性 buttonOrder 预制顺序 buttonBar.setBut…

别再盲目推广了!Xinstall助你开启App线下推广新篇章

在这个数字化飞速发展的时代&#xff0c;App已经成为我们生活中不可或缺的一部分。然而&#xff0c;App市场的竞争也日益激烈&#xff0c;如何让你的App在众多竞争者中脱颖而出&#xff0c;成为每个推广者必须面对的问题。今天&#xff0c;就让我们一起探讨一下App线下推广的痛…

【2024】Datawhale AI夏令营 Task4笔记——vllm加速方式修改及llm推理参数调整上分

【2024】Datawhale AI夏令营 Task4笔记——vllm加速方式修改及llm推理参数调整上分 本文承接文章【2024】Datawhale AI夏令营 Task3笔记——Baseline2部分代码解读及初步上分思路&#xff0c;对其中vllm加速方式进行修改&#xff0c;推理速度获得了极大提升。另外&#xff0c;…

【JAVA入门】Day17 - GUI

【JAVA入门】Day17 - GUI 文章目录 【JAVA入门】Day17 - GUI一、组件二、事件 GUI 即图形化界面。 一、组件 一个 Java 的图形化界面项目主要用到了下面几种组件。 Java 中最外层的窗体叫做 JFrame。Java 中最上层的菜单叫做 JMenuBar。Java 中管理文字和图片的容器叫做 JLab…

快速体验LLaMA3模型微调(超算互联网平台国产异构加速卡DCU)

序言 本文以 LLaMA-Factory 为例&#xff0c;在超算互联网平台SCNet上使用异构加速卡AI 显存64GB PCIE&#xff0c;对 Llama3-8B-Instruct 模型进行 LoRA 微调、推理和合并。 超算互联网平台 异构加速卡AI 显存64GB PCIE 一、参考资料 github仓库代码&#xff1a;LLaMA-Fac…

C#中的Winform基础

program 每个Windows应用程序都会有一个Program类——程序入口点 [STAThread] ----指示应用程序的COM线程模型是单线程单元&#xff08;如果无此特性&#xff0c;无法工作&#xff09; static voidMain() —— 入口 System.Windows.Forms.Application类提供一系列静态方法和…

【C++】一堆数组案例 元素逆置

所谓元素逆置就是把一堆数组的元素顺序反过来 例如一堆数组的为 1&#xff0c;2&#xff0c;3&#xff0c;4 那么它的逆置为 4&#xff0c;3&#xff0c;2&#xff0c;1 逆置过程运用赋值存储的思想&#xff0c;先把第一个数组存贮到一个变量中&#xff0c;然后把末尾数组…

开源LivePortrait,快速实现表情包自定义

最近可灵AI很火&#xff0c;看到网上生成的效果也很赞啊&#xff0c;之前发现快手可灵开源了LivePortrait&#xff0c;今天去玩了一下&#xff0c;很有意思。 比如下图官方展示效果&#xff1a; 这些图片开始自带表情了&#xff0c;主要就是通过LivePortrait来实现。 LivePor…