SpringBoot集成Mybatis Plus【附源码】

1. 背景

作为SpringBoot集成中间件其中的一篇文章吧,既然打算出这么一个系列了,争取做到虽小却全,又精又美的一个系列吧。

Mybatis Plus作为我入行以来,一直接触的一个中间件,也必须集成一下。同时也为初学者带来一些帮吧。

本文拆分自笑小枫-SpringBoot系列,更为精简的介绍了SpringBoot如何集成中间件。如果想系统的使用SpringBoot,可以参考笑小枫-SpringBoot系列

2. Mybatis Plus简介

MyBatis-Plus (opens new window)(简称 MP)是一个MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

2.1 特性

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
  • 内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

2.2 支持数据库

任何能使用 MyBatis 进行 CRUD, 并且支持标准 SQL 的数据库,具体支持情况如下,如果不在下列表查看分页部分教程 PR 您的支持。

  • MySQL,Oracle,DB2,H2,HSQL,SQLite,PostgreSQL,SQLServer,Phoenix,Gauss ,ClickHouse,Sybase,OceanBase,Firebird,Cubrid,Goldilocks,csiidb,informix,TDengine,redshift
  • 达梦数据库,虚谷数据库,人大金仓数据库,南大通用(华库)数据库,南大通用数据库,神通数据库,瀚高数据库,优炫数据库,星瑞格数据库

2.3 框架结构

img

3. 集成Mybatis Plus

3.1 配置基础依赖⚙️

👉首先,项目中会使用到mysql、mybatis-plus等等功能,接下来我们就一一讲解一下。

依赖名称依赖描述版本
SpringBootSpringBoot版本2.7.12
mysql-connector-java:mysql-connector-javamysql驱动8.0.29
com.baomidou:mybatis-plus-boot-startermybatis-plus的依赖3.5.2
com.baomidou:mybatis-plus-generatormybatis-plus的自动生成代码插件3.5.2
org.apache.velocity:velocity-engine-coreJava 的模板引擎框架,用于代码自动生成2.3
org.projectlombok:lombok代码简化,getter/setter、构造器编译时生成1.18.24

完整的pom.xml文件如下:👇

 		<!--使用Mysql数据库-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql-connector-version}</version>
        </dependency>
        
        <!-- mybatis-plus的依赖 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatis-plus-version}</version>
        </dependency>
        
        <!-- mybatis-plus的自动生成代码插件 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>${mybatis-plus-version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.3</version>
        </dependency>

        <!--Lombok管理Getter/Setter/log等-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
            <version>1.18.24</version>
        </dependency>

3.2 引入Mysql配置

👉首先我们需要创建一个Mysql数据库maple,字符集选择utf8。这里我们使用的工具是Navicat Premium 11。当然其他工具都是一样,没有特使要求。

image-20220710141353991

👉创建一张usc_user表,当然有很多字段我们可能暂且不需要,暂且保留,sql如下:👇

CREATE TABLE `usc_user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  `account` varchar(30) DEFAULT NULL COMMENT '用户账号',
  `user_name` varchar(30) DEFAULT NULL COMMENT '用户姓名',
  `nick_name` varchar(30) DEFAULT NULL COMMENT '用户昵称',
  `email` varchar(50) DEFAULT NULL COMMENT '用户邮箱',
  `phone` varchar(11) DEFAULT NULL COMMENT '手机号码',
  `sex` char(1) DEFAULT NULL COMMENT '用户性别(0男 1女 2未知)',
  `avatar` varchar(100) DEFAULT NULL COMMENT '头像地址',
  `salt` varchar(32) DEFAULT NULL COMMENT '用户加密盐值',
  `password` varchar(100) DEFAULT NULL COMMENT '密码',
  `status` char(1) DEFAULT '0' COMMENT '帐号状态(0正常 1停用)',
  `create_id` bigint(20) DEFAULT NULL COMMENT '创建人id',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_id` bigint(20) DEFAULT NULL COMMENT '更新人id',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `delete_flag` tinyint(1) DEFAULT '0' COMMENT '删除标志',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='用户中心-用户信息表';

👉创建好数据库后,配置我们项目的application.yml文件

server:
  port: 8080

spring:
  # 配置数据库连接
  datasource:
    # 数据库连接地址及常用配置
    url: jdbc:mysql://127.0.0.1:3306/maple?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
    # 数据库连接驱动
    driverClassName: com.mysql.cj.jdbc.Driver
    # 数据库用户
    username: root
    # 数据库用户密码
    password: 123456

# 配置mybatis-plus的xml和bean的目录
mybatis-plus:
  mapper-locations: classpath:mapper/*.xml
  configuration:
    # 开启驼峰功能
    map-underscore-to-camel-case: true
    # 日志打印功能
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  #逻辑删除配置
  global-config:
    db-config:
      # 逻辑已删除值(默认为 1)
      logic-delete-value: 1
      # 逻辑未删除值(默认为 0)
      logic-not-delete-value: 0

至此,我们的数据库配置已经完成✌。接下来我们配置一下Mybatis-plus。

3.3 引入MyBatis-Plus配置

配置MyBatis-Plus

  • MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

  • MyBatis-Plus是基于MyBatis框架进一步的封装,增强了MyBatis的功能,只需简单配置,即可快速进行单表 CRUD 操作,从而节省大量时间,以及一些常用工具的封装。

  • MyBatis中文文档地址:https://mybatis.org/mybatis-3/zh/index.html

  • MyBatis-Plus官方地址:https://baomidou.com/

接下来我们就一起配置一下MyBatis-Plus:

这里我们会使用Mybatis-plus生成代码、分页、逻辑删除、常用字段自动注入数据等插件。

👉首先是application.yml

# 配置mybatis-plus的xml和bean的目录
mybatis-plus:
  mapper-locations: classpath:mapper/*.xml
  configuration:
    map-underscore-to-camel-case: true    # 开启驼峰功能
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl    # 日志打印功能
  global-config:  #逻辑删除配置
    db-config:
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

然后我们在config目录创建MybatisPlusConfig.java文件

这里配置下Mybaits的自动填充机制

package com.maple.mybatisplus.config;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import java.util.Date;

/**
 * Mybatis plus配置
 *
 * @author 笑小枫 <https://www.xiaoxiaofeng.com/>
 * @date 2022/7/10
 */
@EnableTransactionManagement
@Configuration
@MapperScan("com.maple.mybatisplus.mapper")
public class MybatisPlusConfig implements MetaObjectHandler {

    /**
     * 新增时,自动填充数据
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("isDeleted", false, metaObject);
        this.setFieldValByName("createId", 1L, metaObject);
        this.setFieldValByName("createTime", new Date(), metaObject);
        this.setFieldValByName("updateId", 1L, metaObject);
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }

    /**
     * 修改时,自动填充数据
     */
    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateId", 1L, metaObject);
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }
}

