跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

JavaWeb 后端开发学习笔记:MySQL 与 MyBatis 基础

记录了 JavaWeb 后端开发中 MySQL 数据库操作与 MyBatis 框架的使用。涵盖 SQL 语言分类(DDL、DML、DQL)、表结构定义、约束、数据类型及常用增删改查语句。同时介绍了 MyBatis 的引入、配置、注解方式与 XML 映射文件开发规范,包含实体类创建与 Mapper 接口编写示例。

ByteFlow发布于 2026/3/28更新于 2026/9/1165 浏览
JavaWeb 后端开发学习笔记:MySQL 与 MyBatis 基础

一、MySQL 数据库

数据库:英文为 DataBase,简称 DB,它是存储和管理数据的仓库。

1、SQL(Structured Query Language,简称 SQL)

结构化查询语言,它是操作关系型数据库的编程语言,定义了一套操作关系型数据库的统一标准。

关系型数据库:建立在关系模型基础上,由多张相互连接的二维表组成的数据库。

特点:

  • 使用表存储数据,格式统一,便于维护。
  • 使用 SQL 语言操作,标准统一,使用方便,可用于复杂查询。

2、SQL 语句

SQL 语句根据其功能被分为四大类:DDL、DML、DQL、DCL。

① DDL

DDL 英文全称是 Data Definition Language(数据定义语言),用来定义数据库对象(数据库、表)。常见操作:查询、创建、使用、删除。

查询所有数据库:

show databases;

查询当前数据库:

select database();

创建数据库:

create database [ if not exists ] 数据库名 [default charset utf8mb4];

使用数据库:

use 数据库名 ;

删除数据库:

drop database [ if exists ] 数据库名 ;

DDL 语句当中关于表结构的操作。关于表结构的操作也是包含四个部分:创建表、查询表、修改表、删除表。

创建:

create table 表名 ( 字段 1 字段 1 类型 [约束] [comment 字段 1 注释 ], 字段 2 字段 2 类型 [约束] [comment 字段 2 注释 ], ...... 字段 n 字段 n 类型 [约束] [comment 字段 n 注释 ] ) [ comment 表注释 ] ;

注意:[ ] 中的内容为可选参数;最后一个字段后面没有逗号。

-- 创建表 create table user( id int comment 'ID 唯一标识', username varchar(50) comment'用户名', name varchar(10) comment'姓名', age int comment '年龄', gender char(1) comment '性别' )comment '用户信息表';

若想要限制字段所存储的数据,就需要用到数据库中的约束。

约束

作用在表中字段上的规则,用于限制存储在表中的数据。保证数据库当中数据的正确性、有效性和完整性。

注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。

主键自增:auto_increment——每次插入新的行记录时,数据库自动生成 id 字段 (主键) 下的值,具有 auto_increment 的数据列是一个正数序列开始增长 (从 1 开始自增)。

-- 创建表 (约束) create table user( id int primary key auto_increment comment 'ID 唯一标识',-- 主键约束 自增 username varchar(50) not null unique comment'用户名',-- 非空 唯一约束 name varchar(10) not null comment'姓名',-- 非空 age int comment '年龄', gender char(1) default '男'comment '性别'-- 默认值 )comment '用户信息表';
MySQL 数据类型

MySQL 中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。

数值类型: ![图片:数值类型]

字符串类型: ![图片:字符串类型]

日期时间类型: ![图片:日期时间类型]

总结

关于表结构的查看、修改、删除操作,工作中一般都是直接基于图形化界面操作

② DML

DML 英文全称是 Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增、删、改操作。

增加(insert)
  • 向指定字段添加数据
insert into 表名 (字段名 1, 字段名 2) values (值 1, 值 2);
  • 全部字段添加数据
insert into 表名 values (值 1, 值 2, ...);
  • 批量添加数据(指定字段)
insert into 表名 (字段名 1, 字段名 2) values (值 1, 值 2), (值 1, 值 2);
  • 批量添加数据(全部字段)
insert into 表名 values (值 1, 值 2, ...), (值 1, 值 2, ...);

