JDBC介绍

JDBC: ( Java DataBase Connectivity ),就是使用Java语言操作关系型数据库的一套API。

本质:

  • Sun公司官方定义的一套操作所有关系型数据库的规范,即接口。

  • 各个数据库厂商去实现这套接口,提供数据库驱动jar包。

  • 我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。

java 复制代码
import com.itheima.pojo.User;
import org.junit.jupiter.api.Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class JdbcTest {
    @Test
    public void testJdbc() throws Exception {
        //1. 注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");

        //2. 获取数据库连接
        String url="jdbc:mysql://127.0.0.1:3306/test";
        String username = "root";
        String password = "mysql";
        Connection connection = DriverManager.getConnection(url, username, password);

        //3. 执行SQL
        Statement statement = connection.createStatement(); //操作SQL的对象
        String sql="select id,name,age,gender,phone from user";
        ResultSet rs = statement.executeQuery(sql);//SQL查询结果会封装在ResultSet对象中

        List<User> userList = new ArrayList<>();//集合对象(用于存储User对象)
        //4. 处理SQL执行结果
        while (rs.next()){
            //取出一行记录中id、name、age、gender、phone下的数据
            int id = rs.getInt("id");
            String name = rs.getString("name");
            short age = rs.getShort("age");
            short gender = rs.getShort("gender");
            String phone = rs.getString("phone");
            //把一行记录中的数据,封装到User对象中
            User user = new User(id,name,age,gender,phone);
            userList.add(user);//User对象添加到集合
        }
        //5. 释放资源
        statement.close();
        connection.close();
        rs.close();

        //遍历集合
        for (User user : userList) {
            System.out.println(user);
        }
    }
}

原始的JDBC程序,存在以下几点问题:

  1. 数据库链接的四要素(驱动、链接、用户名、密码)全部硬编码在java代码中
  2. 查询结果的解析及封装非常繁琐
  3. 每一次查询数据库都需要获取连接,操作完毕后释放连接, 资源浪费, 性能降低

而对于Mybatis来说,我们在开发持久层程序操作数据库时,需要重点关注以下两个方面:application.properties和Mapper接口(编写SQL语句)。

  1. 数据库连接四要素(驱动、链接、用户名、密码),都配置在springboot默认的配置文件application.properties

  2. 查询结果的解析及封装,由mybatis自动完成映射封装,我们无需关注

  3. mybatis中使用了数据库连接池技术,从而避免了频繁的创建连接、销毁连接而带来的资源浪费。

数据库连接池

没有数据库连接池的客户端执行SQL语句:要先创建一个新的连接对象,然后执行SQL语句,SQL语句执行后又需要关闭连接对象从而释放资源,每次执行SQL时都需要创建连接、销毁链接,这种频繁的重复创建销毁的过程是比较耗费计算机的性能。

  • 数据库连接池是个容器,负责分配、管理数据库连接(Connection): 程序在启动时,会在数据库连接池(容器)中,创建一定数量的Connection对象。

  • 允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:客户端在执行SQL时,先从连接池中获取一个Connection对象,然后在执行SQL语句,SQL语句执行完之后,释放Connection时就会把Connection对象归还给连接池(Connection对象可以复用)

  • 释放空闲时间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏:客户端获取到Connection对象了,但是Connection对象并没有去访问数据库(处于空闲),数据库连接池发现Connection对象的空闲时间 > 连接池中预设的最大空闲时间,此时数据库连接池就会自动释放掉这个连接对象

数据库连接池的好处:

  1. 资源重用
  2. 提升系统响应速度
  3. 避免数据库连接遗漏
相关推荐
技术拾光者10 分钟前
Redis 排行榜:实现、操作与性能优化
数据库·redis
Dymc16 分钟前
【安装JDK和Android SDK】
android·java·jdk·sdk
不是二师兄的八戒17 分钟前
解析文件(支持 TXT、PDF、JPG、PNG、DOCX),并提取体检数据中的数值
java·php
傻啦嘿哟20 分钟前
SQLAlchemy入门:详细介绍SQLAlchemy的安装、配置及基本使用方法
数据库·oracle
霍金的微笑26 分钟前
JAVA Web(学习笔记)
java·前端·学习
微服务技术分享28 分钟前
工程项目管理系统源码与Spring Cloud:实现高效系统管理与二次开发
数据库·spring cloud·工程项目管理系统源码
逗逼撞地球38 分钟前
DAY3 JAVA基本语法
java
职场人参1 小时前
视频声音怎么去除?高效的视频声音去除方法
java·服务器·数据库
任错错1 小时前
flink-jdbc-driver
java·大数据·mysql·flink
陆沙1 小时前
ASP.NET MVC-懒加载-逐步加载数据库信息
数据库·asp.net·mvc