多数据源 使用 mybatis-plus-generator 3.5.1版本进行代码生成

news2024/11/24 15:45:14

文章目录

  • 前言
      • 多数据源 使用 mybatis-plus-generator 3.5.1版本进行代码生成
        • 1. 说明
        • 2. 添加依赖
          • 2.1. mybatis-plus-generator 自动生成依赖
          • 2.2. 多数据源依赖
          • 2.3. 建立新项目的完全pom.xml
        • 3. application.yml 多数据源配置 + mybatis-plus-generator配置
        • 4. 创建一个MybatisPlusGeneratorTest单元测试类进行代码生成
        • 5. 当前项目结构
        • 6. 使用mybatis-plus-generator 进行代码生成
          • 6.1. mybatis-plus-generator 官方文档代码生成结构
          • 6.2. 生成示例
          • 6.3. 完整MybatisPlusGeneratorTest单元测试类对one数据源进行代码生成测试
          • 6.4. 完整MybatisPlusGeneratorTest单元测试类对two数据源进行代码生成测试

前言

  如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
  而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!


多数据源 使用 mybatis-plus-generator 3.5.1版本进行代码生成

1. 说明

我打算在一个项目中引入两个数据源,然后分表进行代码生成,集成到项目中。

2. 添加依赖

2.1. mybatis-plus-generator 自动生成依赖

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.1</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.31</version>
        </dependency>
        
        <!--velocity-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.3</version>
        </dependency>
        
2.2. 多数据源依赖
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.22</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>

2.3. 建立新项目的完全pom.xml

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
            <version>5.7.0</version>
            <scope>test</scope>
        </dependency>
        <!--	以下是代码自动生成器 -start-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.1</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.31</version>
        </dependency>
        
        <!--velocity-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.3</version>
        </dependency>


        <!-- 工具类相关 start -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.15</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>
        <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>1.4.1</version>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>28.1-jre</version>
        </dependency>
        <dependency>
            <groupId>com.github.dozermapper</groupId>
            <artifactId>dozer-core</artifactId>
            <version>6.1.0</version>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>
        <!-- 工具类相关 end -->

        <!-- 数据源 start-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.22</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>
        <!-- 数据源 end-->
        <!--swagger-->
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>1.6.3</version>
        </dependency>

    </dependencies>

3. application.yml 多数据源配置 + mybatis-plus-generator配置

server:
  port: 13146  # 默认端口
  tomcat:
    uri-encoding: UTF-8
spring:
  datasource:
    dynamic:
      primary: one
      druid:
        initial-size: 20
        min-idle: 20
        maxActive: 200
        maxWait: 60000
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMillis: 300000
        validationQuery: SELECT 1 FROM DUAL
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        poolPreparedStatements: true
        maxPoolPreparedStatementPerConnectionSize: 50
        filters: stat,wall,slf4j
        connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
      datasource:
        one:
          url: jdbc:mysql://localhost:3306/TESTONEDB?characterEncoding=UTF-8&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
          username: TESTONE
          password: TESTONE
          driver-class-name: com.mysql.cj.jdbc.Driver
        two:
          url: jdbc:mysql://localhost:3306/TESTTWODB?characterEncoding=UTF-8&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
          username: TESTTWO
          password: TESTTWO
          driver-class-name: com.mysql.cj.jdbc.Driver
