1. Java
业务系统和 MySQL
的交互
Java
业务系统和 MySQL
的交互概览
1.1. MySQL
驱动有啥用
要在 Java
系统访问 MySQL
,得加个 MySQL
驱动依赖,才能和 MySQL
建立连接,然后执行 CRUD
,这段 maven
配置中就引入了一个 MySQL
驱动。mysql-connector-java
就是 Java
语言使用的 MySQL
驱动
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
访问 MySQL
,就得和 MySQL
建立网络连接,而这就由 MySQL
驱动负责,他会在底层和 MySQL
服务器建立网络连接,有了这个连接,才能发送请求给 MySQL
服务器
和 MySQL
服务器有了网络连接后,Java
业务代码就能基于此连接,执行 CRUD
语句了
1.2. 数据库连接池有啥用
常用的数据库连接池有:c3p0, dbcp, druid, HikariCP
一个 Java
系统只会和 MySQL
建立一个连接吗?肯定不止的,用 Java
开发的 Web
系统部署在 Tomcat
中,而 Tomcat
本身就有多个线程并发处理接收到的大量请求
若 Tomcat
中的多个线程并发处理多个请求时,都去抢夺一个连接访问 MySQL
,那效率肯定很低
若 Tomcat
中的上百个线程,每个线程在每次访问 MySQL
时,都基于 MySQL
驱动去创建一个数据库连接,然后执行 SQL
语句,然后执行完后再销毁该连接。这样并发频繁创建数据库连接,又频繁销毁数据库连接的操作可不好,因为每次建立一个数据库连接都很耗时,好不容易建好连接,执行完 SQL
,还把它给销毁,下次又得重新建立数据库连接,效率肯定低下
所以得使用一个数据库连接池:在一个池子里维护多个数据库连接,让多个线程使用池中不同数据库连接去执行 SQL
,执行完 SQL
后,不是销毁数据库连接,而是将连接放回池,后续复用。数据库连接池的机制解决了:
- 多个线程并发使用多个数据库连接执行
SQL
- 避免了数据库连接使用完之后就销毁
1.3. MySQL
本身的连接池干嘛的
很多系统要与 MySQL
建立大量连接,那 MySQL
必然也得维护与系统之间的各个连接,所以 MySQL
架构体系中的第一个环节,就是连接池。
MySQL
本身的连接池就维护了与系统之间的多个数据库连接