springboot入门学习笔记2(连接mysql,使用mybatis,plus等)

对于application.yml的学习

application.yml 是 Spring Boot 的核心配置文件,用于定义应用程序的配置属性。

它允许开发者通过 YAML 格式配置各种属性,如服务器端口、数据库连接、第三方服务端点等。

这些属性通过 Spring 的 @ConfigurationProperties 注解与 Java 对象绑定。

application.yml 支持不同环境的配置,如开发环境(application-dev.yml)、测试环境(application-test.yml)和生产环境(application-prod.yml

我们可以切分application,将其分成多个分文件

  application-dev.yml和application-prod.yml分别表示开发环境和生产环境

内容如下

application.yml

spring:application:name: springboot3-learnprofiles:active: dev

spring:: 这是 YAML 文件中的顶级键,表示接下来的配置都是与 Spring 框架相关的。

application:: 这是 spring 下的一个子键,用于定义应用程序级别的配置。

name: springboot3-learn: 这设置了应用程序的名称。在这个例子中,应用程序被命名为 "springboot3-learn"。 应用程序名称可以在日志、监控、服务发现等场景中使用。

profiles:: 这是另一个 spring 下的子键,用于配置 Spring 的 profiles 功能。

active: dev: 这指定了当前激活的 profile 是 "dev"(开发环境)

 

application-dev.yml 

server:port: 8000# springdoc-openapi项目配置
springdoc:swagger-ui:path: /swagger-ui.htmltags-sorter: alphaoperations-sorter: alphaapi-docs:path: /v3/api-docsgroup-configs:- group: 'default'paths-to-match: '/**'packages-to-scan: net.chatmindai.springboot3learn.controller# knife4j的增强配置,不需要增强可以不配
knife4j:enable: truesetting:language: zh_cnspring:datasource:url: jdbc:mysql://124.223.65.138:38306/springboot3learn?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghaiusername: springboot3learnpassword: jhYWm3YHh6GGKppY

这段代码可以分为四段,分别起到

设置应用程序运行的端口为 8000。 

配置 Swagger UI 和 OpenAPI 文档。设置 Swagger UI 的路径,API 文档路径,以及要扫描的包。

启用 Knife4j(一个 Swagger 增强工具)并设置语言为中文。

配置 MySQL 数据库连接。指定数据库 URL、用户名和密码。

application-prod.yml

server:port: 80
knife4j:enable: false

 在application.yml代码中,active: dev用来激活开发环境的代码

  • 你可能会有多个配置文件,如 application-dev.ymlapplication-prod.yml 等。
  • 设置 active: dev 会使 Spring Boot 加载 application-dev.yml 中的配置。
  • 这允许你为不同的环境(如开发、测试、生产)维护不同的配置,而无需更改代码。
  • 总而言之,便于维护,起到一个类似于封装的作用。

application各种环境的工作原理

application.yml 包含默认配置。

application-dev.yml 包含开发环境特有的配置。

当应用程序启动时,它会加载 application.yml 和 application-dev.yml。(应用程序启动时激活了 dev Profile)

应用程序将使用 application-dev.yml 中定义的配置属性。

创建并连接数据库

我们引入两个依赖,用来集成 MyBatis-Plus,利用其增强功能来简化数据库操作,和通过java连接数据库。

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.7</version>
</dependency>
<dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope>
</dependency>

接下来我们导入数据库

使用如下mysql语句

-- auto-generated definition
create table demo_user
(id           bigint auto_increment comment '主键ID'primary key,name         varchar(50)                        not null comment '用户名称,长度2-50个字符',age          int                                not null comment '用户年龄,0-150岁',email        varchar(255)                       not null comment '用户邮箱地址',phone_number varchar(20)                        null comment '用户手机号,格式:1开头的11位数字',birth_date   date                               null comment '用户出生日期',plan_date    date                               null comment '计划日期,必须是未来的日期',score        double                             null comment '用户分数,必须为正数',hobbies      json                               null comment '用户兴趣爱好列表,1-5项',agree_terms  tinyint(1)                         not null comment '是否同意服务条款',create_at    datetime default CURRENT_TIMESTAMP null comment '记录创建时间',update_at    datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '记录最后更新时间'
)comment '演示用户信息表' collate = utf8mb4_unicode_ci;

再找到之前创建的mysql表,生成mybatis-plus注解

我们可以看到生成了上述这几个类

我们来一个一个仔细分析

  • 通过 MyBatis-Plus,可以很容易地对 User 表进行 CRUD(创建、读取、更新、删除)操作。
  • MyBatis-Plus 提供了代码生成器,可以自动生成实体类、Mapper 映射文件、Mapper 接口和 Service 接口,从而简化数据库操作代码的编写。

 一.User.java

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;/*** 演示用户信息表* @TableName demo_user*/
@TableName(value ="demo_user")
@Data
public class User implements Serializable {/*** 主键ID*/@TableId(type = IdType.AUTO)private Long id;/*** 用户名称,长度2-50个字符*/private String name;/*** 用户年龄,0-150岁*/private Integer age;/*** 用户邮箱地址*/private String email;/*** 用户手机号,格式:1开头的11位数字*/private String phoneNumber;/*** 用户出生日期*/private Date birthDate;/*** 计划日期,必须是未来的日期*/private Date planDate;/*** 用户分数,必须为正数*/private Double score;/*** 用户兴趣爱好列表,1-5项*/private Object hobbies;/*** 是否同意服务条款*/private Integer agreeTerms;/*** 记录创建时间*/private Date createAt;/*** 记录最后更新时间*/private Date updateAt;@TableField(exist = false)private static final long serialVersionUID = 1L;
}

 @TableName("demo_user"):指定这个类对应的数据库表名为 demo_user

@Data:来自 Lombok 库,自动生成类的所有 getter 和 setter 方法,以及构造函数、equals、hashCode 和 toString 方法。

@TableId(type = IdType.AUTO):指定 id 字段作为主键,并使用数据库的自动增长(AUTO)策略。

Serializable 接口实现使得 User 类的对象可以被序列化和反序列化,这对于对象在网络传输或存储到文件/数据库中是必要的。

二.UserMapper.java

import com.example.springboot3learn.entity.user.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;/**
* @author 徐子昂的电脑
* @description 针对表【demo_user(演示用户信息表)】的数据库操作Mapper
* @createDate 2024-10-28 11:43:02
* @Entity com.example.springboot3learn.entity.user.DemoUser
*/
public interface UserMapper extends BaseMapper<User> {}

这段代码义了一个名为 UserMapper 的接口,它用于执行对数据库表 demo_user 的数据库操作。导入了 MyBatis-Plus 提供的 BaseMapper 接口,它提供了基本的数据库操作方法。

Basemapper接口

BaseMapper 接口提供了增删改查(CRUD)操作的基本方法,如 insertdeleteByIdupd

以下是 BaseMapper 接口提供的一些常用方法:

  • insert(T entity):插入一条记录。
  • deleteById(Serializable id):根据主键删除一条记录。
  • deleteByIds(Collection<? extends Serializable> ids):根据主键集合删除多条记录。
  • updateById(T entity):根据主键更新一条记录。
  • selectById(Serializable id):根据主键查询一条记录。
  • selectBatchIds(Collection<? extends Serializable> ids):根据主键集合查询多条记录。
  • selectOne(T queryWrapper):根据条件查询一条记录。
  • selectList(T queryWrapper):根据条件查询多条记录。
  • selectPage(IPage<T> page, T queryWrapper):根据条件分页查询记录。

ateByIdselectById 等,这些方法可以直接在实体类上使用。

通过继承 BaseMapper 接口,开发者可以直接使用这些方法来操作数据库,而不需要编写具体的 SQL 语句。例如:

public interface UserMapper extends BaseMapper<User> {// 无需额外的方法定义,直接使用BaseMapper提供的方法
}

然后,在服务层或控制器层,可以直接注入 UserMapper 并使用它提供的方法:

@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public User getUserById(Long id) {return userMapper.selectById(id);}// 其他数据库操作方法...
}