#mybatis plus 设置
mybatis-plus:
  mapper-locations: classpath*:mapper/*/*Mapper.xml
  global-config:
    # 关闭MP3.0自带的banner
    banner: false
    db-config:
      #主键类型  0:"数据库ID自增",1:"该类型为未设置主键类型", 2:"用户输入ID",3:"全局唯一ID (数字类型唯一ID)", 4:"全局唯一ID UUID",5:"字符串全局唯一ID (idWorker 的字符串表示)";
      id-type: ASSIGN_ID
      # 默认数据库表下划线命名
      table-underline: true
  configuration:
    # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
    #    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    # 返回类型为Map,显示null对应的字段
    call-setters-on-nulls: true


4. 创建一个MybatisPlusGeneratorTest单元测试类进行代码生成


/**
* @description: 代码生成
* @author yangzhenyu
* @date 2023/4/24 14:21
* @version 1.0
*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = DemoXxlJob.class)
@Slf4j
public class MybatisPlusGeneratorTest {

}

5. 当前项目结构

在这里插入图片描述

6. 使用mybatis-plus-generator 进行代码生成

6.1. mybatis-plus-generator 官方文档代码生成结构

在这里插入图片描述

6.2. 生成示例
//配置数据源
        FastAutoGenerator.create(url, username, password)
                //2、全局配置
                .globalConfig(builder -> {
                    builder.author("yangzhenyu") // 设置作者名
                            //设置输出路径:项目的 java 目录下
                            .outputDir(System.getProperty("user.dir") + "/src/main/java")
                            //注释日期
                            .commentDate("yyyy-MM-dd hh:mm:ss")
                            //定义生成的实体类中日期的类型 TIME_PACK=LocalDateTime;ONLY_DATE=Date;
                            .dateType(DateType.ONLY_DATE)
                            //覆盖之前的文件
                            .fileOverride()
                            //开启 swagger 模式
                            .enableSwagger()
                            //禁止打开输出目录,默认打开
                            .disableOpenDir();
                })
                //3、包配置
                .packageConfig(builder -> {
                    builder.parent("org") // 设置父包名
                            //设置模块包名
                            .moduleName("example")
                            //pojo 实体类包名
                            .entity(entity)
                            //Service 包名
                            .service("service")
                            // ***ServiceImpl 包名
                            .serviceImpl("service.impl")
                            //Mapper 包名
                            .mapper(mapper)
                            //Mapper XML 包名
                            .xml(mapper)
                            //Controller 包名
                            .controller("controller")
                            //自定义文件包名
                            .other("utils")
                            //配置 mapper.xml 路径信息:项目的 resources 目录下
                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml, StringUtils.join(System.getProperty("user.dir"),"/src/main/resources/mapper/",dbFlag))) ;
                })
                //4、策略配置
                .strategyConfig(builder -> {
                    builder.addInclude(tables) // 设置需要生成的数据表名
                            //.addTablePrefix("t_", "c_") // 设置过滤表前缀
                            //=============================
                            //Mapper策略配置
                            //=============================
                            .mapperBuilder()
                            //设置父类
                            .superClass(BaseMapper.class)
                            //格式化 mapper 文件名称
                            .formatMapperFileName("%sMapper")
                            //开启 @Mapper 注解
                            .enableMapperAnnotation()
                            //格式化 Xml 文件名称
                            .formatXmlFileName("%sXml")
                            //=============================
                            //servic类策略配置
                            //=============================
                            .serviceBuilder()
                            //格式化 service 接口文件名称,%s进行匹配表名,如 UserService
                            .formatServiceFileName("%sService")
                            //格式化 service 实现类文件名称,%s进行匹配表名,如 UserServiceImpl
                            .formatServiceImplFileName("%sServiceImpl")
                            //=============================
                            //实体类策略配置
                            //=============================
                            .entityBuilder()
                            .enableLombok() //开启 Lombok
                            //不实现 Serializable 接口,不生产 SerialVersionUID
                            //.disableSerialVersionUID()
                            //逻辑删除字段名
                            .logicDeleteColumnName("deleted")
                            //数据库表映射到实体的命名策略:下划线转驼峰命
                            .naming(NamingStrategy.underline_to_camel)
                            //数据库表字段映射到实体的命名策略:下划线转驼峰命
                            .columnNaming(NamingStrategy.underline_to_camel)
                            //添加表字段填充,"create_time"字段自动填充为插入时间,"modify_time"字段自动填充为插入修改时间
                            .addTableFills(
                                    new Column("create_time", FieldFill.INSERT),
                                    new Column("modify_time", FieldFill.INSERT_UPDATE
                                    )
                            )
                            // 开启生成实体时生成字段注解
                            .enableTableFieldAnnotation()
                            //=============================
                            //Controller策略配置
                            //=============================
                            .controllerBuilder()
                            //格式化 Controller 类文件名称,%s进行匹配表名,如 UserController
                            .formatFileName("%sController")
                            //开启生成 @RestController 控制器
                            .enableRestStyle();

                })
                //模板
                .templateEngine(new VelocityTemplateEngine())
                //执行
                .execute();

上面都有注释,可以根据你自己项目的情况,进行改造。

6.3. 完整MybatisPlusGeneratorTest单元测试类对one数据源进行代码生成测试

import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
import com.baomidou.dynamic.datasource.ds.ItemDataSource;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.example.DemoXxlJob;
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.Collections;

/**
* @description: 代码生成
* @author yangzhenyu
* @date 2023/4/24 14:21
* @version 1.0
*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = DemoXxlJob.class)
@Slf4j
public class MybatisPlusGeneratorTest {
    @Autowired
    private DynamicRoutingDataSource dataSource;

    //代码生成
    @Test
    public void test(){
        //数据源选择
        final String dbFlag = "one";
        //实体包路径
        String entity = StringUtils.join("entity",".",dbFlag);
        //mapper 路径
        String mapper = StringUtils.join("mapper",".",dbFlag);
        String username = ((DruidDataSource)((ItemDataSource) dataSource.getDataSource(dbFlag)).getRealDataSource()).getUsername();
        String password = ((DruidDataSource)((ItemDataSource) dataSource.getDataSource(dbFlag)).getRealDataSource()).getPassword();
        String url = ((DruidDataSource)((ItemDataSource) dataSource.getDataSource(dbFlag)).getRealDataSource()).getUrl();

        //需要生成的表
        String [] tables = new String[]{"test"};
        //配置数据源
        FastAutoGenerator.create(url, username, password)
                //2、全局配置
                .globalConfig(builder -> {
                    builder.author("yangzhenyu") // 设置作者名
                            //设置输出路径:项目的 java 目录下
                            .outputDir(System.getProperty("user.dir") + "/src/main/java")
                            //注释日期
                            .commentDate("yyyy-MM-dd hh:mm:ss")
                            //定义生成的实体类中日期的类型 TIME_PACK=LocalDateTime;ONLY_DATE=Date;
                            .dateType(DateType.ONLY_DATE)
                            //覆盖之前的文件
                            .fileOverride()
                            //开启 swagger 模式
                            .enableSwagger()
                            //禁止打开输出目录,默认打开
                            .disableOpenDir();
                })
                //3、包配置
                .packageConfig(builder -> {
                    builder.parent("org") // 设置父包名
                            //设置模块包名
                            .moduleName("example")
                            //pojo 实体类包名
                            .entity(entity)
                            //Service 包名
                            .service("service")
                            // ***ServiceImpl 包名
                            .serviceImpl("service.impl")
                            //Mapper 包名
                            .mapper(mapper)
                            //Mapper XML 包名
                            .xml(mapper)
                            //Controller 包名
                            .controller("controller")
                            //自定义文件包名
                            .other("utils")
                            //配置 mapper.xml 路径信息:项目的 resources 目录下
                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml, StringUtils.join(System.getProperty("user.dir"),"/src/main/resources/mapper/",dbFlag))) ;
                })
                //4、策略配置
                .strategyConfig(builder -> {
                    builder.addInclude(tables) // 设置需要生成的数据表名
                            //.addTablePrefix("t_", "c_") // 设置过滤表前缀
                            //=============================
                            //Mapper策略配置
                            //=============================
                            .mapperBuilder()
                            //设置父类
                            .superClass(BaseMapper.class)
                            //格式化 mapper 文件名称
                            .formatMapperFileName("%sMapper")
                            //开启 @Mapper 注解
                            .enableMapperAnnotation()
                            //格式化 Xml 文件名称
                            .formatXmlFileName("%sXml")
                            //=============================
                            //servic类策略配置
                            //=============================
                            .serviceBuilder()
                            //格式化 service 接口文件名称,%s进行匹配表名,如 UserService
                            .formatServiceFileName("%sService")
                            //格式化 service 实现类文件名称,%s进行匹配表名,如 UserServiceImpl
                            .formatServiceImplFileName("%sServiceImpl")
                            //=============================
                            //实体类策略配置
                            //=============================
                            .entityBuilder()
                            .enableLombok() //开启 Lombok
                            //不实现 Serializable 接口,不生产 SerialVersionUID
                            //.disableSerialVersionUID()
                            //逻辑删除字段名
                            .logicDeleteColumnName("deleted")
                            //数据库表映射到实体的命名策略:下划线转驼峰命
                            .naming(NamingStrategy.underline_to_camel)
                            //数据库表字段映射到实体的命名策略:下划线转驼峰命
                            .columnNaming(NamingStrategy.underline_to_camel)
                            //添加表字段填充,"create_time"字段自动填充为插入时间,"modify_time"字段自动填充为插入修改时间
                            .addTableFills(
                                    new Column("create_time", FieldFill.INSERT),
                                    new Column("modify_time", FieldFill.INSERT_UPDATE
                                    )
                            )
                            // 开启生成实体时生成字段注解
                            .enableTableFieldAnnotation()
                            //=============================
                            //Controller策略配置
                            //=============================
                            .controllerBuilder()
                            //格式化 Controller 类文件名称,%s进行匹配表名,如 UserController
                            .formatFileName("%sController")
                            //开启生成 @RestController 控制器
                            .enableRestStyle();

                })
                //模板
                .templateEngine(new VelocityTemplateEngine())
                //执行
                .execute();
    }


}

其中:

        //数据库选择
        final String dbFlag = "one";

这部分是我们的数据库选择,对应application.yml这里:
在这里插入图片描述

要生成的表结构:

-- testtwodb.test definition

CREATE TABLE `test` (
  `ID` int(18) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `AGE` int(100) NOT NULL COMMENT '年龄',
  `NAME` varchar(100) DEFAULT NULL COMMENT '姓名',
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='测试';

进行生成测试:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后我们改下mapper:
之前的样子:
在这里插入图片描述
改完的样子:
在这里插入图片描述
改一个名字并加@DS(“one”),此注解代表的是使用哪个数据源的事务

接下来改一下实体类与XML:

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

修改一下名字。
在这里我回答一下我为什么这么做,因为我偷懒了一下,这两个库的表结构都是一样的,所以得修改一下名字进行第二个数据源的生成。

6.4. 完整MybatisPlusGeneratorTest单元测试类对two数据源进行代码生成测试

将数据源改成two
只修改下图红框处:
在这里插入图片描述
执行单元测试:
在这里插入图片描述
在这里插入图片描述
同样将two数据源生成的实体类、xml与mapper名字改一下
在这里插入图片描述

同时在TwoTestMapper 接口上添加@DS注解,表示事务为第二个数据源控制:

package org.example.mapper.two;

import com.baomidou.dynamic.datasource.annotation.DS;
import org.example.entity.two.TwoTest;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;

/**
 * <p>
 * 测试 Mapper 接口
 * </p>
 *
 * @author yangzhenyu
 * @since 2023-04-24 05:33:06
 */
