spring Boot使用Mybatis实践

Mybatis作为一款优秀的持久层框架,具有简化SQL编写、灵活性、易于集成、等特点深受开发人员青睐,下文将为大家讲到在Spring Boot中如何使用Mybatis

1、依赖引入

数据库驱动

        <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.26</version></dependency>

数据源管理

        <dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.8</version></dependency>

 Mybatis

        <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version></dependency>

2、配置信息

数据源配置

spring.datasource.druid.url=jdbc:mysql://IP:PORT/库名?characterEncoding=UTF-8&allowMultiQueries=true&useSSL=true
spring.datasource.druid.username=用户名
spring.datasource.druid.password=密码
spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.druid.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.max-idle=10
spring.datasource.druid.max-active=20
spring.datasource.druid.max-wait=10000
spring.datasource.druid.min-idle=5
spring.datasource.druid.initial-size=5
#自动重连
spring.datasource.druid.autoReconnect=true
#连接空闲时是否执行健康检查
spring.datasource.druid.test-while-idle=true
#连接池用于健康检查的 SQL 语句。在每次获取连接时都会执行该语句来判断连接是否有效
spring.datasource.druid.validation-query=SELECT 1
#健康检查间隔时间,单位毫秒
spring.datasource.druid.validation-interval=18000
#连接最大寿命,单位毫秒
spring.datasource.druid.max-lifetime=180000

 mybatis配置

