【Mybatis】我抄袭了Mybatis,手写一套MyMybatis框架:使用JDBC连接数据库

在Java开发中,Mybatis是一个非常流行的持久层框架,它消除了几乎所有的JDBC代码和参数的手动设置以及结果集的检索。Mybatis可以使用简单的XML或注解进行配置,并将接口和Java的POJOs(Plain Old Java Objects)映射成数据库中的记录。

然而,你有没有想过,如果没有Mybatis,我们应该如何手动实现这些功能呢?在这篇专栏中,我将尝试”抄袭” Mybatis,手写一套名为MyMybatis的框架,让我们一起深入理解Mybatis背后的原理和实现。

首先,我们需要理解的是,所有的数据库操作都需要通过JDBC来进行。JDBC(Java Database Connectivity)是Java对数据库进行操作的一套标准API。然而,直接使用JDBC进行数据库操作会有很多繁琐的代码,这也是Mybatis等ORM框架出现的原因。在我们的MyMybatis框架中,我们也将使用JDBC作为底层的数据库操作工具。

万里之行始于足下,我们先来看一下怎么使用JDBC来连接Mysql。

首先我们要准备好的环境有:一个搭建好的mysql:Linux安装Mysql(图文解说详细版,安装包tar包版)[1] 一套java环境:Windows安装Java环境(OracleJDK)[2]

第一步,新建一个maven项目

【Mybatis】我抄袭了Mybatis,手写一套MyMybatis框架:使用JDBC连接数据库

第二步,导入mysql的驱动

打开刚刚创建好的maven项目的pom文件导入mysql驱动

【Mybatis】我抄袭了Mybatis,手写一套MyMybatis框架:使用JDBC连接数据库

驱动如下:

    <dependencies>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version>
        </dependency>
    </dependencies>

第三步,创建数据库和数据表

数据库

CREATE DATABASE test_ob

数据表

CREATE TABLE `user` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(120) DEFAULT NULL,
  `age` int(11) DEFAULT NULL
)

添加数据

insert into `user`(`id`,`name`,`age`) values(1,'王富贵',18)

第三步,编写jdbc程序