@DS("two")
@Mapper
public interface TwoTestMapper extends BaseMapper<TwoTest> {

}

最后一步,将service 下图红框处去掉:
在这里插入图片描述
在这里插入图片描述

这样我们就可以在此service中引用不同数据源的mapper进行不同数据源的操作。

/**
 * <p>
 * 测试 服务类
 * </p>
 *
 * @author yangzhenyu
 * @since 2023-04-24 05:33:06
 */
public interface TestService  {

}

/**
 * <p>
 * 测试 服务实现类
 * </p>
 *
 * @author yangzhenyu
 * @since 2023-04-24 05:33:06
 */
@Service
public class TestServiceImpl implements TestService {
    @Autowired
    private OneTestMapper oneTestMapper;
    @Autowired
    private TwoTestMapper twoTestMapper;

}

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

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

相关文章

Cesium项目功能实现记录

目录 1 切换二维地图2 删除默认图层3 隐藏版权信息4 加载cesiumlab切片影像出现栅格阴影5 解决相机控制问题6 cesium中限制地图浏览范围7 鼠标移动显示经纬度8 禁用cesium选取实体操作8.1 禁用操作8.2 双击事件改写8.3 信息隐藏&#xff08;index.html页面&#xff09; 9 自定义…

聚合生态 深耕行业——2023用友生态峰会成功举办

