深入实现 MyBatis 底层机制的任务阶段2 - 编写执行器与数据库操作

前言
本文将继续深入研究自己实现 MyBatis 底层机制的过程,特别关注任务阶段2 - 编写执行器与数据库操作。这个任务阶段是自定义 MyBatis 底层机制的关键一步,它涵盖了执行器的创建和 SQL 查询操作的实现,为我们的自定义框架提供了重要的数据库操作功能。
.
在本文中,我们将详细探讨如何编写执行器,如何输入 SQL 语句,并完成数据库操作。我们将使用一个名为 WyxExecutor 的执行器实现类,它将执行 SQL 查询并将结果封装为对象。这一步骤对于理解 MyBatis 内部工作原理以及构建自定义 MyBatis 底层框架非常重要。

个人主页:尘觉主页

个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力

在csdn获奖荣誉: csdn城市之星2名
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ Java全栈群星计划top前5
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣  端午大礼包获得者
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 阿里云专家博主
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 亚马逊DyamoDB结营

欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看
如果文章有什么需要改进的地方还请大佬不吝赐教 先在次感谢啦

文章目录

  • 深入实现 MyBatis 底层机制的任务阶段2 - 编写执行器与数据库操作
    • 实现任务阶段 2- 编写执行器,输入 SQL 语句,完成操作
      • 分析示意图
      • 创建Monster类
      • 创建Executor.java类
      • 创建WyxExecutor实现类
      • 测试效果
    • 总结
      • **深入解析:自己实现 MyBatis 底层机制系列**

深入实现 MyBatis 底层机制的任务阶段2 - 编写执行器与数据库操作

实现任务阶段 2- 编写执行器,输入 SQL 语句,完成操作

分析示意图

深入实现 MyBatis 底层机制的任务阶段2 - 编写执行器与数据库操作_第1张图片

深入实现 MyBatis 底层机制的任务阶段2 - 编写执行器与数据库操作_第2张图片

创建Monster类

解读

@Getter 就会给所有属性 生成对应的getter

@Setter 就会给所有属性 生成对应的setter

@ToString 生成 toString…

@NoArgsConstructor 生成无参构造器

@AllArgsConstructor 生成要给全参构造器

@Data 注解相当于

Getter, Setter, RequiredArgsConstructor, ToString, EqualsAndHashCode, Value注解

package com.wyxdu.entity;

import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Data;

import java.util.Date;

/**
 * Monster 和 monster表有映射关系
 *
 * 解读
 * @Getter 就会给所有属性 生成对应的getter
 * @Setter 就会给所有属性 生成对应的setter
 * @ToString 生成 toString...
 * @NoArgsConstructor 生成无参构造器
 * @AllArgsConstructor 生成要给全参构造器
 * @Data 注解相当于Getter, Setter, RequiredArgsConstructor, ToString, EqualsAndHashCode, Value注解
 * 如何选择主要还是看自己需要
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Monster {

    private Integer id;
    private Integer age;
    private String name;
    private String email;
    private Date birthday;
    private double salary;
    private Integer gender;

}

创建Executor.java类

public interface Executor {
    //泛型方法
    public <T> T query(String statement, Object parameter);
}

创建WyxExecutor实现类

package com.wyxdu.wyxmybatis.sqlsession;

import com.wyxdu.entity.Monster;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class WyxExecutor implements Executor {

    //属性
    private WyxConfiguration wyxConfiguration =
            new WyxConfiguration();


    /**
     * 根据 sql 查找结果
     *
     * @param sql
     * @param parameter
     * @param 
     * @return
     */
    @Override
    public <T> T query(String sql, Object parameter) {
        //得到连接Connection
        Connection connection = getConnection();
        //查询返回的结果集
        ResultSet set = null;
        PreparedStatement pre = null;

        try {
            pre = connection.prepareStatement(sql);
            //设置参数, 如果参数多, 可以使用数组处理.
            pre.setString(1, parameter.toString());
            set = pre.executeQuery();
            //把set数据封装到对象-monster
            //说明: 这里做了简化处理
            //认为返回的结果就是一个monster记录
            //完善的写法是一套反射机制.
            Monster monster = new Monster();

            //遍历结果集, 把数据封装到monster对象
            while (set.next()) {
                monster.setId(set.getInt("id"));
                monster.setName(set.getString("name"));
                monster.setEmail(set.getString("email"));
                monster.setAge(set.getInt("age"));
                monster.setGender(set.getInt("gender"));
                monster.setBirthday(set.getDate("birthday"));
                monster.setSalary(set.getDouble("salary"));
            }
            return (T) monster;

        } catch (Exception throwables) {
            throwables.printStackTrace();
        } finally {
            try {
                if (set != null) {
                    set.close();
                }
                if (pre != null) {
                    pre.close();
                }
                if (connection != null) {
                    connection.close();
                }
            } catch (Exception throwables) {
                throwables.printStackTrace();
            }
        }

        return null;
    }

    //编写方法,通过WyxConfiguration对象,返回连接
    private Connection getConnection() {
        Connection connection =
                wyxConfiguration.build("wyx_mybatis.xml");
        return connection;
    }
}

测试效果

修改 WyxMyBatisTest测试类 增加方法

    @Test
    public void query() {
        Executor executor = new WyxExecutor();
        Monster monster =
                executor.query("select * from monster where id=?", 1);
        System.out.println("monster-- " + monster);
    }

img

总结

在本文中,我们成功完成了任务阶段2 - 编写执行器与数据库操作。我们创建了一个名为 WyxExecutor 的执行器实现类,该类负责接收 SQL 语句和参数,并执行数据库查询操作。通过详细的步骤和代码示例,我们展示了如何获取数据库连接、执行 SQL 查询,并将结果封装为对象。

这一关键步骤为我们的自定义 MyBatis 底层机制提供了核心功能,使我们能够与数据库进行交互。下一步,我们将继续深入研究 MyBatis 的内部工作原理,逐步构建更多关键组件,以实现一个完整的自定义 MyBatis 底层框架。希望本文对您的学习和项目开发有所帮助。

深入解析:自己实现 MyBatis 底层机制系列

第一篇–>深入剖析:自己实现 MyBatis 底层机制的步骤与原理解析

第二篇–>深入解析:自己实现 MyBatis 底层机制的任务阶段1 - 读取配置文件与建立数据库连接
           
                      
                      
热门专栏推荐
           
想学习vue的可以看看这个

java基础合集

数据库合集

redis合集

nginx合集

linux合集

手写机制

微服务组件

spring_尘觉

springMVC

mybits

等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

欢迎大家加入我的社区 尘觉社区

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力

你可能感兴趣的:(手写机制和源码分析,数据库,mybatis,oracle,java,spring,maven,底层)