**注意事项:**插入数据时,指定的字段顺序需要与值的顺序是对应的。字符串和日期型数据应该包含在引号中。插入的数据大小,应该在字段的规定范围内。

修改(update)
update 表名 set 字段名 1 = 值 1 , 字段名 2 = 值 2 , .... [where 条件] ;

**注意事项:**修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。在修改数据时,一般需要同时修改公共字段 update_time,将其修改为当前操作时间。

删除(delete)
delete from 表名 [where 条件] ;

**注意事项:**DELETE 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。DELETE 语句不能删除某一个字段的值 (可以使用 UPDATE,将该字段值置为 NULL 即可)。当进行删除全部数据操作时,会提示询问是否确认删除所有数据,直接点击 Execute 即可。

③ DQL

DQL 英文全称是 Data Query Language(数据查询语言),用来查询数据库表中的记录。

语法结构如下:

SELECT 字段列表 FROM 表名列表 WHERE 条件列表 GROUP BY 分组字段列表 HAVING 分组后条件列表 ORDER BY 排序字段列表 LIMIT 分页参数
基本查询
  • 查询多个字段
select 字段 1, 字段 2, 字段 3 from 表名;
  • 查询所有字段(通配符)
select * from 表名;
  • 设置别名
select 字段 1 [ as 别名 1 ] , 字段 2 [ as 别名 2 ] from 表名;
  • 去除重复记录
select distinct 字段列表 from 表名;

注意:* 号代表查询所有字段,在实际开发中尽量少用(不直观、影响效率)

条件查询

语法:

select 字段列表 from 表名 where 条件列表 ; -- 条件列表:意味着可以有多个条件

学习条件查询就是学习条件的构建方式,而在 SQL 语句当中构造条件的运算符分为两类:比较运算符、逻辑运算符。

**注意:**查询为 NULL 的数据时,不能使用 = null 或 !=null 。得使用 is null 或 is not null。

聚合函数

聚合函数查询就是纵向查询,它是对一列的值进行计算,然后返回一个结果值。(将一列数据作为一个整体,进行纵向计算)

注意 : 聚合函数会忽略空值,对 NULL 值不作为统计。

分组查询

按照某一列或者某几列,把相同的数据进行合并输出,语法如下:

select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];

注意:分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。执行顺序:where > 聚合函数 > having。

where 与 having 的区别——执行时机不同:where 是分组之前进行过滤,不满足 where 条件,不参与分组;而 having 是分组之后对结果进行过滤。判断条件不同:where 不能对聚合函数进行判断,而 having 可以。

排序查询

对于数据进行降序(DESC),升序(ASC),或者一些排序,若未指明排序条件,则默认为升序排序,语法如下:

select 字段列表 from 表名 [where 条件列表] [group by 分组字段 ] order by 字段 1 排序方式 1 , 字段 2 排序方式 2 … ;

**注意事项:**如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。

分页查询

分页操作在业务系统开发时,也是非常常见的一个功能,语法如下:

select 字段列表 from 表名 limit 起始索引,查询记录数 ;

注意事项:

  • 起始索引从 0 开始。计算公式:起始索引 = (查询页码 - 1)* 每页显示记录数
  • 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL 中是 LIMIT
  • 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 条数

二、MyBatis

1、创建 MyBatis

MyBatis 是一款优秀的 持久层框架,用于简化 JDBC 的开发。

导入 Mybatis 的起步依赖: 勾选后,将自动在 maven 里添加对应的依赖项。

在 application.properties 中配置数据库的连接信息。

#数据库访问的 url 地址 spring.datasource.url=jdbc:mysql://localhost:3306/web #数据库驱动类类名 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver #访问数据库 - 用户名 spring.datasource.username=root #访问数据库 - 密码 spring.datasource.password=root@1234

配置完就可以编写 MyBatis 的代码了,先创建一个 User 实体类(与数据库的内容要一致)

import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class User { private Integer id; private String username; private String password; private String name; private Integer age; }