例如上述代码 private UserMapper userMapper; 定义了一个 UserMapper 类型的私有成员变量,用于在 UserService 类中执行数据库操作。

BaseMapper 接口极大地简化了数据库操作的开发工作,提高了开发效率。 

三.UserService.java

import net.chatmindai.springboot3learn.entity.user.User;
import com.baomidou.mybatisplus.extension.service.IService;/**
* @author zhangkun
* @description 针对表【demo_user(演示用户信息表)】的数据库操作Service
* @createDate 2024-10-08 14:41:15
*/
public interface UserService extends IService<User> {}

定义了一个 UserService 接口,它扩展了 MyBatis-Plus 提供的 IService 接口

MyBatis-Plus 的 IService 接口

IService 是 MyBatis-Plus 提供的一个服务层接口,它为开发者提供了一系列服务层操作方法,这些方法封装了基本的 CRUD(创建、读取、更新、删除)操作。以下是 IService 接口提供的一些关键点:

  • 泛型支持IService 接口是泛型的,可以接受任何实体类作为参数,这使得它可以适用于不同的表和实体类。

  • 扩展性IService 接口提供了基本的 CRUD 方法,但开发者也可以根据需要添加自定义的方法。
  • 与 BaseMapper 的关系IService 接口通常与 BaseMapper 接口一起使用,BaseMapper 提供了数据访问层的操作,而 IService 提供了业务逻辑层的操作。

