JAVA-springboot整合Mybatis
SpringBoot从入门到精通-第15章 MyBatis框架
学习MyBatis心路历程
2022年学习java基础时候,想着怎么使用java代码操作数据库,咨询了项目上开发W同事,没有引用框架,操作数据库很麻烦,就帮我写好多行代码,就实现了一个查询语句,至今我也忘记了那些代码大概是个什么样。
2025年果断入手一本SpringBoot从入门到精通纸质版书,纸质版书籍个人理解:
- 1、有版权,案例有保障;
- 2、系统性,把前后顺序会设计好;
- 3、想翻的时候,翻起来有感觉;
- 4、就是案例比较单一。
然后就是一看就会,一做就废。但是最终只有一个解决方案,那就是动手敲,动手实现,实现过,心里就有底,才能说服自己这个我操作过。以下是我根据案例实操的步骤和结果,展示一下吧。
一、MyBatis简介
Mybatis是一款半自动化的持久层框架,所谓半自动化,就是MyBatis不仅需要程序开发人员手动编写SQL语句,而且需要手动设置SQL语句与实体类的映射关系。
MyBatis和Hibernate
MyBatis和Hibernate都是Java领域中流行的对象关系映射(ORM)框架,它们都旨在简化数据库操作和对象模型之间的交互。尽管它们都提供了类似的解决方案,但在设计理念、使用方式、性能和灵活性等方面存在一些关键差别。
结论
选择MyBatis还是Hibernate主要取决于项目的具体需求、开发团队的偏好以及特定的项目要求。如果项目需要高度定制的SQL并且团队成员熟悉SQL,那么MyBatis可能是更好的选择。如果项目更倾向于减少直接编写SQL的需要并希望减少数据库层面的复杂性,那么Hibernate可能更合适。在实践中,很多团队也会根据项目的不同部分选择使用这两种技术的一个组合,以平衡灵活性和易用性。
二、在Spring Boot项目中整合MyBatis
0、整体结构
1、整体步骤:
- pom.xml添加MyBatis依赖
- pom.xml添加数据库驱动依赖
- application配置文件添加datasource配置项
- 创建mapper映射器
- 在SpringBoot启动类添加用于表示映射器扫描的@MapperScan(basePackages = “com.mr._20250602spring_mybatis”)注解
- 实现数据库的基本事物,即编写实体类(对应数据库表)
- 测试类编写测试方法
- 启动测试类方法测试
2、步骤附代码
- pom.xml添加MyBatis依赖
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version></dependency>
- pom.xml添加数据库驱动依赖
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version>
<!-- <scope>runtime</scope>--></dependency>
- application配置文件添加datasource配置项
spring.application.name=20250602spring_mybatis
spring.datasource.url=jdbc:mysql://10.0.0.132:1588/db_video?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=CONVERT_TO_NULL&allowPublicKeyRetrieval=true
spring.datasource.username=sun
spring.datasource.password=Sun@123
整体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>3.5.0</version>-->
<!-- <relativePath/> <!– lookup parent from repository –>-->
<!-- </parent>--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.4</version><relativePath /> <!-- lookup parent from repository --></parent><groupId>com.mr</groupId><artifactId>_20250602spring_mybatis</artifactId><version>0.0.1-SNAPSHOT</version><name>20250602spring_mybatis</name><description>20250602spring_mybatis</description>
<!-- <url/>-->
<!-- <licenses>-->
<!-- <license/>-->
<!-- </licenses>-->
<!-- <developers>-->
<!-- <developer/>-->
<!-- </developers>-->
<!-- <scm>-->
<!-- <connection/>-->
<!-- <developerConnection/>-->
<!-- <tag/>-->
<!-- <url/>-->
<!-- </scm>-->
<!-- <properties>-->
<!-- <java.version>17</java.version>-->
<!-- </properties>--><properties><java.version>11</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version></dependency><!-- <dependency>-->
<!-- <groupId>mysql</groupId>-->
<!-- <artifactId>mysql-connector-java</artifactId>-->
<!-- <scope>runtime</scope>-->
<!-- </dependency>--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version>
<!-- <scope>runtime</scope>--></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
- 创建mapper映射器
package com.mr._20250602spring_mybatis.mapper;import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import com.mr._20250602spring_mybatis.pojo.T_video;
public interface EmpMapper {
// @Select("select name from t_video where id = 10")
// boolean selectAll();@Insert("insert into t_video values(33,'springboot','sun',22)")boolean insertData();
}
- 在SpringBoot启动类添加用于表示映射器扫描的@MapperScan(basePackages = “com.mr._20250602spring_mybatis”)注解
package com.mr._20250602spring_mybatis;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@MapperScan(basePackages = "com.mr._20250602spring_mybatis")
@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}
- 实现数据库的基本事物,即编写实体类(对应数据库表)
package com.mr._20250602spring_mybatis.pojo;public class T_video {private Integer id;private String name;private String author;private int video_view;public T_video(Integer id, String name, String author, int video_view) {this.id = id;this.name = name;this.author = author;this.video_view = video_view;}public T_video() {}@Overridepublic String toString() {return "T_video{" +"id=" + id +", name='" + name + '\'' +", author='" + author + '\'' +", video_view=" + video_view +'}';}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public int getVideo_view() {return video_view;}public void setVideo_view(int video_view) {this.video_view = video_view;}
}
- 测试类编写测试方法
package com.mr._20250602spring_mybatis;import com.mr._20250602spring_mybatis.mapper.EmpMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class ApplicationTests {
@AutowiredEmpMapper mapper;@Testvoid contextLoads() {
// System.out.println("查询id=10 的name");System.out.println("增加一条数据");boolean result;if (mapper.insertData()) result = true;else result = false;System.out.println(result);}}
- 启动测试类方法测试
增加一条数据
2025-06-02 08:06:34.599 INFO 12944 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2025-06-02 08:06:34.962 INFO 12944 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
true
三、SQL语句中添加占位符
package com.mr._20250602spring_mybatis.mapper;import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import com.mr._20250602spring_mybatis.pojo.T_video;
public interface EmpMapper {
// @Select("select name from t_video where id = 10")
// boolean selectAll();@Insert("insert into t_video values(33,'springboot','sun',22)")boolean insertData();@Select("select name from t_video where id = #{id}")String selectAll(int id);
}
修改测试类
package com.mr._20250602spring_mybatis;import com.mr._20250602spring_mybatis.mapper.EmpMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class ApplicationTests {
@AutowiredEmpMapper mapper;@Testvoid contextLoads() {
// System.out.println("查询id=10 的name");System.out.println("增加一条数据");boolean result;if (mapper.insertData()) result = true;else result = false;System.out.println(result);}// @Test
// void selectData(){
// System.out.println("查询id=10的name");
// System.out.println(mapper.selectAll());
// }
@Test
void selectData(){System.out.println("查询id=10的name");System.out.println(mapper.selectAll(10));
}}
执行测试方法
查询id=10的name
2025-06-02 09:48:46.929 INFO 124 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2025-06-02 09:48:47.281 INFO 124 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
零基础学Java
9.数据库表
CREATE DATABASE db_video;
USE db_video;SET FOREIGN_KEY_CHECKS=0;-- ----------------------------
-- Table structure for `t_video`
-- ----------------------------
DROP TABLE IF EXISTS `t_video`;
CREATE TABLE `t_video` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(100) NOT NULL,`author` varchar(20) DEFAULT NULL,`video_view` int(11) NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of t_video
-- ----------------------------
INSERT INTO `t_video` VALUES ('10', '零基础学Java', '张工程师', '100000');
INSERT INTO `t_video` VALUES ('20', '如何做鱼香肉丝', '李厨师', '80000');
INSERT INTO `t_video` VALUES ('30', '职场日常妆', '王女士', '76000');
INSERT INTO `t_video` VALUES ('40', '动作电影剪辑', '老赵', '66000');
四、引入Controller
mapper接口内容
package com.mr._20250602spring_mybatis.mapper;import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import com.mr._20250602spring_mybatis.pojo.T_video;
public interface EmpMapper {
// @Select("select name from t_video where id = 10")
// boolean selectAll();@Insert("insert into t_video values(33,'springboot','sun',22)")boolean insertData();@Select("select name from t_video where id = #{id}")String selectAll(int id);
}
Controller类文件内容
package com.mr._20250602spring_mybatis.controller;import com.mr._20250602spring_mybatis.mapper.EmpMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/springboot")public class a {@AutowiredEmpMapper mapper;@GetMapping("t_video")String video(@RequestParam Integer id){
// return mapper.selectAll(10);return mapper.selectAll(id);}
}
浏览器访问测试
http://localhost:8080/springboot/t_video?id=10
零基础学Java
五、引入R类,返回数据库表所有数据
1、引入R类
package com.mr._20250602spring_mybatis.controller;public class R { // 通用返回值类private Boolean bool; // boolean型对象private Object obj; // 实体类对象private String str; // 字符串信息// 为通用返回值类添加无参构造方法和有参构造方法public R() {}public R(Boolean flag) {this.bool = flag;}public R(Boolean flag, Object data) {this.bool = flag;this.obj = data;}public R(Boolean flag, String msg) {this.bool = flag;this.str = msg;}public R(String msg) {this.str = msg;}// 分别为上述的3个属性添加Getter/Setter方法public Boolean getFlag() {return bool;}public void setFlag(Boolean flag) {this.bool = flag;}public Object getData() {return obj;}public void setData(Object data) {this.obj = data;}public String getMsg() {return str;}public void setMsg(String msg) {this.str = msg;}}
2、mapper接口增加select * from t_video
package com.mr._20250602spring_mybatis.mapper;import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import com.mr._20250602spring_mybatis.pojo.T_video;import java.util.List;public interface EmpMapper {
// @Select("select name from t_video where id = 10")
// boolean selectAll();@Insert("insert into t_video values(33,'springboot','sun',22)")boolean insertData();@Select("select name from t_video where id = #{id}")String selectAll(int id);@Select("select * from t_video")List<T_video> selectall();
}
3、Controller类增加映射路径all
package com.mr._20250602spring_mybatis.controller;import com.mr._20250602spring_mybatis.mapper.EmpMapper;
import com.mr._20250602spring_mybatis.pojo.T_video;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
@RequestMapping("/springboot")public class a {@AutowiredEmpMapper mapper;@GetMapping("t_video")String video(@RequestParam Integer id){
// return mapper.selectAll(10);return mapper.selectAll(id);}@GetMapping("all")public R selectVideo(){return new R(true, mapper.selectall());}
}
4、启动项目,访问测试
六、遇到的问题
- 1、依赖版本问题
这里采用的是书本自带的案例库进行了比对,版本对不上的复制了书本案例的版本,比如下面这个是我在IDEA创建项目时生成的spring-boot-starter-parent版本3.5.0,但是有了接口文件后启动项目时候报错了
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.5.0</version><relativePath/> <!-- lookup parent from repository --></parent>
替换成2.5.4版本后启动成功
-
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.4</version> <relativePath /> <!-- lookup parent from repository --> </parent>
-
2、SQL语句问题
mapper接口中使用注解方式写sql语句时,字符串值用单引号,避免和注解的整体sql语句的双引号冲突。这里如果写错,启动程序时也会提示sql语句某个位置有异常。比如
@Insert("insert into t_video values(33,'springboot','sun',22)")boolean insertData();
- 3、步骤前后顺序问题
比如,引用了Mybatis依赖,application配置文件就得有数据库连接信息,不然启动报错
大佬们,小试牛刀,见笑了。更多精彩内容,敬请期待!
相关文章:

JAVA-springboot整合Mybatis
SpringBoot从入门到精通-第15章 MyBatis框架 学习MyBatis心路历程 2022年学习java基础时候,想着怎么使用java代码操作数据库,咨询了项目上开发W同事,没有引用框架,操作数据库很麻烦,就帮我写好多行代码,就…...

深度学习pycharm debug
深度学习中,Debug 是定位并解决代码逻辑错误(如张量维度不匹配)、训练异常(如 Loss 波动)、数据问题(如标签错误)的关键手段,通过打印维度、可视化梯度等方法确保模型正常运行、优化…...

MicroPython+L298N+ESP32控制电机转速
要使用MicroPython控制L298N电机驱动板来控制电机的转速,你可以通过PWM(脉冲宽度调制)信号来调节电机速度。L298N是一个双H桥驱动器,可以同时控制两个电机的正反转和速度。 硬件准备: 1. L298N 电机控制板 2. ESP32…...
Hive的存储格式如何优化?
Hive的存储格式对查询性能、存储成本和数据处理效率有显著影响。以下是主流存储格式的特点、选择标准和优化方法: 一、主流存储格式对比 特性ORC(Optimized Row Columnar)ParquetTextFile(默认)SequenceFile数据布局…...

在部署了一台mysql5.7的机器上部署mysql8.0.35
在已部署 MySQL 5.7 的机器上部署 MySQL 8.0.35 的完整指南 在同一台服务器上部署多个 MySQL 版本需要谨慎规划,避免端口冲突和数据混淆。以下是详细的部署步骤: 一、规划配置 端口分配 MySQL 5.7:使用默认端口 3306MySQL 8.0.35࿱…...
OpenCV CUDA模块结构分析与形状描述符------在 GPU 上计算图像的原始矩(spatial moments)函数spatialMoments()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 该函数用于在 GPU 上计算图像的原始矩(spatial moments)。这些矩可用于描述图像中物体的形状特征,如面积、质…...

QT入门学习(一)---新建工程与、信号与槽
一: 新建QT项目 二:QT文件构成 2.1 first.pro 项目管理文件,下面来看代码解析 QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11TARGET main# The following define makes your compiler emit warnings if you use # any Qt feature …...

UE5.4.4+Rider2024.3.7开发环境配置
文章目录 一、UE5安装 安装有两种方式一种的源码编译安装、一种是EPIC安装,推荐后者,只需要注册一个EPIC账号就可以一键安装。 二、C环境安装 1.下载VisualStudioSetup 下载链接如下下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux 选择社…...

Windows环境下PHP,在PowerShell控制台输出中文乱码
解决方法: 以管理员运行PowerShell , 输入: chcp 65001 重启控制台;然后就正常输出中文;...
第2篇:数据库连接池原理与自定义连接池开发实践
2.1 什么是数据库连接池? 数据库连接池(Connection Pool)是一种用于管理数据库连接对象的复用机制。它的主要目标是: 减少频繁创建/销毁连接的开销 提高系统对数据库资源的使用效率 支持连接复用、并发控制和连接健康检查 连接…...

性能优化 - 理论篇:性能优化的七类技术手段
文章目录 Pre引言性能优化的七类技术手段性能优化策略一览表1. 复用优化2. 计算优化2.1 并行执行2.2 变同步为异步2.3 惰性加载 3. 结果集优化3.1 数据格式与协议选择3.2 字段精简与按需返回3.3 批量处理与分页3.4 索引与位图加速 4. 资源冲突优化4.1 锁的分类与特点4.2 无锁与…...

华为IP(7)
端口隔离技术 产生的背景 1.以太交换网络中为了实现报文之间的二层隔离,用户通常将不同的端口加入不同的VLAN,实现二层广播域的隔离。 2.大型网络中,业务需求种类繁多,只通过VLAN实现二层隔离,会浪费有限的VLAN资源…...

AIGC与影视制作:技术革命、产业重构与未来图景
文章目录 一、AIGC技术全景:从算法突破到产业赋能1. **技术底座:多模态大模型的进化路径**2. **核心算法:从生成对抗网络到扩散模型的迭代** 二、AIGC在影视制作全流程中的深度应用1. **剧本创作:从“灵感枯竭”到“创意井喷”**2…...
spring-cloud-alibaba-sentinel-gateway
Spring Cloud Alibaba Sentinel Gateway 是阿里巴巴开源组件 Sentinel 与 Spring Cloud Gateway 的整合模块,主要用于在微服务架构中对网关层的流量进行控制、保护和监控。以下是它的详细说明: 一. 核心用途 网关层流量治理:在 API 网关&…...

Cursor 玩转 腾讯地图 MCP Server
腾讯地图WebService API 服务简介 腾讯地图WebService API 是基于HTTPS/HTTP协议构建的标准化地理数据服务接口。该接口支持跨平台调用,开发者可使用任意客户端、服务器端技术及编程语言,遵循API规范发起HTTPS请求,获取地理信息服务…...
【HarmonyOS 5】 ArkUI-X开发中的常见问题及解决方案
一、跨平台编译与适配问题 1. 平台特定API不兼容 问题现象:使用Router模块的replaceUrl或startAbility等鸿蒙专属API时,编译跨平台工程报错cant support crossplatform application。 解决方案: 改用ohos.router的跨平台封装API&a…...

2025年中国电商618年中大促策略分析:存量博弈与生态重构
图片来源:Photo by Samuel Regan-Asante on Unsplash 中国电商行业正经历一场从「增量扩张」到「存量深耕」的深刻转型。 随着网络购物用户规模突破9.74亿、线上消费渗透率逼近30%的临界点,传统流量红利逐渐消退,行业竞争已从「切蛋糕」转向…...

Deepseek给出的8255显示例程
#include <stdio.h> #include <conio.h> #include <dos.h>// 定义8255端口地址 (根据原理图译码确定) #define PORT_8255_A 0x8000 // PA端口地址 #define PORT_8255_B 0x8001 // PB端口地址 #define PORT_8255_C 0x8002 // PC端口地址 #define PORT_8255…...
React+Antd全局加载遮罩工具
下面是全局加载遮罩工具,功能:提供show和showWithDelay/hide方法用于显示/延时显示/隐藏遮罩,它还提供loading属性返回是否正在loading。通常用于耗时较长的操作,比如远端api调用。 如何用它,下面是个例子,…...
Qt OpenGL 光照实现
Qt 中使用 OpenGL 实现光照效果主要基于 OpenGL 的光照模型和着色器编程。以下是 Qt OpenGL 光照实现的核心原理: 一. 光照模型基础 OpenGL 使用 Phong 光照模型,包含三个主要光照分量: 环境光(Ambient):场景中的基础光照,没有方向性 漫反射光(Diffuse):与表面法线和光…...

智汇云舟携最新无人机2D地图快速重建技术亮相广西国际矿业展览会
5月22至25日,广西国际矿业展览会(以下简称 “矿业展”)在南宁国际会展中心成功举办。智汇云舟与合作伙伴广西空驭数智信息技术有限公司携无人机 2D地图快速重建技术,以及视频孪生智慧矿山解决方案参会,为矿山行业数字化…...
Rust: CString、CStr和String、str
在FFI与C交互中,少不了与C中字符串交互。在Rust中,有 各种String存在的意义: OsString:因为要与操作系统等复杂的世界交互; 因为Rust世界中的Strings 始终是有效的 UTF-8。对于非 UTF-8 字符串,可以用到OsString。 CSt…...

力扣每日一题——连接两棵树后最大目标节点数目 ||
目录 题目链接:3373. 连接两棵树后最大目标节点数目 II - 力扣(LeetCode) 题目描述 解法一:双树贡献分离法 Java写法: C写法: 运行时间 时间复杂度和空间复杂度 总结 题目链接:…...

【学习笔记】Sparse Crosscoders for Cross-Layer Features and Model Diffing
Sparse Crosscoders for Cross-Layer Features and Model Diffing Abstract 本说明介绍了稀疏跨编码器(sparse crosscoders),它是一种稀疏自编码器(sparse autoencoders)或transcoders的变体,旨在用于理解叠加中的模型结构。SAEs是在单一层中编码和预测…...

VSCode无法转到定义python源码(ctrl加单击不跳转)
已经尝试的方案: 1.确保对应python环境正确激活 在 VSCode 中,打开命令面板(CtrlShiftP),输入并选择 Python: Select Interpreter,然后从列表中选择正确的 Python 解释器。 2.重新卸载Python插件再重新安装…...

【华为战报】4月、5月 HCIP考试战报!
了解更多往期考试→点 【考试战报】 华为认证 HCIP 4、5月微思 | HCIP 考试战报 学员成绩单 华为认证 最新开班 厦门面授 全国直播 新生代网工必看:华为模拟器eNSP安装教程(附下载链接)...
开发指南120-表格(el-table)斑马纹
el-table实现斑马纹简单否,看起来很简单,网上给的例子都是加stripe,例如 <el-table :data"tableData" stripe>连官网上的例子都是这样。然并卵。也许是版本问题。这么写,怎么折腾都没有效果。 必须这样写才行 …...
数字化转型全场景安全解析:从产品到管理的防线构建与实施要点
在数字化转型中,安全已从“可选配置” 升级为 “必需底座”,贯穿于产品生命周期、生产过程、供应链及管理决策全场景。以下从南京市场景清单出发,结合技术实践与政策要求,分析安全在各核心场景中的具体内涵与实施要点:…...

AIGC工具平台-GPT-SoVITS-v4-TTS音频推理克隆
声音克隆与语音合成的结合,是近年来生成式AI在多模态方向上的重要落地场景之一。随着预训练模型能力的增强,结合语音识别、音素映射与TTS合成的端到端系统成为初学者可以上手实践的全流程方案。 围绕 GPT-SoVITS-v4-TTS 模块,介绍了其在整合…...

el-table配置表头固定而且高度变化
根据官网提示只要在 el-table 元素中定义了 height 属性,即可实现固定表头的表格,而不需要额外的代码。 如果你想既要固定表头,又要下方表格高度自适应,可以设置为 height"100%" : 然后外层设置scroll:...