😀前言
本文将继续深入研究自己实现 MyBatis 底层机制的过程,特别关注任务阶段2 - 编写执行器与数据库操作。这个任务阶段是自定义 MyBatis 底层机制的关键一步,它涵盖了执行器的创建和 SQL 查询操作的实现,为我们的自定义框架提供了重要的数据库操作功能。
.
在本文中,我们将详细探讨如何编写执行器,如何输入 SQL 语句,并完成数据库操作。我们将使用一个名为 WyxExecutor 的执行器实现类,它将执行 SQL 查询并将结果封装为对象。这一步骤对于理解 MyBatis 内部工作原理以及构建自定义 MyBatis 底层框架非常重要。
🏠个人主页:尘觉主页
🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉😉
在csdn获奖荣誉: 🏆csdn城市之星2名
💓Java全栈群星计划top前5
🤗 端午大礼包获得者
🥰阿里云专家博主
😉亚马逊DyamoDB结营
💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰
如果文章有什么需要改进的地方还请大佬不吝赐教 先在次感谢啦😊
文章目录
深入实现 MyBatis 底层机制的任务阶段2 - 编写执行器与数据库操作
实现任务阶段 2- 编写执行器,输入 SQL 语句,完成操作
分析示意图
创建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 <T>
* @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);
}
😄总结
在本文中,我们成功完成了任务阶段2 - 编写执行器与数据库操作。我们创建了一个名为 WyxExecutor 的执行器实现类,该类负责接收 SQL 语句和参数,并执行数据库查询操作。通过详细的步骤和代码示例,我们展示了如何获取数据库连接、执行 SQL 查询,并将结果封装为对象。
这一关键步骤为我们的自定义 MyBatis 底层机制提供了核心功能,使我们能够与数据库进行交互。下一步,我们将继续深入研究 MyBatis 的内部工作原理,逐步构建更多关键组件,以实现一个完整的自定义 MyBatis 底层框架。希望本文对您的学习和项目开发有所帮助。
😍深入解析:自己实现 MyBatis 底层机制系列
第一篇–>深入剖析:自己实现 MyBatis 底层机制的步骤与原理解析
第二篇–>深入解析:自己实现 MyBatis 底层机制的任务阶段1 - 读取配置文件与建立数据库连接
第三篇–>深入实现 MyBatis 底层机制的任务阶段2 - 编写执行器与数据库操作
第四篇-> 深入实现 MyBatis 底层机制的任务阶段3 - 封装 SqlSession 到执行器
第五篇–>深入实现 MyBatis 底层机制的任务阶段4 - 开发 Mapper 接口和 Mapper.xml
第六篇–>深入实现 MyBatis 底层机制的任务阶段 5- 开发和 Mapper 接口相映射的 MapperBean
第七篇–>深入实现 MyBatis 底层机制的任务阶段 6-实现任务阶段 6- 在 WyxConfiguration, 读取 XxxMapper.xml,能够创建 MappperBean 对象
第八篇->深入实现 MyBatis 底层机制的实现任务阶段 7- 实现动态代理 Mapper 的方法
😁热门专栏推荐
想学习vue的可以看看这个
等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持
🤔欢迎大家加入我的社区 尘觉社区
文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