UserService 接口的作用

  • 业务逻辑封装UserService 接口将 demo_user 表的数据库操作封装在服务层,使得业务逻辑与数据访问层分离。
  • 服务层操作:通过扩展 IService<User>UserService 接口可以提供基本的 CRUD 操作,如添加、删除、更新和查询用户信息。
  • 自定义方法:开发者可以在 UserService 接口中添加自定义方法,以实现更复杂的业务逻辑。

四.UserServiceImpl.java

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import net.chatmindai.springboot3learn.entity.user.User;
import net.chatmindai.springboot3learn.service.UserService;
import net.chatmindai.springboot3learn.mapper.UserMapper;
import org.springframework.stereotype.Service;/**
* @author zhangkun
* @description 针对表【demo_user(演示用户信息表)】的数据库操作Service实现
* @createDate 2024-10-08 14:41:15
*/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User>implements UserService{}

类定义 

@Service 注解用于标识 UserServiceImpl 类是一个服务层组件。

UserServiceImpl 类扩展了 ServiceImpl<UserMapper, User> 类,这意味着它继承了 MyBatis-Plus 提供的服务层实现类的功能。

UserServiceImpl 类实现了 UserService 接口,它必须提供接口中定义的所有方法的实现。

 MyBatis-Plus 的 ServiceImpl 类

ServiceImpl 类是 MyBatis-Plus 提供的一个服务层实现类的基类,它封装了基本的 CRUD 操作,并提供了一些额外的服务层方法。ServiceImpl 类需要两个泛型参数:

  • 第一个参数是 Mapper 接口类型,这里传入 UserMapper
  • 第二个参数是实体类类型,这里传入 User

五.UserMapper.xml

这段代码是 MyBatis 的 Mapper XML 配置文件的一部分,它定义了与数据库表 demo_user 的映射关系。

我们来看代码,接下来拆分逐一分析

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="net.chatmindai.springboot3learn.mapper.UserMapper"><resultMap id="BaseResultMap" type="net.chatmindai.springboot3learn.entity.user.User"><id property="id" column="id" jdbcType="BIGINT"/><result property="name" column="name" jdbcType="VARCHAR"/><result property="age" column="age" jdbcType="INTEGER"/><result property="email" column="email" jdbcType="VARCHAR"/><result property="phoneNumber" column="phone_number" jdbcType="VARCHAR"/><result property="birthDate" column="birth_date" jdbcType="DATE"/><result property="planDate" column="plan_date" jdbcType="DATE"/><result property="score" column="score" jdbcType="DOUBLE"/><result property="hobbies" column="hobbies" jdbcType="OTHER"/><result property="agreeTerms" column="agree_terms" jdbcType="TINYINT"/><result property="createAt" column="create_at" jdbcType="TIMESTAMP"/><result property="updateAt" column="update_at" jdbcType="TIMESTAMP"/></resultMap><sql id="Base_Column_List">id,name,age,email,phone_number,birth_date,plan_date,score,hobbies,agree_terms,create_at,update_at</sql>
</mapper>

