Mybatis-plus是使用,告别繁琐的CRUD编写,自动生成直接使用

目录

一、简介

1. 是什么

2. 特性

3. 框架结构

4. 常用注解

二、搭建使用

1. 依赖

2. 生成器

3. 生成

4. 引用

5. 路径访问

三、测试

四、雪花ID

每篇一获


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

一、简介

Mybatis-plus官方文档icon-default.png?t=N7T8https://baomidou.com/pages/24112f/

1. 是什么

Mybatis-plus是一个基于Mybatis的增强工具,它在Mybatis的基础上进行了扩展,提供了更加便捷、高效的数据库操作方式。Mybatis-plus通过封装Mybatis的API,简化了开发人员对数据库的操作,提高了开发效率。

Mybatis-plus提供了一些特性和功能,包括自动生成SQL、性能优化、多种查询方式、代码生成器、分页插件、逻辑删除等。通过这些功能,开发人员不需要编写繁琐的SQL语句,可以通过简单的编码实现对数据库的操作。例如,使用Mybatis-plus可以通过简单的注解和方法调用实现增删改查操作,大大简化了开发流程。

此外,Mybatis-plus还提供了代码生成器,可以根据数据库表自动生成实体类、Mapper接口和XML文件,减少了手动编写重复代码的工作量,提高了开发效率。同时,Mybatis-plus还提供了分页插件,可以方便地实现分页查询功能,减少了对分页逻辑的重复编写。

总之,Mybatis-plus是一个强大的增强工具,它简化了Mybatis的使用方式,提高了开发效率,使开发人员能够更加专注于业务逻辑的实现。因此,Mybatis-plus在Java项目中被广泛应用,成为了Mybatis的重要补充和扩展。

支持的数据库 

任何能使用 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. 特性

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 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 操作智能分析阻断,也可自定义拦截规则,预防误操作

3. 框架结构

框架结构图

Mybatis-plus的框架结构主要包括以下几个核心部分:

1. Entity:实体类,用于映射数据库表的字段和Java对象的属性。在Mybatis-plus中,可以通过注解或配置文件来定义实体类,并与数据库表进行映射。

2. Mapper:Mapper接口,用于定义数据库操作的方法。在Mybatis-plus中,Mapper接口可以通过继承Mybatis-plus提供的BaseMapper接口来获得通用的增删改查方法,也可以自定义SQL方法来实现特定的数据库操作。

3. Service:Service层,用于封装业务逻辑。在Mybatis-plus中,Service层通常与Mapper层配合使用,通过调用Mapper接口中的方法来实现业务逻辑。

4. Controller:Controller层,用于处理用户请求和返回响应。在Mybatis-plus中,Controller层通常与Service层配合使用,通过调用Service层的方法来处理业务逻辑,并返回相应的结果给用户。

5. SQL解析器:Mybatis-plus内置了SQL解析器,可以根据方法名自动生成SQL,简化了SQL的编写。

6. 分页插件:Mybatis-plus提供了分页插件,可以方便地实现分页查询功能。

总的来说,Mybatis-plus的框架结构与传统的Mybatis框架类似,但在Mapper接口的定义、SQL解析和分页插件等方面进行了增强和优化,使得开发人员能够更加便捷地进行数据库操作和业务逻辑的实现。

4. 常用注解

本文将介绍 MybatisPlus 注解包相关类详解(更多详细描述可点击查看源码注释)

  • 1. @TableName:指定实体对应的数据库表名。
  • 2. @TableId:标识实体的主键字段。
  • 3. IdType:指定主键生成策略。
  • 4. @TableField:标识实体对应的数据库字段名。
  • 5. FieldStrategy:指定字段的策略(例如,自动填充、逻辑删除等)。
  • 6. FieldFill:指定字段填充策略。
  • 7. @Version:用于乐观锁机制,标识乐观锁字段。
  • 8. @EnumValue:指定枚举类字段对应的数据库存储值。
  • 9. @TableLogic:指定逻辑删除字段。
  • 10. @SqlParser:指定 SQL 解析规则。
  • 11. @KeySequence:指定序列的名称。
  • 12. @InterceptorIgnore:忽略拦截器。
  • 13. @OrderBy:指定查询结果的排序方式。

