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