一,XML 声明和 DTD

<?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">

<?xml version="1.0" encoding="UTF-8"?>:这是 XML 文件的声明,指定了 XML 的版本和编码方式。

<!DOCTYPE mapper ...>:这是一个文档类型声明(DTD),指定了 MyBatis Mapper XML 文件的 DTD,确保了 XML 文件的正确性。

二,<mapper> 标签

<mapper namespace="net.chatmindai.springboot3learn.mapper.UserMapper">
  • <mapper> 标签定义了整个 Mapper 文件的根元素。
  • namespace 属性指定了 Mapper 接口的完全限定名,这里指定了 UserMapper 接口的包路径和类名。

三,<resultMap> 标签

<resultMap id="BaseResultMap" type="net.chatmindai.springboot3learn.entity.user.User"><!-- resultMap 配置 -->
</resultMap>
  • <resultMap> 标签定义了实体类与数据库表的映射关系。
  • id 属性是 resultMap 的唯一标识符。
  • type 属性指定了 resultMap 映射到的实体类,这里指定了 User 类的完全限定名。
如何理解上述代码中“id 属性是 resultMap 的唯一标识符”
  • 唯一性id 属性的值在整个 MyBatis 配置文件中必须是唯一的。这意味着在一个 MyBatis 配置文件中,不能有两个 <resultMap> 标签具有相同的 id 值。
  • 引用:其他 <select><insert><update> 或 <delete> 标签可以通过 resultMap 属性引用 <resultMap> 标签,以指定使用哪个 resultMap 来映射查询结果。

我们来举个例子

假设你有两个不同的实体类 UserAddress,它们各自有自己的 resultMap。在 MyBatis 配置文件中,你可以这样定义它们:

<resultMap id="UserResultMap" type="com.example.entity.User"><id property="id" column="id" /><result property="name" column="name" /><result property="age" column="age" />
</resultMap><resultMap id="AddressResultMap" type="com.example.entity.Address"><id property="id" column="id" /><result property="street" column="street" /><result property="city" column="city" />
</resultMap>

在这个例子中,UserResultMapAddressResultMap 是两个不同的 resultMap,它们分别对应 UserAddress 实体类。它们的 id 属性值是唯一的,分别是 "UserResultMap""AddressResultMap"

 引用 resultMap

在查询语句中,你可以通过 resultMap 属性来指定使用哪个 resultMap 来映射查询结果。例如:

<select id="selectUserById" resultMap="UserResultMap">SELECT id, name, age FROM users WHERE id = #{id}
</select>

在这个 <select> 标签中,resultMap 属性的值是 "UserResultMap",这意味着查询结果将使用 UserResultMap 来映射到 User 实体类。 

四.<id> 和 <result> 标签

<id property="id" column="id" jdbcType="BIGINT"/>
<result property="name" column="name" jdbcType="VARCHAR"/>
<!-- 其他 result 标签 -->
  • <id> 和 <result> 标签用于定义实体类属性与数据库列的映射。
  • property 属性指定了实体类中的属性名。
  • column 属性指定了数据库表中的列名。
  • jdbcType 属性指定了列的数据类型,这对于 MyBatis 生成正确的 SQL 语句很重要。

五.<sql> 标签

<sql id="Base_Column_List">id,name,age,email,phone_number,birth_date,plan_date,score,hobbies,agree_terms,create_at,update_at
</sql>
  • <sql> 标签定义了一个可重用的 SQL 片段。
  • id 属性是 SQL 片段的唯一标识符。
  • <sql> 中的内容是一个 SQL 语句,这里定义了基本的列列表。

总结

这段 Mapper XML 配置文件定义了 User 实体类与数据库表 demo_user 的映射关系,包括实体类属性与数据库列的映射,以及一个可重用的列列表。通过这个配置,MyBatis 可以将 User 实体类与数据库表进行映射,并执行相应的 SQL 语句。