更加详细的可以观看官方文档中 : MybatisPlus注解文档icon-default.png?t=N7T8https://baomidou.com/pages/223848/#tablename

二、搭建使用

1. 依赖

我们创建一个spring-boot项目。

在pom.xml文件中引用以下依赖 : 

        <!-- mybatis-plus依赖 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version></dependency><!-- mybatis-plus 代码生成器的依赖 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.2</version></dependency><!--MYSQL 依赖--><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><!--模板引擎freemarker依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId></dependency><!-- 雪花ID的依赖--><dependency><groupId>com.github.yitter</groupId><artifactId>yitter-idgenerator</artifactId><version>1.0.6</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><groupId>com.Jun.depend</groupId><artifactId>demo01</artifactId><version>0.0.1-SNAPSHOT</version><name>demo01</name><description>demo01</description><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.6.13</spring-boot.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><!-- mybatis-plus依赖 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version></dependency><!-- mybatis-plus 代码生成器的依赖 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.2</version></dependency><!--MYSQL 依赖--><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><!--模板引擎freemarker依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId></dependency><!-- 雪花ID的依赖--><dependency><groupId>com.github.yitter</groupId><artifactId>yitter-idgenerator</artifactId><version>1.0.6</version></dependency></dependencies><!--只负责定义依赖--><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><mainClass>com.jun.demo01.Demo01Application</mainClass><skip>true</skip></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build></project>

application.yml 配置文件的配置如下 : 

#server:
#    port: 8080
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/bookshop?useUnicode=true&characterEncoding=utf-8&useSSL=falseusername: rootpassword: 123456
mybatis-plus:type-aliases-package:  com.jun.demo01.text #指定实体类路径configuration:map-underscore-to-camel-case: true #驼峰命名规范

2. 生成器

我这里根据管方的说生成器进行了改善,创建一个生成器。

MySQLGenerator :