#mybatis
#xml文件路径
mybatis.mapper-locations=classpath:mybatis/*.xml
logging.level.com.baomidou.mybatisplus=DEBUG
#将mapper包下的日志级别设置为DEBUG
logging.level.com.jd.XXX.mapper=DEBUG
mybatis.configuration.log-impl=org.apache.ibatis.logging.slf4j.Slf4jImpl

使Mybatis生效

在Spring Boot启动主类上添加

@MapperScan("com.jd.XX.mapper")//使用MapperScan批量扫描所有的Mapper接口;

3、操作数据

3.1、声明和数据表字段一一映射的简单对象

package XXX;import java.math.BigDecimal;
import java.util.Date;
import java.util.StringJoiner;/*** 企业商户* User* 数据库表:user*/
public class User {/*** 自增ID* 表字段 : user.id*/private Long id;private String merchantNo;private String registrationNo;/*** 组织结构代码*/private String organizationCode;/*** 统一社会信用代码*/private String companyUscc;private String companyName;private Integer companyType;private String role;/*** 企业经营范围*/private String companyScope;private String provinceName;/*** 企业所在城市* 表字段 : user.city_name*/private String cityName;private BigDecimal creditScore;/*** 企业地址* 表字段 : user.address*/private String address;/*** 企业联系人* 表字段 : user.contact*/@Cryptprivate String contact;private String contactCardType;private String contactCardNo;/*** 企业法人证件正面图片地址*/private String contactFaceUrl;/*** 企业法人证件反面图片地址*/private String contactConUrl;/*** 手持证件照片地址*/private String contactUrl;/*** 企业联系人邮箱* 表字段 : user.contact_tel*/private String contactTel;/*** 企业中征码* 表字段 : user.crc_code*/private String crcCode;/*** 银行类型,国股 三农 城商* 表字段 : user.is_bank_org*/private Integer bankType;private Integer supportCredit;private Integer isAuth;private String companyMold;/*** 企业营业执照图片地址*/private String companyUrl;/*** 邮寄地址*/private String mailingAddress;private Integer acceptProtocol;private Date startTime;/*** 逻辑删除字段:0正常,1删除*/private Integer ldeleteFlag;/*** 是否接受平台协议*/public boolean hasAcceptProtocol() {return this.acceptProtocol != null && this.acceptProtocol.equals(1);}/*** 创建时间* 表字段 : user.created_date*/private Date createdDate;/*** 修改时间* 表字段 : user.modified_date*/private Date modifiedDate;private Integer channel;/*** 企业用户 id.*/private String companyUserId;public Long getId() {return id;}/*** 设置 自增ID 字段:user.id** @param id the value for user.id, 自增ID*/public void setId(Long id) {this.id = id;}public String getMerchantNo() {return merchantNo;}public void setMerchantNo(String merchantNo) {this.merchantNo = merchantNo == null ? null : merchantNo.trim();}public String getOrganizationCode() {return organizationCode;}public void setOrganizationCode(String organizationCode) {this.organizationCode = organizationCode;}public String getCompanyScope() {return companyScope;}public void setCompanyScope(String companyScope) {this.companyScope = companyScope;}public String getCompanyUscc() {return companyUscc;}public void setCompanyUscc(String companyUscc) {this.companyUscc = companyUscc;}public String getRegistrationNo() {return registrationNo;}public void setRegistrationNo(String registrationNo) {this.registrationNo = registrationNo == null ? null : registrationNo.trim();}/*** 获取 企业名称 字段:user.company_name** @return user.company_name, 企业名称*/public String getCompanyName() {return companyName;}/*** 设置 企业名称 字段:user.company_name** @param companyName the value for user.company_name, 企业名称*/public void setCompanyName(String companyName) {this.companyName = companyName == null ? null : companyName.trim();}public Integer getCompanyType() {return companyType;}public void setCompanyType(Integer companyType) {this.companyType = companyType;}public String getProvinceName() {return provinceName;}public void setProvinceName(String provinceName) {this.provinceName = provinceName == null ? null : provinceName.trim();}/*** 获取 企业所在城市 字段:user.city_name** @return user.city_name, 企业所在城市*/public String getCityName() {return cityName;}/*** 设置 企业所在城市 字段:user.city_name** @param cityName the value for user.city_name, 企业所在城市*/public void setCityName(String cityName) {this.cityName = cityName == null ? null : cityName.trim();}public BigDecimal getCreditScore() {return creditScore;}public void setCreditScore(BigDecimal creditScore) {this.creditScore = creditScore;}/*** 获取 企业地址 字段:user.address** @return user.address, 企业地址*/public String getAddress() {return address;}/*** 设置 企业地址 字段:user.address** @param address the value for user.address, 企业地址*/public void setAddress(String address) {this.address = address == null ? null : address.trim();}/*** 获取 企业联系人 字段:user.contact** @return user.contact, 企业联系人*/public String getContact() {return contact;}/*** 设置 企业联系人 字段:user.contact** @param contact the value for user.contact, 企业联系人*/public void setContact(String contact) {this.contact = contact == null ? null : contact.trim();}/*** 获取 企业联系人邮箱 字段:user.contact_tel** @return user.contact_tel, 企业联系人邮箱*/public String getContactTel() {return contactTel;}/*** 设置 企业联系人邮箱 字段:user.contact_tel** @param contactTel the value for user.contact_tel, 企业联系人邮箱*/public void setContactTel(String contactTel) {this.contactTel = contactTel == null ? null : contactTel.trim();}/*** 获取 企业中征码 字段:user.crc_code** @return user.crc_code, 企业中征码*/public String getCrcCode() {return crcCode;}/*** 设置 企业中征码 字段:user.crc_code** @param crcCode the value for user.crc_code, 企业中征码*/public void setCrcCode(String crcCode) {this.crcCode = crcCode == null ? null : crcCode.trim();}public Integer getBankType() {return bankType;}public User setBankType(Integer bankType) {this.bankType = bankType;return this;}/*** 获取 是否支持授信 字段:user.support_credit** @return user.support_credit, 是否支持授信*/public Integer getSupportCredit() {return supportCredit;}/*** 设置 是否支持授信 字段:user.support_credit** @param supportCredit the value for user.support_credit, 是否支持授信*/public void setSupportCredit(Integer supportCredit) {this.supportCredit = supportCredit;}public Integer getIsAuth() {return isAuth;}public void setIsAuth(Integer isAuth) {this.isAuth = isAuth;}/*** 获取 创建时间 字段:user.created_date** @return user.created_date, 创建时间*/public Date getCreatedDate() {return createdDate;}/*** 设置 创建时间 字段:user.created_date** @param createdDate the value for user.created_date, 创建时间*/public void setCreatedDate(Date createdDate) {this.createdDate = createdDate;}/*** 获取 修改时间 字段:user.modified_date** @return user.modified_date, 修改时间*/public Date getModifiedDate() {return modifiedDate;}/*** 设置 修改时间 字段:user.modified_date** @param modifiedDate the value for user.modified_date, 修改时间*/public void setModifiedDate(Date modifiedDate) {this.modifiedDate = modifiedDate;}public String getContactCardType() {return contactCardType;}public void setContactCardType(String contactCardType) {this.contactCardType = contactCardType;}public String getContactCardNo() {return contactCardNo;}public void setContactCardNo(String contactCardNo) {this.contactCardNo = contactCardNo;}public String getContactFaceUrl() {return contactFaceUrl;}public void setContactFaceUrl(String contactFaceUrl) {this.contactFaceUrl = contactFaceUrl;}public String getContactConUrl() {return contactConUrl;}public void setContactConUrl(String contactConUrl) {this.contactConUrl = contactConUrl;}public String getContactUrl() {return contactUrl;}public void setContactUrl(String contactUrl) {this.contactUrl = contactUrl;}public String getCompanyMold() {return companyMold;}public void setCompanyMold(String companyMold) {this.companyMold = companyMold;}public String getCompanyUrl() {return companyUrl;}public void setCompanyUrl(String companyUrl) {this.companyUrl = companyUrl;}public String getMailingAddress() {return mailingAddress;}public void setMailingAddress(String mailingAddress) {this.mailingAddress = mailingAddress;}public Integer getAcceptProtocol() {return acceptProtocol;}public String getRole() {return role;}public void setRole(String role) {this.role = role;}public User setAcceptProtocol(Integer acceptProtocol) {this.acceptProtocol = acceptProtocol;return this;}public Date getStartTime() {return startTime;}public User setStartTime(Date startTime) {this.startTime = startTime;return this;}public Integer getChannel() {return channel;}public void setChannel(Integer channel) {this.channel = channel;}public String getCompanyUserId() {return companyUserId;}public void setCompanyUserId(String companyUserId) {this.companyUserId = companyUserId;}public Integer getLdeleteFlag() {return ldeleteFlag;}public User setLdeleteFlag(Integer ldeleteFlag) {this.ldeleteFlag = ldeleteFlag;return this;}}