然后需要给启动类加一个注解用于扫描 @MapperScan("net.chatmindai.springboot3learn.mapper")

mport org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@MapperScan("com.example.springboot3learn.mapper")
public class Springboot3LearnApplication {public static void main(String[] args) {SpringApplication.run(Springboot3LearnApplication.class, args);}}

关于上述文件的交互作用

  • User.java 定义了用户的数据结构。
  • UserMapper.java 定义了与数据库表交互的方法。
  • UserMapper.xml 定义了实体类与数据库表的映射关系。
  • UserService.java 定义了用户管理的业务逻辑方法。
  • UserServiceImpl.java 实现了用户管理的业务逻辑,并调用 UserMapper 接口来执行数据库操作。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

5G基础知识

那个工种&#xff1f; FDD 频分双工&#xff08;Frequency Division Duplexing&#xff09;&#xff0c;理解起来很简单&#xff0c;就是把上行和下行业务隔离在两个频段&#xff0c;互不干扰。 而 TDD 时分双工&#xff08;Time-Division Duplexing&#xff09;&#xff0c;是…

大数据治理:策略、技术与挑战

随着信息技术的飞速发展&#xff0c;大数据已经成为现代企业运营和决策的重要基础。然而&#xff0c;大数据的复杂性、多样性和规模性给数据管理带来了前所未有的挑战。因此&#xff0c;大数据治理应运而生&#xff0c;成为确保数据质量、合规性、安全性和可用性的关键手段。本…