其中,createId暂时使用占位符,后期结合登录后从session里面获取。

配置自动生成代码插件

👉首先创建BaseEntity.java,所有的实体类都继承该对象,用于存放系统字段,代码如下👇

如果不需要BaseEntity.java或者字段不一致,直接删除或修改即可。

package com.maple.mybatisplus.model;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;

/**
 * @author 笑小枫 <https://www.xiaoxiaofeng.com/>
 * @date 2022/7/11
 */
@Data
public class BaseEntity implements Serializable {

    @TableId(type = IdType.AUTO)
    protected Long id;

    /**
     * 创建人id
     */
    @TableField(value = "create_id", fill = FieldFill.INSERT)
    private Long createId;

    /**
     * 创建时间
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private Date createTime;

    /**
     * 更新人id
     */
    @TableField(value = "update_id", fill = FieldFill.INSERT_UPDATE)
    private Long updateId;

    /**
     * 更新时间
     */
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
}

👉配置MyBatis-Plus代码生成工具,创建util目录,用于存放工具类。

然后创建Generator.java,代码如下:👇

package com.maple.mybatisplus.util;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.maple.mybatisplus.model.BaseEntity;


/**
 * MyBatis-Plus代码生成工具
 *
 * @author 笑小枫 <https://www.xiaoxiaofeng.com/>
 * @date 2019/4/25
 */
public class Generator {

    public static void main(String[] args) {

        // 设置作者
        String auth = "笑小枫 <https://www.xiaoxiaofeng.com/>";
        // 设置父包名
        String packageName = "com.maple.mybatisplus";
        // 设置父包模块名
        String moduleName = "";
        // 指定输出目录
        String path = "D:";
        String url = "jdbc:mysql://127.0.0.1:3306/maple?useUnicode=true&useSSL=false&characterEncoding=utf8";
        String username = "root";
        String password = "Zhang123";
        // 设置需要生成的表名,多个
        String table = "usc_user";
        // 设置过滤表前缀
        String[] tablePrefix = {"usc_"};
        generateTest(auth, packageName, path, moduleName, url, username, password, table, tablePrefix);
    }