package com.jun.demo01;import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import lombok.extern.slf4j.Slf4j;import java.util.Arrays;
import java.util.Collections;
import java.util.List;@Slf4j
public class MySQLGenerator {private final static String URL = "jdbc:mysql://localhost:3306/bookshop";// 数据库连接URLprivate final static String USERNAME = "root";// 数据库用户名private final static String PASSWORD = "123456";// 数据库密码private final static DataSourceConfig.Builder DATA_SOURCE_CONFIG =new DataSourceConfig.Builder(URL, USERNAME, PASSWORD);public static void main(String[] args) {// 创建FastAutoGenerator对象,传入数据源配置FastAutoGenerator.create(DATA_SOURCE_CONFIG)// 全局配置,传入扫描器,构建器,并设置作者,输出目录,注释日期,日期类型.globalConfig((scanner, builder) ->builder.author(scanner.apply("请输入作者名称?")).outputDir(System.getProperty("user.dir") + "\\src\\main\\java").commentDate("yyyy-MM-dd").dateType(DateType.TIME_PACK))// 包配置,传入构建器,并设置父包,实体,服务,服务实现,映射器,xml,xml路径信息.packageConfig((builder) ->builder.parent("com.jun.demo01").entity("entity").service("service").serviceImpl("service.impl").mapper("mapper").xml("mapper.xml").pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "\\src\\main\\resources\\mapper")))// 注入配置,传入构建器,并设置输出文件前执行的函数.injectionConfig((builder) ->builder.beforeOutputFile((a, b) -> log.warn("tableInfo: " + a.getEntityName()))).strategyConfig((scanner, builder) ->// 添加表名builder.addInclude(getTables(scanner.apply("请输入表名,多个英文逗号分隔?所有输入 all")))// 添加去除表前缀设置.addTablePrefix("tb_", "t_", "lay_", "meeting_", "sys_")// 实体配置.entityBuilder()// 启用链式模型.enableChainModel()// 启用 Lombok.enableLombok()// 启用表字段注解.enableTableFieldAnnotation()// 控制器配置.controllerBuilder()// 启用 REST 样式.enableRestStyle()// 启用连字符样式.enableHyphenStyle()// 构建.build())// 模板引擎.templateEngine(new FreemarkerTemplateEngine())// 执行.execute();}protected static List<String> getTables(String tables) {return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));}}

其中修改根据自己的数据源进行修改,还有软件包也需要跟自己的项目中的包结构一直。

3. 生成

根据如图,进行执行生成器 

执行的其中在控制器需要输入一个作者名称,可以根据自己的喜好输入,之后就是输入一个你连接数据库中的一个表名称,这个也就是你要生成代码的表。

生成完成后会弹出你生成这个表的代码的本地路径。

生成后的所有实体,服务,服务实现,映射器,xml,xml路径信息

4. 引用

生成完成之后,我们需要在生成后的Mappe类中,直接一个@Repository注解

如图 : 

之后就是需要在启动类中,增加@MapperScan注解,需要填写到mapper包

5. 路径访问

最后就是编写访问数据的路径,在控制器中编写代码 

BookController


 

package com.jun.demo01.controller;import com.github.yitter.idgen.YitIdHelper;
import com.jun.demo01.entity.Book;
import com.jun.demo01.service.IBookService;
import kotlin.Metadata;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** 书本信息表 前端控制器* @author cloudjun* @since 2023-12-16*/
@RestController
@RequestMapping("/book")
public class BookController {@Autowiredprivate IBookService iBookService;//获取列表@RequestMapping("/list")public Object list(){return  iBookService.list();}//保存@RequestMapping("/save")public Object save(Book book){//设置雪花ID需要将类型修改为Long类型book.setId(YitIdHelper.nextId());//YitIdHelper.nextId()获取雪花ID并且赋值到对象编号中return  iBookService.save(book);}//删除@RequestMapping("/del")public Object remove(Book book){return  iBookService.removeById(book);}//更新@RequestMapping("/update")public Object update(Book book){return  iBookService.updateById(book);}}

三、测试

访问我们配置好的路径,进行数据的访问,对数据进行编辑

在演示一个增加,如图所示:

在查看数据表 : 

四、雪花ID

Snowflake官方文档icon-default.png?t=N7T8https://docs.snowflake.com/en/guides-overview

雪花ID(Snowflake ID)是一种分布式唯一ID生成算法,它的作用是生成全局唯一的ID,适用于分布式系统中对ID唯一性要求较高的场景。雪花ID的特点包括:

1. 分布式唯一性:雪花ID生成算法能够在分布式系统中生成全局唯一的ID,避免了不同节点生成ID的重复。

2. 有序性:雪花ID生成的ID是趋势递增的,即生成的ID在时间上是有序的,这样有利于数据库索引的性能优化。

3. 高性能:雪花ID生成算法是基于位运算和时间戳的快速算法,生成ID的效率较高。

4. 简单易用:雪花ID生成算法相对简单,实现起来比较容易,能够满足大部分分布式系统的ID生成需求。

雪花ID通常由64位的二进制组成,其中包括一个符号位、一个时间戳部分、一个机器ID部分、一个数据中心ID部分和一个序列号部分。这些部分的组合使得雪花ID具有全局唯一性和有序性。

总的来说,雪花ID的作用是在分布式系统中生成全局唯一的有序ID,它的特点包括分布式唯一性、有序性、高性能和简单易用,因此在分布式系统中被广泛应用于唯一ID的生成。

每篇一获

学习Mybatis-plus和Snowflake的使用可以带来以下收获:

1. 提高开发效率:Mybatis-plus提供了简化数据库操作的方法,使得开发人员能够更加专注于业务逻辑的实现,从而提高开发效率。而Snowflake可以快速生成全局唯一的ID,避免了手动编写ID生成算法的复杂性,也提高了开发效率。

2. 优化数据库性能:Mybatis-plus提供了SQL解析器和分页插件等功能,可以优化数据库查询的性能,提高系统的响应速度。同时,Snowflake生成的ID是有序的,有利于数据库索引的优化,进一步提高数据库的性能。

3. 实现分布式系统:Mybatis-plus和Snowflake都是分布式系统中常用的工具,学习它们的使用可以帮助开发人员更好地实现分布式系统,提高系统的可扩展性和可靠性。

4. 拓展技术视野:学习Mybatis-plus和Snowflake的使用可以拓展开发人员的技术视野,了解更多关于Java开发的技术和工具,提高自身的综合能力。

综上所述,学习Mybatis-plus和Snowflake的使用可以带来多方面的收获,对于Java开发人员来说是一项有益的技能。

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

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

相关文章

VRRP协议

一.基本概念 1.概念 VRRP能够在不改变组网的情况下&#xff0c;将多台路由器虚拟成一个虚拟路由器&#xff0c;通过配置虚拟路由器的IP地址为默认网关&#xff0c;实现网关的备份。协议版本&#xff1a;VRRPv2&#xff08;常用&#xff09;和VRRPv3&#xff1a;VRRPv2仅适用于…

【基于卷积神经网络的疲劳检测与预警系统的设计与实现】

基于卷积神经网络的疲劳检测与预警系统的设计与实现 引言数据集介绍技术与工具1. OpenCV2. TensorFlow3. 卷积神经网络&#xff08;CNN&#xff09; 系统功能模块1. 视频采集模块2. 图像预处理模块3. 人脸识别模块4. 疲劳程度判别模块5. 报警模块 系统设计创新点1. 实时监测与预…

【LeetCode刷题笔记(6-1)】【Python】【三数之和】【哈希表】【中等】

文章目录 引言三数之和题目描述示例示例1示例2示例3 提示 解决方案1&#xff1a;【三层遍历查找】解决方案2&#xff1a;【哈希表】【两层遍历】结束语 三数之和 引言 编写通过所有测试案例的代码并不简单&#xff0c;通常需要深思熟虑和理性分析。虽然这些代码能够通过所有的…

【STM32】STM32学习笔记-EXTI外部中断(11)

00. 目录 文章目录 00. 目录01. 中断系统02. 中断执行流程03. STM32中断04. NVIC基本结构05. NVIC优先级分组06. EXTI简介07. EXTI基本结构08. AFIO复用IO口09. EXTI框图10. 计数器模块11. 旋转编码器简介12. 附录 01. 中断系统 中断&#xff1a;在主程序运行过程中&#xff0…

韩顺平学java第二阶段之BS框架002

这边讲了php都可以&#xff0c;反正就是打通双方的间隔就行了∑(っД;)っ卧槽&#xff0c;不见了

t-SNE高维数据可视化实例

t-SNE&#xff1a;高维数据分布可视化 实例1&#xff1a;自动生成一个S形状的三维曲线 实例1结果&#xff1a; 实例1完整代码&#xff1a; import matplotlib.pyplot as plt from sklearn import manifold, datasets """对S型曲线数据的降维和可视化"&q…

Web攻防07_文件上传基础_文件上传靶场upload-labs-docker

文章目录 项目安装安装docker进入项目目录&#xff1a;一键部署运行 靶场关卡1、前端JS验证如何判断是否为前端验证解法1&#xff1a;抓包解法2&#xff1a;禁用JS 2、.htaccess解法 3、MIME类型解法 4、文件头判断5、黑名单过滤-过滤不严-单次过滤为空格6、黑名单-过滤不严-系…

Python生成器(Generator)(继续更新...)

学习网页&#xff1a; Welcome to Python.orghttps://www.python.org/https://www.python.org/ Python生成器 生成器&#xff08;Generator&#xff09;是 Python 的一种特殊类型的迭代器。生成器允许你创建自己的数据流&#xff0c;每次从数据流中获取一个元素&#xff0c;…

活动 | Mint Blockchain 将于 2024 年 1 月 10 号启动 MintPass 限时铸造活动

MintPass 是由 Mint Blockchain 官方发行的 Mint 网络和社区的 NFT 通行证&#xff0c;将在 2024 年 1 月份启动限时铸造活动。今天这篇文章会着重向大家介绍即将举办的 MintPass 活动的基础信息。 MintPass 有 2 种类型&#xff1a; 类型 1&#xff1a;Mint Genesis NFT Mint…

Unity中Shader URP 简介

文章目录 前言一、URP&#xff08;Universal Render Pipeline&#xff09;由名字可知&#xff0c;这是一个 通用的 渲染管线1、Universal&#xff08;通用性&#xff09;2、URP的由来 二、Build-in Render Pipeline&#xff08;内置渲染管线&#xff09;1、LWRP&#xff08;Lig…

【JavaEE】多线程案例 - 定时器

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文于《JavaEE》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…

C语言:求和1+1/2-1/3+1/4-1/5+……-1/99+1/100

#include<stdio.h> int main() {int i 0;double sum 0.0;int flag 1;for (i 1;i < 100;i){sum 1.0 / i * flag;flag -flag;}printf("sum%lf\n", sum);return 0; }

设计模式——策略模式

引言 策略模式是一种行为设计模式&#xff0c; 它能让你定义一系列算法&#xff0c; 并将每种算法分别放入独立的类中&#xff0c; 以使算法的对象能够相互替换。 问题 一天&#xff0c; 你打算为游客们创建一款导游程序。 该程序的核心功能是提供美观的地图&#xff0c; 以…

【每日一题】使用最小花费爬楼梯

文章目录 Tag题目来源解题思路方法一&#xff1a;动态规划空间优化 写在最后 Tag 【动态规划空间优化】【数组】【2023-12-17】 题目来源 746. 使用最小花费爬楼梯 解题思路 方法一&#xff1a;动态规划 思路 假设数组 cost 的长度为 n&#xff0c;则 n 阶楼梯分别对应下标…

Python往事:ElementTree的单引号之谜

最近在针对某款设备的界面xml进行更新过程中&#xff0c;被告知回稿的字串放在了一个excel文件中&#xff0c;而我要上传到服务器的界面用语是用xml文件封装的。再经过详细求证了翻译组提供excel文件的原因后&#xff0c;我决定用python来完成界面用语xml的更新&#xff0c;但是…

OOD 异常GPT:使用大型视觉语言模型检测工业异常

paper link https://arxiv.org/abs/2308.15366video demo https://youtu.be/lcxBfy0YnNAgithub https://github.com/CASIA-IVA-Lab/AnomalyGPT在线使用 https://huggingface.co/spaces/FantasticGNU/AnomalyGPT 摘要 大型视觉语言模型&#xff08;LVLM&#xff09;如MiniGPT-4…

大数据CloudSim应用实践

CloudSimExampleA.java 1准备 1.1操作系统 本实验在Windows 7 或Windows 10系统运行均可。 1.2软件 cloudsim-3.0.3.zip&#xff1b; commons-math3-3.2-bin.zip&#xff1b; jdk-8u152-windows-x64.exe&#xff1b; eclipse-jee-neon-3-win32-x86_64 所需资料链接&#xff1…

W25Q64(模拟SPI)读写数据的简单应用

文章目录 一、W25Q64是什么&#xff1f;二、使用步骤1.硬件1.引脚说明2.硬件连接3.设备ID4.内部框架5.指令集指令集1指令集2 2.软件1.W25Q64引脚定义代码如下&#xff08;示例&#xff09;&#xff1a;2.W25Q64初始化代码如下&#xff08;示例&#xff09;&#xff1a;3.W25Q64…

【IC前端虚拟项目】MVU模块方案与背景熟悉

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客 mvu这个模块是干嘛用的呢&#xff1f;从这个名字就可以看出来move_unit&#xff0c;应该是做数据搬运的。很多指令级中都会有数据搬运的指令&#xff0c;这类指令的作用一般是在片内片外缓存以及通用专用…

Java基础语法之抽象类和接口

抽象类 什么是抽象类 并不是所有的类都是用来描述对象的&#xff0c;这样的类就是抽象类 例如&#xff0c;矩形&#xff0c;三角形都是图形&#xff0c;但图形类无法去描述具体图形&#xff0c;所以它的draw方法无法具体实现&#xff0c;这个方法就可以没设计成抽象方法&…