package com.masiyi;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class MyJdbc {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;

        try {
            // 加载驱动
            Class.forName("com.mysql.jdbc.Driver");

            // 连接数据库
            conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test_ob""rootmsy""123");

            // 创建Statement对象
            stmt = conn.createStatement();

            // 执行查询
            rs = stmt.executeQuery("SELECT * FROM user");

            // 处理结果集
            while (rs.next()) {
                System.out.println("ID: " + rs.getInt("id"));
                System.out.println("Username: " + rs.getString("name"));
                System.out.println("Phone: " + rs.getInt("age"));
                // 其他字段...
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            try {
                if (rs != null) {
                    rs.close();
                }
                if (stmt != null) {
                    stmt.close();
                }
                if (conn != null) {
                    conn.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

加载驱动

Class.forName("com.mysql.jdbc.Driver");

目的是加载并注册JDBC驱动程序,它是为了将特定数据库的JDBC驱动程序加载到内存中,并向后面的DriverManager注册该驱动,以便能够与特定数据库建立连接。

加载驱动类后,驱动程序会执行静态代码块,其中通常会调用DriverManager的registerDriver方法来注册自己,使得后续的JDBC连接可以使用这个驱动来连接MySQL数据库。其实这里可以不用显式地去写这行代码,为什么可以这样,如果大家感兴趣,我们后面可以深挖一下jdbc的DriverManager源码。这里不做介绍。

【Mybatis】我抄袭了Mybatis,手写一套MyMybatis框架:使用JDBC连接数据库

连接数据库

 conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test_ob""rootmsy""123");

里面填三个参数:url,user,password就是我们mysql的地址,用户名和密码,这里面的所有引用的类都是java.sql包下面的。通过这个方法我们就获得了一个mysql的连接。后面的操作都是基于该连接上去操作。

【Mybatis】我抄袭了Mybatis,手写一套MyMybatis框架:使用JDBC连接数据库

创建Statement对象

   stmt = conn.createStatement();

Statement是JDBC中的一个非常重要接口,用于执行SQL语句并返回结果。

执行查询

     rs = stmt.executeQuery("SELECT * FROM user");

之后我们就可以通过直接执行sql了,这个时候会返回一个ResultSet类,我们使用ResultSet类来接收这个sql返回回来的数据

处理结果集

 while (rs.next()) {
                System.out.println("ID: " + rs.getInt("id"));
                System.out.println("Username: " + rs.getString("name"));
                System.out.println("Phone: " + rs.getInt("age"));
                // 其他字段...
            }

使用 while (rs.next())循环取,如果没有数据循环就会退出,ResultSet里面有很多的get方法,根据需要去取其中的某个字段就行了。

【Mybatis】我抄袭了Mybatis,手写一套MyMybatis框架:使用JDBC连接数据库

最后根据谁后创建先关闭谁的规律关闭连接即可:

【Mybatis】我抄袭了Mybatis,手写一套MyMybatis框架:使用JDBC连接数据库

最后执行就可以拿到sql执行的结果了

【Mybatis】我抄袭了Mybatis,手写一套MyMybatis框架:使用JDBC连接数据库

这篇文章我们展示了利用最为基础的JDBC技术连接MySQL数据库的方式,然而在实际的项目开发过程中,这种做法几乎无人采用,取而代之的是框架对这些繁复操作的高度封装。

然而,此举恰恰为我们撰写自定义MyBatis框架奠定了坚实的基石。针对接下来的改造任务,我们将主要从以下几个方面着手:

  1. 1. 摒弃冗余的数据库连接创建环节:在接下来的自主研发框架开发过程中,我们可尝试将连接保存至内存之中,以达到节省系统资源的目的。

  2. 2. 启用Java类以接收SQL语句:如先前所述,我们在示例中通过一个个独立的Get方法获取字段值,若想要实现数据的打包处理,便需逐一对其赋值。显然,这样的操作过于繁琐,因此在后续的框架编写阶段,我们务必对此加以重视。

  3. 3. 将连接信息写入配置文件当中:对比于之前的做法——直接在代码内进行编写,未来的框架应当能够以外部配置文件的形式进行属性读取。

  4. 4. SQL语句的封装传参化:当前的SQL语句基本上属于硬编码形式,难以进行维护且无法灵活调整。因此,在日后的框架设计中,我们定然会尽力避免此类情况的发生。

敬请各位读者期待后续相关文章。若大家对此专栏有浓厚的兴趣,还望不吝点赞和关注,感谢支持!

另外如果对Elastic Search感兴趣的话,推荐一下我的专栏,这篇专栏介绍了Elasticsearch的Restful API的入门指南。学习如何使用API进行索引、搜索和分析,包括创建索引、定义映射、添加文档、执行查询等。通过实例和代码片段,快速上手Elasticsearch的Restful API,构建强大的搜索功能。感谢大家支持:

Elastic Search的RestFul API入门 [3]

【Mybatis】我抄袭了Mybatis,手写一套MyMybatis框架:使用JDBC连接数据库

引用链接

[1] Linux安装Mysql(图文解说详细版,安装包tar包版): https://blog.csdn.net/csdnerM/article/details/128202916
[2] Windows安装Java环境(OracleJDK): https://masiyi.blog.csdn.net/article/details/134278447
[3] Elastic Search的RestFul API入门 : https://blog.csdn.net/csdnerm/category_12497418.html


原文始发于微信公众号(掉头发的王富贵):【Mybatis】我抄袭了Mybatis,手写一套MyMybatis框架:使用JDBC连接数据库

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/297594.html

(0)
Java光头强的头像Java光头强

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!