    private static void generateTest(String auth, String packageName, String path, String moduleName,
                                     String url, String username, String password, String table, String[] tablePrefix) {
        FastAutoGenerator.create(url, username, password)
                .globalConfig(builder -> builder.author(auth)
                        // 开启 swagger 模式
//                        .enableSwagger()
                        .outputDir(path))
                .packageConfig(builder -> builder.parent(packageName)
                                .moduleName(moduleName)
                        // 设置mapperXml生成路径
//                        .pathInfo(Collections.singletonMap(OutputFile.xml, path))
                )
                .strategyConfig(builder -> builder.addInclude(table)
                        .addTablePrefix(tablePrefix)
                        .entityBuilder()
                        // entity父类,这里把系系统字段抽取出来了,不需要删掉即可
                        .superClass(BaseEntity.class)
                        // 是否开启Lombok
                        .enableLombok()
                        // 设置逻辑删除标志
                        .logicDeleteColumnName("delete_flag")
                        .controllerBuilder()
                        .enableRestStyle()
                )
                .execute();
    }
}

注意:适用版本:mybatis-plus-generator 3.5.1 及其以上版本,对历史版本不兼容!3.5.1 以下的请参考代码生成器旧

  • superClass(BaseEntity.class):entity使用父类BaseEntity.class,减少id、创建人、修改人等系统字段

  • .enableSwagger():这里没有配置swagger,所以我们关闭swagger模式

  • logicDeleteColumnName(“delete_flag”):开启逻辑删除

  • enableLombok():项目使用lombok,减少getter/setter代码的编写,使用插件编译时自动生成

  • controllerBuilder().enableRestStyle():controller使用Rest代码风格

👉然后我们执行该Main方法

image-20220711163747350

然后会在配置的目录下生成com文件夹,本文的在D:盘下。

我们将代码复制到我们的项目中,此时的项目代码结构如下如:👇

注意下mapper.xml存放的位置

image-20231221141344181

3.3 功能测试👌

编写一个测试用例测试一下吧

在UserController.java文件中添加新增用户和根据ID查询用户信息的接口👇

package com.maple.mybatisplus.controller;

import com.maple.mybatisplus.entity.User;
import com.maple.mybatisplus.service.IUserService;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;

/**
 * <p>
 * 用户中心-用户信息表 前端控制器
 * </p>
 *
 * @author 笑小枫 <https://www.xiaoxiaofeng.com/>
 * @since 2023-12-21
 */
@RestController
@RequestMapping("/user")
@AllArgsConstructor
public class UserController {

    private final IUserService userService;

    @PostMapping("/insert")
    public User insert(@RequestBody User user) {
        userService.save(user);
        return user;
    }

    @GetMapping("/selectById/{id}")
    public User selectById(@PathVariable("id") Long id) {
        return userService.getById(id);
    }

}

我们先调用一下插入方法。

参数我们只保留简单的几个,如下👇

###
POST http://localhost:8080/user/insert
Content-Type: application/json

{
  "account": "xiaoxiaofeng",
  "email": "1150640979@qq.com",
  "nickName": "笑小枫",
  "password": "123456",
  "phone": "18300000000",
  "userName": "笑小枫"
}

可以看到数据里面,我们的数据已经插入进去了,这里直接用笑小枫-SpringBoot系列里面的图了,不重新截取了。。。👇

image-20220711220037702

接下来我们调用查询接口看一下👇

GET http://localhost:8080/user/selectById/1

可以看到数据成功返回

image-20231221141928075

OK,大功告成✌️

4. 贴几个常用的单表操作吧

简单的贴几个注意点吧,更多的操作可以参考Mybatis Plus的官网,或者给我留言哈,精通各种单表不想写sql的骚操作😂😂😂

package com.maple.mybatisplus.service.impl;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.maple.mybatisplus.entity.User;
import com.maple.mybatisplus.mapper.UserMapper;
import com.maple.mybatisplus.service.IUserService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Objects;

/**
 * <p>
 * 用户中心-用户信息表 服务实现类
 * </p>
 *
 * @author 笑小枫 <https://www.xiaoxiaofeng.com/>
 * @since 2023-12-21
 */
