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

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

数据库:英文为 DataBase,简称 DB,它是存储和管理数据的仓库。
结构化查询语言,它是操作关系型数据库的编程语言,定义了一套操作关系型数据库的统一标准。
关系型数据库:建立在关系模型基础上,由多张相互连接的二维表组成的数据库。
特点:
SQL 语句根据其功能被分为四大类:DDL、DML、DQL、DCL。
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 中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。
数值类型: ![图片:数值类型]
字符串类型: ![图片:字符串类型]
日期时间类型: ![图片:日期时间类型]
关于表结构的查看、修改、删除操作,工作中一般都是直接基于图形化界面操作
DML 英文全称是 Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增、删、改操作。
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 表名 set 字段名 1 = 值 1 , 字段名 2 = 值 2 , .... [where 条件] ;
**注意事项:**修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。在修改数据时,一般需要同时修改公共字段 update_time,将其修改为当前操作时间。
delete from 表名 [where 条件] ;
**注意事项:**DELETE 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。DELETE 语句不能删除某一个字段的值 (可以使用 UPDATE,将该字段值置为 NULL 即可)。当进行删除全部数据操作时,会提示询问是否确认删除所有数据,直接点击 Execute 即可。
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 起始索引,查询记录数 ;
注意事项:
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); }
MyBatis 的开发方式主要有两种:注解和XML,使用 Mybatis 的注解方式,主要是来完成一些简单的增删改查功能。如果需要实现复杂的 SQL 功能,建议使用 XML 来配置映射语句,也就是将 SQL 语句写在 XML 配置文件中。
使用 XML 开发需要有以下的规范:
在上述的 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>

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online