3.2、编写操作语句

在resources目录下,新建mybatis文件夹,新建表名.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xx.mapper.UserMapper">
<!--    type为上面定义的映射对象路径    --><resultMap id="BaseResultMap" type="com.xx.User"><id column="id" jdbcType="BIGINT" property="id"/><result column="merchant_no" jdbcType="VARCHAR" property="merchantNo"/><result column="company_user_id" jdbcType="VARCHAR" property="companyUserId"/><result column="registration_no" jdbcType="VARCHAR" property="registrationNo"/><result column="organization_code" jdbcType="VARCHAR" property="organizationCode"/><result column="company_uscc" jdbcType="VARCHAR" property="companyUscc"/><result column="company_scope" jdbcType="VARCHAR" property="companyScope"/><result column="company_name" jdbcType="VARCHAR" property="companyName"/><result column="company_type" jdbcType="TINYINT" property="companyType"/><result column="role" jdbcType="VARCHAR" property="role"/><result column="company_mold" jdbcType="VARCHAR" property="companyMold"/><result column="company_url" jdbcType="VARCHAR" property="companyUrl"/><result column="province_name" jdbcType="VARCHAR" property="provinceName"/><result column="city_name" jdbcType="VARCHAR" property="cityName"/><result column="credit_score" jdbcType="DECIMAL" property="creditScore"/><result column="address" jdbcType="VARCHAR" property="address"/><result column="contact" jdbcType="VARCHAR" property="contact"/><result column="contact_tel" jdbcType="VARCHAR" property="contactTel"/><result column="contact_card_type" jdbcType="VARCHAR" property="contactCardType"/><result column="contact_card_no" jdbcType="VARCHAR" property="contactCardNo"/><result column="contact_face_url" jdbcType="VARCHAR" property="contactFaceUrl"/><result column="contact_con_url" jdbcType="VARCHAR" property="contactConUrl"/><result column="contact_url" jdbcType="VARCHAR" property="contactUrl"/><result column="crc_code" jdbcType="VARCHAR" property="crcCode"/><result column="bank_type" jdbcType="INTEGER" property="bankType"/><result column="support_credit" jdbcType="TINYINT" property="supportCredit"/><result column="is_auth" jdbcType="TINYINT" property="isAuth"/><result column="mailing_address" jdbcType="VARCHAR" property="mailingAddress"/><result column="accept_protocol" jdbcType="TINYINT" property="acceptProtocol"/><result column="start_time" jdbcType="TIMESTAMP" property="startTime"/><result column="created_date" jdbcType="TIMESTAMP" property="createdDate"/><result column="modified_date" jdbcType="TIMESTAMP" property="modifiedDate"/><result column="ldelete_flag" jdbcType="TINYINT" property="ldeleteFlag"/></resultMap><sql id="Base_Column_List">id, merchant_no, company_user_id, registration_no, company_name, company_type,role, province_name, city_name,address, contact, contact_tel, crc_code, bank_type, support_credit, is_auth, created_date,modified_date, company_mold, company_url,contact_card_type, contact_card_no,contact_face_url,contact_con_url,contact_url, organization_code,company_uscc,company_scope,mailing_address,accept_protocol,start_time,credit_score, ldelete_flag</sql><select id="findByMerchantNo" resultMap="BaseResultMap">select<include refid="Base_Column_List"/>from user where merchant_no = #{merchantNo} and ldelete_flag = 0</select></mapper>