@Service
@AllArgsConstructor
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {

    private final UserMapper userMapper;

    private void selectTest(User user) {
        // List查询
        List<User> userList = userMapper.selectList(Wrappers.lambdaQuery(User.class)
                // 精确查询
                .eq(User::getAccount, user.getAccount())
                // 存在即查询,不存在即不查询
                .eq(Objects.nonNull(user.getSex()), User::getSex, user.getSex())
                // 模糊查询
                .like(User::getNickName, user.getNickName())
                // 不在数组中
                .notIn(User::getId, 1, 2, 3)
                // 排序
                .orderByDesc(User::getCreateTime)
        );

        // update user对象中,如果为null不更新,如果需要强制更新为null,用set
        int updateNum = userMapper.update(user, Wrappers.lambdaUpdate(User.class)
                .set(User::getPhone, null)
                .eq(User::getId, user.getId()));

        // 删除这里是逻辑删除,修改的deleteFlag=true,如果不配置逻辑删除,则是物理删除
        // 如果配置了逻辑删除,使用mybatis plus提供的查询,查询不出删除的数据;如果直接在xml里面,可以查询出删除的数据
        int deleteNum = userMapper.deleteById(user.getId());
    }
}

5. 小结

好啦,本文就到这里了,我们简单的总结一下,主要介绍了以下内容👇👇

  • SpringBoot集成mysql数据库
  • 集成Mybatis Plus框架
  • 通过一个简单的例子演示了一下使用Mybatis Plus进行数据插入和查询

6. 项目源码💕

本文到此就结束了,如果帮助到你了,帮忙点个赞👍

本文源码:https://github.com/hack-feng/maple-product/tree/main/maple-mybatis-plus

🐾我是笑小枫,全网皆可搜的【笑小枫】

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

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

相关文章

大数据传输慢的真正原因与解决方案

随着企业数据不断增长&#xff0c;大数据传输已成为一项至关重要的任务。然而&#xff0c;许多企业在处理大数据传输时频繁遭遇传输速度慢的问题。本文将深入探讨大数据传输速度慢的根本原因&#xff0c;并提供一些切实有效的解决方案。 大数据传输在企业中的重要性不言而喻&am…

旧衣回收小程序搭建:降低企业成本,提高回收效率!

在人们环保意识提升下&#xff0c;旧衣回收行业受到了大众的关注&#xff0c;同时旧衣回收具有门槛低、利润大的优势。在我国&#xff0c;回收行业不仅帮助普通人就业获利&#xff0c;还对环保做出了较大贡献。因此&#xff0c;旧衣回收行业成为了当下的热门商业模式&#xff0…

行为树(Behavior Trees)

行为树&#xff08;Behavior Trees&#xff09;是一种在游戏开发中广泛使用的AI设计模式&#xff0c;主要用于描述AI的行为和决策过程&#xff0c;实现更加智能和自然的游戏AI。它由多个节点组成&#xff0c;每个节点代表一个行为或决策&#xff0c;按照特定的方式连接在一起&a…

智能助手的巅峰对决:ChatGPT对阵文心一言

在人工智能的世界里&#xff0c;ChatGPT与文心一言都是备受瞩目的明星产品。它们凭借先进的技术和强大的性能&#xff0c;吸引了大量用户的关注。但究竟哪一个在智能回复、语言准确性、知识库丰富度等方面更胜一筹呢&#xff1f;下面就让我们一探究竟。 首先来谈谈智能回复能力…

数据结构学习 jz41 数据流中的中位数

关键词&#xff1a;排序 大顶堆 小顶堆 题目&#xff1a;数据流中的中位数 这道题我没有想到用两个堆来做。 思路&#xff1a; 关键&#xff1a;维护两个堆&#xff0c;一个大顶堆一个小顶堆。 大顶堆&#xff1a;装较小的那一半的数&#xff0c;它的顶就是较小那一半数的最…

淘宝搜索引擎API接口关键字搜索商品列表获取商品详情价格评论销量API

item_search-按关键字搜索淘宝商品 公共参数 查看API完整文档 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,it…

如何在企业微信开发者中心使用内网穿透工具回调本地接口服务

文章目录 1. Windows安装Cpolar2. 创建Cpolar域名3. 创建企业微信应用4. 定义回调本地接口5. 回调和可信域名接口校验6. 设置固定Cpolar域名7. 使用固定域名校验 企业微信开发者在应用的开发测试阶段&#xff0c;应用服务通常是部署在开发环境&#xff0c;在有数据回调的开发场…

Mysql root 密码重置详解

文章目录 1 概述1.1 前言1.2 mysql 版本查询 2 windows 操作系统2.1 mysql 8 及以上版本2.1.1 关闭 mysql 服务2.1.2 通过无认证方式启动 mysql2.1.3 新开窗口&#xff0c;登录 mysql&#xff0c;重置密码 1 概述 1.1 前言 不同的操作系统&#xff08;如&#xff1a;windows、…