近日&#xff0c;2023用友BIP技术大会生态峰会在北京隆重开幕。来自中国电信、毕马威、上海汉得信息、百度、滴滴、金山云、外企德科、上海诺捷、上海熵央等伙伴代表与全国各行业生态伙伴、企业客户等齐聚一堂&#xff0c;解读企业生态新变革&#xff0c;畅谈行业生态新合作&am…

如何使用阿里云短信服务实现登录页面,手机验证码登录?

1&#xff1a;个人如何使用阿里云短信服务&#xff1f; 2022如何使用个人阿里云短信服务&#xff1f;_linxiMY的博客-CSDN博客添加完成之后&#xff0c;等待审核&#xff01;一般2个小时就会出来审核结果了&#xff0c;这里我因为注册申请时填写规则有误&#xff0c;足足审核了…

MyBatis的缓存、逆向工程、以及分页插件的使用

1、MyBatis的缓存 1.1、MyBatis的一级缓存 一级缓存是SqlSession级别的&#xff0c;通过同一个SqlSession查询的数据会被缓存&#xff0c;下次查询相同的数据&#xff0c;就会从缓存中直接获取&#xff0c;不会从数据库重新访问 使一级缓存失效的四种情况&#xff1a; 不同的…

Spring简介

二、Spring 1、Spring简介 1.1、Spring概述 官网地址&#xff1a;https://spring.io/ Spring 是最受欢迎的企业级 Java 应用程序开发框架&#xff0c;数以百万的来自世界各地的开发人员使用 Spring 框架来创建性能好、易于测试、可重用的代码。 Spring 框架是一个开源的 Jav…