3.3、定义Mapper接口

package xx.mapper;import com.xx.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;import java.util.List;
@Mapper
public interface UserMapper {/*** 根据商户号查询用户信息* @param merchantNo	商户号* @return	商户信息*/User findByMerchantNo(String merchantNo);}

 此处的接口名应与xml文件中select查询语句中的id一致。

3.4、测试

使用单元测试框架进行测试

@AutowiredUserMapper userMapper;
@Test
void test(){
userMapper.findByMerchantNo();
}

4、常见问题

4.1、spring Boot中mybatis是怎样自动获取DataSource的

在Spring Boot中,MyBatis的整合通常会依赖于Spring Boot的自动配置和注解驱动。MyBatis在Spring Boot中自动获取DataSource的过程主要涉及以下几个关键点:

依赖配置:pom.xml(如果是Maven项目)中引入Spring Boot Starter和MyBatis的相关依赖。例如:

<dependencies><!-- Spring Boot Starter for MyBatis --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version> <!-- 版本号可能有更新 --></dependency><!-- 数据库驱动依赖 --><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency>
</dependencies>

数据源配置:application.propertiesapplication.yml中配置数据源信息,Spring Boot会根据这些配置自动创建DataSource Bean。例如:

spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.username=myuser
spring.datasource.password=mypassword
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

MyBatis配置: Spring Boot提供了自动配置,会根据依赖和配置自动创建SqlSessionFactorySqlSessionTemplate。你可以在application.propertiesapplication.yml中配置MyBatis相关属性,例如:

