☰
MySQL与JDBC
2026/9/27 22:38:46 网站建设 项目流程

后端业务离不开数据持久化,MySQL负责存储数据,那么JDBC则是Java程序访问数据库的标准规范。学会MySQL+JDBC,才算真正把Java程序和数据库连接起来,也是为后面学习MyBatis、MyBatis-Plus框架打好基础。

在Java后端的学习路线中,学完Java基础、IO、反射之后,下一步就要接触数据库。我们在程序中产生的数据,都存放在内存里,可是程序一重启数据就会全部丢失。那么想要把数据永久保存下来,就需要数据库来完成。MySQL存储数据,JDBC使Java能够操作数据库。现在流行的MyBatis、MyBatis-Plus本质上只是对JDBC做了封装,底层依旧是JDBC。想要理解ORM框架,就一定要先把原生MySQL+JDBC学明白。

一、MySQL

MySQL是一款开源的关系型数据库,以表的形式存储数据。库下面有多张表,表由行和列组成,列代表字段,行代表一条真实数据。

1.基础SQL操作

SQL是操作关系型数据库的语言,主要就是增删改查CRUD。

Create新增:insertinto表名(字段1,字段2)values(值1,值2);

Read查询:select字段from表名where条件groupby分组orderby排序limit分页;

Update修改:update表名set字段=值where条件;

Delete删除:deletefrom表名where条件;

!!执行update、delete一定要加where条件,否则会修改或者删除整张表全部数据!!

2.表约束

建表时用来保证数据合法性:

主键primarykey:唯一标识每一条记录,非空且唯一,一般使用自增auto_increment

非空notnull:字段不能为null

唯一unique:字段值不能重复

默认值default:不给值的时候填充默认内容

3.MySQL深入

(1)索引

可以提升查询速度,索引就相当于书的目录。主键自带索引;过多索引会降低增删改性能。

(2)事务

一组SQL语句,要么全部执行成功,要么全部失败回滚。具备ACID四大特性:原子性、一致性、隔离性、持久性。

(3)事务隔离级别

解决脏读、不可重复读、幻读问题,MySQL默认隔离级别是REPEATABLEREAD(可重复读)。

(4)多表查询

内连接、左连接、右连接,实际业务大多不会做物理外键,靠业务逻辑维护表关系。

4.MySQL常见业务场景

用户信息存储、订单数据、商品数据、业务各类数据持久化;几乎所有后端系统都依赖MySQL存储业务数据。

二、JDBC

有了MySQL数据库,我们可以在Navicat、命令行写SQL。但是程序运行的时候,不可能人工手动执行SQL。这时候JDBC就是Java语言访问数据库的一套官方接口规范。

JDBC只是接口,真正干活的是数据库厂商提供的驱动(mysql-connector-java)。相当于一套标准,MySQL厂商写实现类,我们面向接口编程。

1.JDBC核心API

(1)DriverManager:驱动管理类,获取数据库连接Connection

(2)Connection:数据库连接对象,Java程序和数据库之间的会话,非常珍贵的资源

(3)Statement/PreparedStatement:执行SQL语句的对象

Statement:执行SQL,存在SQL注入漏洞,不推荐使用

PreparedStatement:预编译对象,预编译SQL,使用?占位符,解决SQL注入,性能更好,开发优先选择:

(1)ResultSet:结果集,封装select查询返回的数据,通过游标读取每一行记录

(2)资源关闭:Connection、PreparedStatement、ResultSet都属于数据库资源,必须关闭释放。JDK7可以使用try-with-resources自动关闭。

2.JDBC标准执行流程

(1)加载MySQL驱动

(2)通过DriverManager获取Connection数据库连接(url、用户名、密码)

(3)编写带?占位符的SQL语句

(4)获取PreparedStatement预编译对象,给?占位符赋值

(5)执行SQL,如果是查询调用executeQuery()返回ResultSet;增删改调用executeUpdate()返回受影响行数

(6)处理结果集ResultSet

(7)关闭所有资源(try-with-resources自动释放)

3.数据库连接池

原生JDBC每次操作数据库都创建新连接,用完就关闭。频繁创建销毁连接的开销非常大,性能很差。数据库连接池就是提前创建一批连接放在池子里,程序直接从池中拿连接,使用完毕归还池子,不进行销毁操作。

常用:Druid(阿里,企业最常用)、HikariCP(SpringBoot默认)。实际开发中不会直接使用DriverManager获取连接,全部使用连接池拿到Connection。

4.JDBC易错点

(1)忘记关闭资源,数据库连接没有释放,连接耗尽,程序无法访问数据库。优先使用try-with-resources。

(2)使用Statement拼接字符串,产生SQL注入漏洞,一定要使用PreparedStatement+?占位符。

(3)url地址写错、时区没有配置,MySQL8需要指定时区serverTimezone=Asia/Shanghai。

(4)ResultSet遍历顺序错误,只能向下移动游标,不能回退。

三、MySQL+JDBC和框架的关系

JDBC写原生代码存在大量重复模板代码:获取连接、赋值占位符、遍历ResultSet、关闭资源。所以MyBatis对JDBC做封装,帮我们屏蔽重复代码,只需要写SQL和实体映射,但是底层仍然调用JDBC。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询