人工大猩猩部队优化器:一种新的面向全局优化问题的自然启发元启发式算法(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 元启发式在解决优化问题方面发挥着关键作用&#xff0c;其中大多数都受到自然界中自然生物集体智慧的启发。本文提出了一种新的…

流程图的简单操作

流程图是一种对过程进行梳理的工具&#xff0c;利用简单的图形符号来将组织步骤连接起来&#xff0c;从而形成完整信息流转图形。该图直观地描述一个工作过程的具体步骤&#xff0c;对准确了解事情是如何进行的&#xff0c;以及决定应如何改进过程有指导性意义。 流程图如何进行…

SwiftUI 中 TabView 如何原生使用类 UIPageView 的翻页样式?

功能需求 我们知道 TabView 是 SwiftUI 中非常好用的布局组织容器,它可以分类组织视图并依次展示给用户。 从 SwiftUI 2.0 开始(iOS 14.0+),TabView 除了常规的以标签(Tab Label)样式显示外,还可以用类似 UIPageView 的样式分页原生显示视图,显得更加简洁: 如上图所…

远程控制软件有哪些

在当今的数字时代&#xff0c;远程访问软件已成为各种规模企业的必备工具。 它允许员工在任何地方工作并远程访问他们的工作计算机和数据。 当今市场上三种最流行的远程访问软件解决方案是 TeamViewer、Splashtop 和 Microsoft Remote Desktop。 在本文中&#xff0c;我们将深入…

【MYSQL】MYSQL数据库命令大全

文章目录 &#x1f337; 1. root 用户登录&#x1f337; 2. 数据库的操作&#x1f337; 3. 常用数据类型&#x1f337; 4. 表的操作⭐ 4.1 创建表&#x1f341; 约束类型 ⭐ 4.2 插入⭐ 4.3 查询&#x1f341; 去重&#xff1a;DISTINCT&#x1f341; 排序&#xff1a;ORDER BY…

Mysql设置表只存储一段时间的数据

使用MySQL的事件调度器&#xff08;Event Scheduler&#xff09;来定期删除表中的数据。 假设你要删除的表是mytable&#xff0c;并且表中有一个名为created_at的日期时间类型的列&#xff0c;存储了每条记录的创建时间。你可以通过以下步骤设置表只存储30天的数据&#xff1a…

CentOS7.x docker安装Oracle11g并使用navicat连接

1.拉取Oracle11g镜像 #因为国内访问docker官方镜像源速度很慢,所以这里使用阿里的 docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g#名字太长,重新打标签 docker tag registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g:latest helowin/oracle_11g 2.启…

采用海明窗,设计FIR滤波器

clc; % 清空命令行窗口 clear; %清空工作区 close all;% fir1函数使用方法 b fir1(48,[0.35 0.65]); freqz(b,1,512)figure b1 fir1(11,0.2); plot(20*log(abs(fft(b1)))/log(10))% E4_1_fir1.m文件的源码 % % 采用海明窗&#xff0c;分别设计长度为41&#xff08;阶数为40…

python基基基基基基础知识

python 基础入门 一、python介绍和安装 1. python语言的特点 语法简洁类库丰富跨平台可扩展源码开放 2. python版本 官方版本 只包含python的解释程序和一些标准库 https://www.python.org/downloads/&#xff0c;安装后打开终端输入python&#xff0c;显示python版本即为安…

手推FlinkML2.2(二)

FeatureHasher&#xff08;特征哈希器&#xff09;是一种用于处理高维分类特征&#xff08;如文本或类别特征&#xff09;的方法。它将特征转换为固定长度的数值向量&#xff0c;以便在机器学习模型中使用。特征哈希通过哈希函数将特征映射到较低维度的向量空间&#xff0c;可以…

【Linux网络】PXE高效批量网络装机

PEX高效批量网络装机 一、部署PXE远程安装服务1.1PXE的优点1.2搭建PXE网络体系的前提条件 二、实现Kincksatrt无人值守安装2.1实验思路&#xff0c;2.2实验&#xff1a;无人值守远程安装2.2.1实现 Kickstart 无人值守安装 一、部署PXE远程安装服务 PXE&#xff08;预启动执行环…

Apple 的 plist 编辑器入门指南:基础操作与高级功能详解

PlistEdit Pro是一款专为macOS编写的最高级属性列表Plist编辑器。对于Mac和IOS开发人员来说&#xff0c;编写应用程序时必须编辑各种列表文件。PlistEdit Pro通过提供直观且功能强大的界面&#xff0c;使编辑这些文件更加容易。它不仅能够复制和粘贴或拖放属性列表数据&#xf…

三种线程安全的List

在单线程开发环境中&#xff0c;我们经常使用ArrayList作容器来存储我们的数据&#xff0c;但它不是线程安全的&#xff0c;在多线程环境中使用它可能会出现意想不到的结果。 多线程中的ArrayList&#xff1a; 我们可以从一段代码了解并发环境下使用ArrayList的情况&#xff…

用友滴滴:商旅费控领域现实中的1+1>2

当前&#xff0c;AI、5G、大数据等数智技术持续演进&#xff0c;千行百业数智化正在加速。在行业数字化之下&#xff0c;企业服务生态也进入新发展阶段&#xff0c;同时也孕育着新合作、新机遇。 在2023用友生态峰会上&#xff0c;用友与滴滴签署战略合作。用友依托数智化商旅费…

塔望3W消费战略产品案丨筷手小厨:筷手功夫饭的差异化致胜之道

筷手小厨 自热米饭 客户&#xff1a;颐海国际控股有限公司 品牌&#xff1a;筷手小厨 服务&#xff1a;3W消费战略 自热米饭产品案 项目背景 颐海国际控股有限公司,成立于2013年。2016年在香港主板上市&#xff08;股票代码&#xff1a;01579.HK&#xff09;。是一家集研…