022集——统计多条线的总长度(CAD—C#二次开发入门)

如下图所示&#xff0c;选择多条线并统计长度&#xff1a; c#中不包含直接获取curve曲线长度 属性&#xff0c;需用如下方法&#xff1a;curve.GetDistanceAtParameter(item.EndParam) 附部分代码如下&#xff1a; using Autodesk.AutoCAD.ApplicationServices; using Autode…

WPF+MVVM案例实战(十四)- 封装一个自定义消息弹窗控件(下)

文章目录 1、案例效果2、弹窗控件使用1.引入用户控件2、按钮命令实现 3、总结4、源代码获取 1、案例效果 2、弹窗控件使用 1.引入用户控件 打开 Wpf_Examples 项目&#xff0c;在引用中添加用户控件库&#xff0c;在 MainWindow.xaml 界面引用控件库&#xff0c;代码如下&…

2024年计算机视觉与图像处理国际学术会议 (CVIP 2024)

目录 大会简介 主办单位&#xff0c;协办单位 组委会 主讲嘉宾 征稿主题 参会方式 会议议程 重要信息 会议官网&#xff1a;iccvip.org 大会时间&#xff1a;2024年11月15日-17日 大会地点&#xff1a;中国 杭州 大会简介 2024年计算机视觉与图像处理国际学术会议(C…

硅谷甄选(8)spu

Spu模块 SPU(Standard Product Unit)&#xff1a;标准化产品单元。是商品信息聚合的最小单位&#xff0c;是一组可复用、易检索的标准化信息的集合&#xff0c;该集合描述了一个产品的特性。通俗点讲&#xff0c;属性值、特性相同的商品就可以称为一个SPU。 7.1 Spu模块的静态…

【element el-date-picker限制时间选择范围】

问题场景 在一次项目中,有一个这样的需求就是填报时间需要在上一次提交信息之后,在限制时间时发现,el-date-picker中的pickerOption中的disableDate是基于日期限制的,若限制日期为今日凌晨,那么今天之后的日期都不能填 <el-date-pickerv-model="selectedDateTime&…

我也谈AI

“随着人工智能技术的不断发展&#xff0c;我们已经看到了它在各行业带来的巨大变革。在医疗行业中&#xff0c;人工智能技术正在被应用于病例诊断、药物研发等方面&#xff0c;为医学研究和临床治疗提供了新的思路和方法&#xff1b;在企业中&#xff0c;人工智能技术可以通过…

机器人对人工智能未来发展的影响

机器人作为人工智能&#xff08;AI&#xff09;技术的一个重要应用领域&#xff0c;对人工智能的未来发展具有深远的影响。机器人和人工智能在技术上存在深度的交叉和融合。人工智能为机器人提供了强大的感知、决策和执行能力&#xff0c;而机器人则成为人工智能技术的最佳载体…

大数据-199 数据挖掘 机器学习理论 - 决策树 模型 决策与条件 香农熵计算

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

ES入门:查询和聚合

安装完ElasticSearch 和 Kibana后我们开始学习 为了方便测试&#xff0c;使用kibana的dev tool来进行学习测试&#xff1a; 测试工具 从索引文档开始 插入 向 Elasticsearch 索引 customer 的 _doc 类型的文档 id 为 1 的文档发送 PUT 请求的例子。 请求体为 JSON 格式&am…

力扣——二叉树的后序遍历(C语言)

1.题目&#xff1a; 给你一棵二叉树的根节点 root &#xff0c;返回其节点值的后序遍历。 2.原理&#xff1a; 这里的遍历&#xff0c;是要存入到数组中&#xff0c;所以需要建立数组&#xff0c;这里传参有*returnSize&#xff0c;需要求节点个数&#xff0c;可以调用前面Tr…

软件测试学习笔记丨Flask操作数据库-数据库和表的管理

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/23427 结构分析 Runner是中间件sqlachemy去驱动Runner&#xff0c;根据不同的数据库去驱动不同的中间件 demo # 导入Flask的类 from flask import Flask # 实例化 Flask的类&#xff0c;并且…

一个小程序如何对接多个收款账户?

背景 我又来了&#xff0c;之前对接过网约巴士系统 网约巴士旅游专线平台搭建历程&#xff0c;运营了两年多了。在运营中完善、在完善中学习&#xff0c;一直是不变的真理。有一句话说得好&#xff1a;先做一个垃圾、用起来再说。 今天又需要升级了&#xff0c;需求是&#…

模型 定位地图

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。心智导航现实的空间图。 1 定位地图模型的应用 1.1 小玉的职业定位与发展规划 小玉&#xff0c;24岁&#xff0c;市场营销专业本科毕业生&#xff0c;有半年汽车销售实习经历。毕业后&#xff0c;她…

java项目之协力服装厂服装生产管理系统的设计与实现(springboot)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的协力服装厂服装生产管理系统的设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; …

[MySQL#7] CRUD(2) | 更新 | 删除 | 聚合函数 | group by

目录 3. 更新 4. 删除 截断表 日志的作用 5. (实验) 插入查询结果 6. 聚合函数 7. 分组查询 接着上篇文章[MySQL#6] 表的CRUD (1) | Create | Retrieve(查) | where继续讲解~ 3. 更新 语法&#xff1a; UPDATE table_name SET column expr [, column expr ...][WHE…

RT-Thread PIN设备 UART设备

引脚简介 芯片上的引脚一般分为四类&#xff1a;电源、时钟、控制与I/O。 I/O口在使用模式上又分为General Purpose Input Output&#xff08;通用输入/输出&#xff09;&#xff0c;简称GPIO&#xff0c;与功能复用I/O&#xff08;如SPI/I2C/UART等&#xff09;。 大多数MCU…

【element ui系列】分享几种实现el-table表格单选的方法

在实际的开发中&#xff0c;经常会用到从表格中选择一条记录的情况&#xff0c;虽然官方给出的例子&#xff0c;但是给人感觉看起来不明显&#xff0c;于是&#xff0c;在此基础上做了改进。接下来&#xff0c;介绍两种常见的实现方法&#xff1a; 1、采用复选框(checkbox)实现…

FastAPI中如果async def和def 路由的区别

在python的整体生态中&#xff0c;虽然已经有很多库支持了异步调用&#xff0c;如可以使用httpx或者aiohttp代替requests库发起http请求&#xff0c;使用asyncio.sleep 代替time.sleep&#xff0c; 但是依然还有很多优秀的第三方库是不支持异步调用也没有可代替的库&#xff0c…