Eureka 本机集群实现

距离上次发布博客已经一年多了&#xff0c;主要就是因为考研&#xff0c;没时间学习技术的内容&#xff0c;现在有时间继续完成关于代码方面的心得&#xff0c;希望跟大家分享。 今天在做一个 Eureka 的集群实现&#xff0c;我是在本电脑上跑的&#xff0c;感觉这个挺有意思&a…

AI智能化办公:巧用ChatGPT高效搞定Excel数据分析

文章目录 1. 自动提取关键信息2. 自动生成分析报告3. 自动回答问题4. 自动生成图表《巧用ChatGPT高效搞定Excel数据分析》关键点内容简介作者简介 《AI智能化办公&#xff1a;ChatGPT使用方法与技巧从入门到精通》图书特色内容简介作者简介 随着人工智能技术的不断发展&#xf…

【ELK 学习】ElasticSearch

ELK&#xff1a;ElasticSearch存储&#xff0c;Logstash收集&#xff0c;Kibana展示 版本较多&#xff0c;使用时需要版本匹配&#xff0c;还需要和mysql版本匹配&#xff08;elastic官网给了版本对应关系&#xff09; 本次使用的版本es6.8.12 filebeat 轻量级的数据收集工具 …

web前端第二次作业

1&#xff0c;计算用户指定的数值内的奇数和 效果运行图&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>计算用户指定的数值内的奇数和</title> </head>…

【Dynamo学习笔记】基础入门

目录 前言1 Dynamo的界面2 节点的操作3 几何形体的创建与编辑3.1 几何形体的创建3.1.1 直线3.1.2 圆形3.1.3 多边形3.1.4 长方体3.1.5 球体 3.2 几何形体的编辑3.2.1 坐标点的平移复制3.2.2 几何形体的平移复制3.2.3 几何形体的镜像复制3.2.4 几何形体的旋转复制3.2.5 几何形体…

数字前端/FPGA设计——握手与反压问题

声明&#xff1a;本文来自0431大小回 前言&#xff1a;在芯片设计或者FPGA设计过程中&#xff0c;流水设计是经常用到的&#xff0c;但是考虑数据安全性&#xff0c;需要与前后级模块进行握手通信&#xff0c;这时候就需要对流水数据进行反压处理&#xff0c;本文将具体介绍握手…

尺寸公差 DTAS3D产品功能介绍

DTAS 3D (Dimensional Tolerance Analysis System 3D)基于蒙特卡洛原理&#xff0c;按照产品的公差及装配关系进行建模&#xff0c;然后进行解析、仿真计算&#xff0c;最终预测产品设计是否能够满足其关键尺寸要求&#xff0c;同时预测产品合格率&#xff0c;并进行根源分析。…

【NI国产替代】NI‑9232,3通道,102.4 kS/s/ch,±30 V,C系列声音与振动输入模块

3通道&#xff0c;102.4 kS/s/ch&#xff0c;30 V&#xff0c;C系列声音与振动输入模块 NI‑9232可以测量来自集成电子压电(IEPE)和非IEPE传感器的信号&#xff0c;例如加速度计、转速计和接近式探针。 NI‑9232还可兼容智能TEDS传感器。\n\nNI‑9232集成了软件可选的AC/DC耦合…

Fpga开发笔记(二):高云FPGA发开发软件Gowin和高云fpga基本开发过程

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/135620590 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

spring Security源码分析-13种过滤器详解

13种核心过滤器 spring security的13个核心过滤器(按执行顺序陈列): WebAsyncManagerIntegrationFilterSecurityContextPersistenceFilterHeaderWriterFilterLogoutFilterUsernamePasswordAuthenticationFilterDefaultLoginPageGeneratingFilterDefaultLogoutPageGeneratingF…

Windows Server 2019配置DNS服务器

正文共&#xff1a;1234 字 31 图&#xff0c;预估阅读时间&#xff1a;1 分钟 我们在给Windows Server添加角色和功能时&#xff0c;会发现有一项“远程桌面服务安装”&#xff0c;它的介绍为“为虚拟桌面基础结构&#xff08;Virtual Desktop Infrastructure&#xff0c;VDI&…

java处理16进制字符串的一些方法和基础知识

前言&#xff1a;本篇文章是对于基础数据的处理的一些简单经验总结里边包含了一些基础的数据储存和数据转化的一些知识&#xff0c;同样也包含有部分快捷的数据处理方法。主要用于个人知识的一个记录和方便进行对应的数据转换和处理。 1、bit,字节和字的关系 1.1 bit和字节的…