mybatis.mapper-locations=classpath:/mapper/*.xml

这里指定了MyBatis的Mapper文件所在的位置。

使用注解: 在MyBatis的Mapper接口上使用@Mapper注解,或者在Spring Boot的主应用程序类上使用@MapperScan注解扫描Mapper接口所在的包。

// 在主应用程序类上使用@MapperScan
@SpringBootApplication
@MapperScan("com.example.mapper")
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

或者在Mapper接口上使用@Mapper注解:

@Mapper
public interface UserMapper {// ...
}

总的来说,Spring Boot会根据约定和配置自动创建数据源,并将其注入到MyBatis中,使得整合过程非常便捷。只需配置相关属性,使用注解标注Mapper接口,Spring Boot就能完成自动化的MyBatis整合

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

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

相关文章

django系列之事务操作

Django 默认的事务行为是自动提交&#xff0c;除非事务正在执行&#xff0c;否则每个查询将会马上自动提交到数据库。 1. 全局开启事务 在 Web 里&#xff0c;处理事务比较常用的方式是将每个请求封装在一个事务中。 在你想启用该行为的数据库中&#xff0c;把 settings 配置…

YOLOv5-训练自己的VOC格式数据集(VOC、自建数据集)

YOLOv5&#xff1a;训练自己的 VOC 格式数据集 1. 自定义数据集 1.1 环境安装 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple注意&#xff1a; 安装 lxmlPillow 版本要低于 10.0.0&#xff0c;解释链接: module ‘PIL.Image’ has no attri…

Hadoop3教程(十六):MapReduce中的OutputFormat

文章目录 &#xff08;105&#xff09;OutputFormat概述&#xff08;106&#xff09;自定义OutputFormat案例需求分析&#xff08;107/108&#xff09;自定义OutputFormat案例实现自定义Mapper自定义Reducer自定义OutputFormatDriver 参考文献 &#xff08;105&#xff09;Outp…

Jetpack:012-Jetpack中的弹出菜单

文章目录 1. 概念介绍2. 使用方法2.1 DropdownMenu2.2 DropdownMenuItem 3. 示例代码3.1 代码和注释3.2 代码难点3.3 运行效果 4. 内容总结 我们在上一章回中介绍了Jetpack中标题栏相关的内容&#xff0c;本章回中主要 弹出菜单。闲话休提&#xff0c;让我们一起Talk Android …

AI系统ChatGPT源码+详细搭建部署教程+支持GPT4.0+支持ai绘画(Midjourney)/支持OpenAI GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统AI绘画系统&#xff0c;支持OpenAI GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署…

【vSphere 8 自签名证书】企业 CA 签名证书替换 vSphere Machine SSL 证书Ⅱ—— 创建和添加证书模板

目录 博文摘要3. 使用 Microsoft 证书颁发机构创建 Machine SSL 和 Solution User 证书模板3.1 打开 Certificate Template Console3.2 复制模板3.3 修改 Compatibility 选项卡3.4 修改 General 选项卡3.5 修改 Extensions 选项卡3.6 修改 Subject Name 选项卡3.7 确认新模板 4…

软件工程与计算总结(十六)详细设计的设计模式

一.设计模式基础 某种意义上来说&#xff0c;设计模式就是设计经验的总结~ 设计模式不是简单的经验总结&#xff0c;更不是无中生有&#xff0c;它是经过实践反复检验、能解决关键技术难题、有广泛应用前景和能够显著提高软件质量的有效的经验总结。 每个模式都不是独立的&a…

Docker安装GitLab及使用图文教程

作者&#xff1a; 宋发元 GitLab安装及使用教程 官方教程 https://docs.gitlab.com/ee/install/docker.html Docker安装GitLab 宿主机创建容器持久化目录卷 mkdir -p /docker/gitlab/{config,data,logs}拉取GitLab镜像 docker pull gitlab/gitlab-ce:15.3.1-ce.0运行GitLa…

Linux性能优化--性能追踪:受CPU限制的应用程序(GIMP)

10.0 概述 本章包含了一个例子&#xff1a;如何用Linux性能工具在受CPU限制的应用程序中寻找并修复性能问题。 阅读本章后&#xff0c;你将能够&#xff1a; 在受CPU限制的应用程序中明确所有的CPU被哪些源代码行使用。用1trace和oprofile弄清楚应用程序调用各种内部与外部函…

Jmeter接口测试 —— jmeter对图片验证码的处理

jmeter对图片验证码的处理 在web端的登录接口经常会有图片验证码的输入&#xff0c;而且每次登录时图片验证码都是随机的&#xff1b;当通过jmeter做接口登录的时候要对图片验证码进行识别出图片中的字段&#xff0c;然后再登录接口中使用&#xff1b; 通过jmeter对图片验证码…

在启智平台上安装anconda

安装Anaconda3-5.0.1-Linux-x86_64.sh python版本是3.6 在下面的网站上找到要下载的anaconda版本&#xff0c;把对应的.sh文件下载下来 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 把sh文件压缩成.zip文件&#xff0c;拖到启智平台的调试页面 上传到平台上 un…

ndk 编译报错 find_library called with incorrect number of arguments

ndk 编译报错 C build system [configure] failed while executing: echo off "C:\Users\Administrator\AppData\Local\Android\Sdk\cmake\3.22.1\bin\cmake.exe" ^ "-HF:\jupter\jupiter_offline_cv2\libts" ^ "-DCMAKE_SYSTEM_NAMEAndroid" ^…

什么是内存泄漏?JavaScript 垃圾回收机制原理及方式有哪些?哪些操作会造成内存泄漏?

1、什么是内存泄漏&#xff1f; 内存泄漏是前端开发中的一个常见问题&#xff0c;可能导致项目变得缓慢、不稳定甚至崩溃。内存泄漏是指不再用到的内存没有及时被释放&#xff0c;从而造成内存上的浪费。 2、 JavaScript 垃圾回收机制 1&#xff09; 原理&#xff1a; JavaS…

《从菜鸟到大师之路 正则表达式 篇》

《从菜鸟到大师之路 正则表达式 篇》 正则表达式是一个强大的文本匹配工具。但是&#xff0c;对于前端初学者来说&#xff0c;众多的符号和规则可能让人难以理解。其实&#xff0c;你不需要记住所有的正则表达式语法&#xff01;本文将分享一些简单而实用的技巧&#xff0c;帮…

【C++ 学习 ㉘】- 详解 C++11 的列表初始化

目录 一、C11 简介 二、列表初始化 2.1 - 统一初始化 2.2 - 列表初始化的使用细节 2.2.1 - 聚合类型的定义 2.2.2 - 注意事项 2.3 - initializer_list 2.3.1 - 基本使用 2.3.2 - 源码剖析 一、C11 简介 1998 年&#xff0c;C 标准委员会发布了第一版 C 标准&#xff0…

vm虚拟机克隆ubuntu

1. 使用vm虚拟机自带的克隆功能 2. 选择完整克隆&#xff0c;然后选择您克隆到哪里的目录 3. 点击编辑你克隆后的虚拟机&#xff0c;点网络适配器&#xff0c;然后点高级&#xff0c;点击生成mac地址&#xff08;由于唯一&#xff0c;所以需要重新生成&#xff09; 4. 开启虚拟…

asw ec2 ssh 登录设置

使用 ssh 登录 aws ec2 主机&#xff0c;需要创建 密钥对&#xff0c;设置好安全组规则。 密钥对 ec2 -> 网络与安全 -> 密钥对 -> 创建密钥对 名称: [输入一个名称] 创建密钥对 浏览器会下载一个后缀为 .pem 的文件&#xff0c;使用 ssh 时将会用到。 安全组设置…

vue 动态数字效果 vue-animate-number

安装 vue-animate-number 插件 npm install vue-animate-number &#xff08;注&#xff1a;是npm、cnpm还是yarn根据具体项目要求&#xff09; 在 main.js 中引入 import Vue from vue import VueAnimateNumber from vue-animate-number Vue.use(VueAnimateNumber)动态使用…

【MySQL】分析SQL的几种方式

文章目录 一、查看SQL执行频率二、定位低效率执行SQL1. show processlist2. 慢查询日志 三、explain分析执行计划1. id2. select_type3. type4. key5. extra 四、show profile 一、查看SQL执行频率 show session status&#xff1a;显示 session 级的统计结果&#xff08;不写…

openGauss学习笔记-100 openGauss 数据库管理-管理数据库安全-客户端接入之用SSL进行安全的TCP/IP连接

文章目录 openGauss学习笔记-100 openGauss 数据库管理-管理数据库安全-客户端接入之用SSL进行安全的TCP/IP连接100.1 背景信息100.2 前提条件100.3 注意事项100.4 操作步骤100.5 相关参考 openGauss学习笔记-100 openGauss 数据库管理-管理数据库安全-客户端接入之用SSL进行安…