创建一个包 mapper。在 mapper 包下创建一个接口 UserMapper,这是一个持久层接口(Mybatis 的持久层接口规范一般都叫 XxxMapper)。

import com.genshin.pojo.User; import org.apache.ibatis.annotations.*; import java.util.List; @Mapper//应用程序运行时,会自动创建 UserMapper 接口的实现类对象,并注入到 IOC 容器中 -bean public interface UserMapper { /** * 查询所有用户 */ /* @Select("select * from user")*/ public List<User>findAll(); /** * 根据 id 删除用户 */ @Delete("delete from user where id = #{id}") public Integer deleteById(Integer id); /** * 插入用户 */ @Insert("insert into user(username,password,name,age) values(#{username},#{password},#{name},#{age})") public void insert(User user); /** * 根据 id 更新用户 */ @Update("update user set username=#{username},password=#{password},name=#{name},age=#{age} where id=#{id}") public void update(User user); /** * 根据用户名和密码查询用户 */ @Select("select * from user where username=#{username} and password=#{password}") //public User findByUsernameAndPassword(@Param("username") String username, @Param("password") String password); public User findByUsernameAndPassword(String username, String password); }

2、XML 映射配置

MyBatis 的开发方式主要有两种:注解和XML,使用 Mybatis 的注解方式,主要是来完成一些简单的增删改查功能。如果需要实现复杂的 SQL 功能,建议使用 XML 来配置映射语句,也就是将 SQL 语句写在 XML 配置文件中。

使用 XML 开发需要有以下的规范:

  1. XML 映射文件的名称与 Mapper 接口名称一致,并且将 XML 映射文件和 Mapper 接口放置在相同包下(同包同名)
  2. XML 映射文件的 namespace 属性为 Mapper 接口全限定名一致
  3. XML 映射文件中 sql 语句的 id 与 Mapper 接口中的方法名一致,并保持返回类型一致。

在上述的 resource 文件创建对应的 xml 文件,并写入对应的映射文件——xml 映射文件中的 dtd 约束,直接从 mybatis 官网复制即可。

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper> <!--resultType:指定查询结果的封装类型--> <select resultType="com.genshin.pojo.User"> select id,username,password,name,age from user </select> </mapper>

目录

  1. 一、MySQL 数据库
  2. 1、SQL(Structured Query Language,简称 SQL)
  3. 2、SQL 语句
  4. ① DDL
  5. 约束
  6. MySQL 数据类型
  7. 总结
  8. ② DML
  9. 增加(insert)
  10. 修改(update)
  11. 删除(delete)
  12. ③ DQL
  13. 基本查询
  14. 条件查询
  15. 聚合函数
  16. 分组查询
  17. 排序查询
  18. 分页查询
  19. 二、MyBatis
  20. 1、创建 MyBatis
  21. 2、XML 映射配置

更多推荐文章

查看全部
  • WebVOWL:OWL 本体可视化入门与实践指南
  • 延迟渲染中的 C++ 实现要点与性能权衡
  • Java ArrayList 动态数组核心原理与使用指南
  • C++ 协程与 Fiber 在游戏异步编程中的应用实践
  • 使用 git-filter-repo 优雅清理 Git 历史记录
  • 纹理对象的实时姿态估计
  • Whisper 模型本地化部署:版本选择与离线环境搭建
  • JetBrains 授权机制解析与合法使用策略指南
  • FPGA 中 XDMA 多通道传输架构解析
  • DeepSeek 各版本演进路线与核心特性对比
  • C++ 手写 HTTP 服务器:从请求解析到响应构建
  • Visual C++ Redistributable 诊断与修复完整指南
  • KNN 算法原理、实现与 K 值调参指南
  • VS Code 集成 Git 安装与配置实战指南
  • 大模型技术原理与工程化应用实践指南
  • C++ 基础数据类型详解与课后练习
  • 基于 PyQT 与高德 JS API 构建桌面三维地形图应用
  • 如何在 Windows 上本地运行 DeepSeek
  • AI 小说创作全流程指南:工具使用与原理
  • Python 编程快速入门

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online