JavaWeb——Mybatis-入门(4/6)-JDBC(概述、JDBC 操作数据库步骤、JDBC 存在的问题、MyBatis 对 JDBC 问题的解决)

目录

JDBC 概述

JDBC 操作数据库步骤

注册驱动 

获取连接对象(Connection)

创建 Statement 对象并执行 SQL 语句

解析结果集(ResultSet)

释放资源

完整代码 

JDBC 存在的问题

硬编码问题

结果集解析繁琐

资源浪费问题

MyBatis 对 JDBC 问题的解决

配置文件管理数据库连接信息

自动结果封装

数据库连接池技术

MyBatis 与 JDBC 对比总结


JDBC 概述

JDBC 定义与作用

        JDBC(Java Database Connectivity)是 Sun 公司提供的一套使用 Java 语言操作关系型数据库的 API,它定义了操作数据库的规范和接口,使得 Java 程序能够统一地与不同的关系型数据库(如 MySQL、Oracle、SQL Server 等)进行交互,但它本身并不提供具体实现,而是由各个数据库厂商针对自身数据库产品提供相应的 JDBC 驱动实现,开发者在 Java 程序中通过面向接口编程的方式使用 JDBC 接口来操作数据库。

JDBC 操作数据库步骤

注册驱动 

        通过指定数据库厂商提供的驱动类名(如 MySQL 的 com.mysql.cj.jdbc.Driver)告知 JDBC 使用的驱动,这一步是建立 Java 程序与数据库连接的基础,确保程序能找到并使用正确的数据库驱动。

获取连接对象(Connection)

        使用 DriverManager.getConnection() 方法获取连接对象,此过程需要提供数据库连接的 URL(如 jdbc:mysql://localhost:3306/testdb,包含数据库协议、主机地址、端口号和数据库名等信息)、用户名和密码,连接对象是后续执行数据库操作的关键,代表了 Java 程序与数据库的连接通道。

创建 Statement 对象并执行 SQL 语句

        通过连接对象的 createStatement() 方法创建 Statement 对象,用于执行 SQL 语句(如 SELECT * FROM user;)。对于查询操作,执行后会返回结果集对象(ResultSet),该对象封装了查询结果,其他操作(如插入、更新、删除)则会返回执行结果的相关信息,如受影响的行数等。

解析结果集(ResultSet)

        对于查询返回的结果集,需要逐个解析其中的字段,根据字段类型调用相应的 get 方法(如 getInt()getString() 等)获取字段值,并手动将这些值封装到自定义的 Java 对象(如 User 对象)中,再添加到集合中。若表中字段较多,此过程代码会非常繁琐,因为需要对每个字段进行处理,且要准确判断字段类型以调用正确的 get 方法。

释放资源

        操作完成后,需关闭获取到的数据库连接对象(Connection)和 Statement 对象,以释放占用的系统资源,避免资源泄漏。若在项目中频繁地获取和关闭连接,会造成资源浪费,影响系统性能,因为建立数据库连接是一个相对耗时的操作。

完整代码 

try {
            //1.注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");

            //2.获取连接
            String url = "jdbc:mysql://localhost:3306/testdb";
            String username = "root";
            String password = "123456";
            Connection conn = DriverManager.getConnection(url,username,password);

            //3.获取执行SQL的对象Statement,执行SQL
            String sql = "select * from user";
            Statement statement = conn.createStatement();
            ResultSet resultSet = statement.executeQuery(sql);
            List<User> userList = new ArrayList<>();
            while (resultSet.next()){
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                short age = resultSet.getShort("age");
                short gender = resultSet.getShort("gender");
                String phone = resultSet.getString("phone");
                User user = new User(id,name,age,gender,phone);
                userList.add((user));
            }
            //4.释放资源
            statement.close();
            conn.close();

        } catch (Exception e) {
            e.printStackTrace();
        }

JDBC 存在的问题

硬编码问题

        在 JDBC 程序中,数据库连接的相关信息(如 URL、用户名、密码)通常硬编码在 Java 代码中,在项目开发过程中,这些信息可能因开发环境(开发数据库、测试数据库、生产数据库)的不同而需要频繁变更。每次变更都需要修改 Java 代码并重新编译、打包操作繁琐,不利于项目的维护和部署,降低了开发效率。

结果集解析繁琐

        解析结果集时,需要针对每个字段编写代码进行处理,考虑字段类型并调用相应方法获取值,再封装到对象中。当表中字段数量较多时,代码量会大幅增加变得臃肿且容易出错,增加了开发的复杂性和工作量。

资源浪费问题

        每次执行数据库操作都需要获取连接、执行后立即关闭连接,在频繁操作数据库的场景下,这种方式会频繁地创建和销毁连接对象,导致资源浪费,降低系统性能,因为创建连接的开销较大,过多的创建和销毁操作会消耗大量系统资源。

MyBatis 对 JDBC 问题的解决

配置文件管理数据库连接信息

        MyBatis 将数据库连接的四要素(驱动类名、连接 URL、用户名、密码)配置在 application.properties 或 application.yml 等配置文件中,当需要修改这些信息时,只需在配置文件中进行调整,无需修改 Java 代码,避免了硬编码问题,提高了项目的可维护性和灵活性,方便在不同环境下切换数据库配置。

自动结果封装

        MyBatis 能够自动将查询结果封装到对应的 Java 对象中,并将多个对象封装到集合中,无需开发者手动解析结果集和封装对象,大大简化了代码,减少了开发工作量,提高了开发效率,避免了因手动解析结果集可能出现的错误。

数据库连接池技术

        在 Spring Boot 整合 MyBatis 时,按照特定前缀(spring.datasource)在配置文件中配置数据库连接信息后,Spring Boot 底层会自动采用数据库连接池技术(如 HikariCP、Druid 等)来统一管理和分配数据库连接(Connection 对象)。

        在执行 SQL 语句时,从连接池中获取连接,执行完毕后将连接归还给连接池,实现连接的复用,避免了频繁创建和销毁连接带来的资源浪费,有效提升了系统性能,与线程池技术类似,通过资源的复用和合理管理提高了程序的运行效率。

MyBatis 与 JDBC 对比总结

        通过对比可知,MyBatis 在简化开发、提高性能和增强可维护性等方面具有显著优势,完胜原始的 JDBC 编程方式。在使用 Spring Boot 整合 MyBatis 进行数据库操作时,开发者主要关注两个方面:

        一是 application.properties 等配置文件中 MyBatis 的相关配置,确保数据库连接信息正确以及其他相关配置符合项目需求;

        二是 Mapper 接口和定义的 SQL 语句,在 Mapper 接口中合理定义数据库操作方法,并通过注解或 XML 配置准确编写 SQL 语句,以实现业务逻辑所需的数据库功能。在实际企业开发中,由于 MyBatis 对 JDBC 的有效封装和优化,已成为主流的数据库持久层框架,大大提高了开发效率和项目质量,减少了开发者在数据库操作方面的工作量和出错概率,使得开发者能够更专注于业务逻辑的实现。


END


学习自:黑马程序员——JavaWeb课程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值