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

news/2024/4/18 19:13:32/文章来源:https://blog.csdn.net/weixin_38316697/article/details/130347003

文章目录

  • 前言
      • 多数据源 使用 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: onedruid:initial-size: 20min-idle: 20maxActive: 200maxWait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: falsepoolPreparedStatements: truemaxPoolPreparedStatementPerConnectionSize: 50filters: stat,wall,slf4jconnectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000datasource:one:url: jdbc:mysql://localhost:3306/TESTONEDB?characterEncoding=UTF-8&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=trueusername: TESTONEpassword: TESTONEdriver-class-name: com.mysql.cj.jdbc.Drivertwo:url: jdbc:mysql://localhost:3306/TESTTWODB?characterEncoding=UTF-8&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=trueusername: TESTTWOpassword: TESTTWOdriver-class-name: com.mysql.cj.jdbc.Driver
#mybatis plus 设置
mybatis-plus:mapper-locations: classpath*:mapper/*/*Mapper.xmlglobal-config:# 关闭MP3.0自带的bannerbanner: falsedb-config:#主键类型  0:"数据库ID自增",1:"该类型为未设置主键类型", 2:"用户输入ID",3:"全局唯一ID (数字类型唯一ID)", 4:"全局唯一ID UUID",5:"字符串全局唯一ID (idWorker 的字符串表示)";id-type: ASSIGN_ID# 默认数据库表下划线命名table-underline: trueconfiguration:# 这个配置会将执行的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 {@Autowiredprivate DynamicRoutingDataSource dataSource;//代码生成@Testpublic 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 definitionCREATE 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 {@Autowiredprivate OneTestMapper oneTestMapper;@Autowiredprivate TwoTestMapper twoTestMapper;}

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

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

相关文章

多通道振弦传感器无线采集仪 数字传感器起始通道分配

多通道振弦传感器无线采集仪 数字传感器起始通道分配 寄存器 DS_CHNUM(299)用于设置读取到的数字传感器数据从哪个通道开始占用&#xff0c;默认为 1。 单个数字传感器占用的通道数量与具体的传感器类型有关&#xff0c;例如&#xff1a;每个激光测距仪会占用 1 个通道&#xf…

Python爬虫之MongoDB

目录 一、Mongo概述 二、安装&下载 1.下载&#xff1a; 2.安装 三、基本命令 插⼊数据 查询数据 修改数据 删除数据 索引 四、Python与MongoDB交互 1.安装pymongo 2.使⽤ 一、Mongo概述 MongoDB是什么&#xff1f; MongoDB是⾮关系型数据库(No sql) 为啥需要…

基于C#asp.net心里咨询服务网站系统

功能模块&#xff1a; 主要分为管理员和注册用户&#xff0c;注册用户可以查看所有人发布的心里文章&#xff0c;情感在线问答&#xff0c;查询相似问题&#xff0c;以及进入论坛进行交流&#xff08;发帖跟帖评论收藏等&#xff09;后台管理主要是针对个人信息修改 管理员对注…

商品价格监控业务场景,API数据分析

商品价格监控指的是对特定商品价格进行实时监控和跟踪&#xff0c;及时更新最新价格并分析价格变化的行为。这种监控可以帮助企业及时了解市场行情&#xff0c;并根据价格变化情况做出相应的调整&#xff0c;以更好地应对市场变化。 一般来说&#xff0c;商品价格监控需要以下…

KVM虚拟机的磁盘无损扩容方法-qcow2格式的

起因&#xff1a;我的KVM主机上安装了基于Debian11的 虚拟机母鸡&#xff0c;其他虚拟机都由此克隆而来。因为最初只配置了8G的虚拟硬盘&#xff0c;因此在需要占用比较大的空间的应用时&#xff0c;就比较麻烦。度娘等中文搜索结果没找到答案&#xff0c;只能google了。 这里…

JavaScript概述四(DOM文档对象模型)

1.DOM(Document Object Model) 会把网页里面的元素当成对象去操作,包含对象的属性,属性值,方便我们去 操作网页。 整个页面最终会形成一个对象 :document ,页面里面的所有的元素(如 标签 ) 最终都会转换成 js 里面的对象。 1.1 获取页面的元素&#xff08;通过选择器&#xff0…

JS-11A/224时间继电器 JOSEF约瑟 板前、板后接线

系列型号&#xff1a; JS-11A/11集成电路时间继电器&#xff1b;JS-11A/12集成电路时间继电器&#xff1b; JS-11A/13集成电路时间继电器&#xff1b;JS-11A/136集成电路时间继电器&#xff1b; JS-11A/137集成电路时间继电器&#xff1b;JS-11A/22集成电路时间继电器&#…

数据结构与算法(三):数论(树形结构、二叉树、二叉搜索树、红黑树、Btree、B+Tree、赫夫曼树、堆树)

数论&#xff08;树形结构、二叉树、二叉搜索树、红黑树、Btree、BTree、赫夫曼树、堆树&#xff09; 树形结构概念 在树形结构里面重要的术语&#xff1a; 结点&#xff1a;树里面的元素。 父子关系&#xff1a;结点之间相连的边 子树&#xff1a;当结点大于1时&#xff0…

华为OD机试真题(Java),数字涂色(100%通过+复盘思路)

一、题目描述 疫情过后&#xff0c;希望小学终于又重新开学了&#xff0c;三年二班开学第一天的任务是将后面的黑板报重新制作。 黑板上已经写上了N个正整数&#xff0c;同学们需要给这每个数分别上一种颜色。 为了让黑板报既美观又有学习意义&#xff0c;老师要求同种颜色的…

LoadRunner参数化最佳实践:让你的性能测试更加出色!

距离上次使用loadrunnr 已经有一年多的时间了。初做测试时在项目中用过&#xff0c;后面项目中用不到&#xff0c;自己把重点放在了工具之外的东西上&#xff0c;认为性能测试不仅仅是会用工具&#xff0c;最近又想有一把好的利器毕竟可以帮助自己更好的完成性能测试工作。这算…

QMS-云质说质量 - 1 张小泉的质量危机

云质QMS原创 转载请注明来源 作者&#xff1a;王洪石 引言 百年老店的拍蒜质量门 最近张小泉拍蒜断刀事件&#xff0c;吸引了全民关注&#xff0c;虽然随后发布了“断刀召集令”&#xff0c;但从事件发生到后续拖沓且不专业的应对&#xff0c;张小泉肯定是“失蒜”了。 张小泉…

Spring Security实战(六)—— 跨域与CORS

跨域是一种浏览器同源安全策略&#xff0c;即浏览器单方面限制脚本的跨域访问。 一、认识跨域 跨域&#xff08;Cross-Origin&#xff09;指的是在Web开发中&#xff0c;当一个网页的内容要从不同源&#xff08;即不同的域名、协议或端口&#xff09;获取时&#xff0c;就会发…

ajax的介绍及使用

ajax的介绍 开发流程 前端 ajax:前后端沟通的桥梁 后端 ajax介绍 ajax叫做异步的Javascript和xml ajax通过浏览器与服务器&#xff08;后端&#xff09;进行少量数据交互&#xff0c;进行页面异步更新&#xff08;网页不会重新加载&#xff09; 优点&#xff1a; 减轻服务器负…

Vue3进阶使用详解(node.js、Vue3路由基础项目、axios的使用详细(实现数据分页---前后端分离)、axios加载失败)

Vue3进阶使用详解(node.js、Vue3路由基础项目、axios的使用详细(实现数据分页—前后端分离)、axios加载失败) Vue cli CLI是Commond-Line Interface&#xff0c;翻译为命令界面&#xff0c;又称脚手架。VueCLI是一个官方发布vue.js项目脚手架。使用VueCLI可以快速搭建vue开发…

v-for比v-if优先级更高?面试官:回去等通知吧

大厂面试题分享 面试题库 前后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 web前端面试题库 VS java后端面试题库大全 前言 v-if和v-for哪个优先级更高呢&#xff1f;这是面试官常常问到的一个问题&#xff0c;…

算法训练 Day41 | 动态规划

343. 整数拆分 思路&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义&#xff1a;dp[i]&#xff1a;分拆数字i&#xff0c;可以得到的最大乘积为dp[i]。 确定递推公式&#xff1a;dp[i] max(dp[i], max((i - j) * j, dp[i - j] * j)) 可以想 dp[i]最…

3.Spring Security实现JWT token验证

目录 1. Spring Security详细介绍 2. Spring Security详细使用 3. Spring Security实现JWT token验证 4. JWT&#xff08;JSON Web Token&#xff0c;JSON令牌&#xff09; 5. Spring Security安全注解 Spring Security实现JWT token验证 Spring Security是Spring提供的一…

【Spring篇】DI相关内容

&#x1f353;系列专栏:Spring系列专栏 &#x1f349;个人主页:个人主页 目录 一、setter注入 1.环境准备 2.注入引用数据类型 3.注入简单数据类型 二、构造器注入 1.环境准备 2.构造器注入引用数据类型 3.构造器注入多个引用数据类型 4.构造器注入多个简单数据类型 …

SAS学习第4章:t检验

前话&#xff1a;分析试验数据的差异&#xff0c;一般都会假设样本值之间或者样本与标准值之间无差异&#xff0c;根据不同方法计算得出的t值、q值、F值等等&#xff0c;均表示两者之间的差异程度&#xff0c;值越大&#xff0c;两者差异越大&#xff0c;该假设越不成立&#x…

Vue3+Three.js+antvG2实战项目 智慧城市(三)

前言 在网上找了很久都没有找到使用Three.js开发智慧城市的免费文章或者免费视频,自己花了一点时间做了一个纯前端的智慧城市项目。 技术栈都是最新的:vue3vitetypeScriptThreeantv G2 源码分享 源码 模型,天空图盒子链接分享(不想下载源码可以只用下这个)提取码1234 20230424_…