[由零开始] 一、手写Mybatis-从JDBC角度分析操作问题
从JDBC角度分析问题
想要自定义持久层框架或者手写Mybatis 我们首先要做的就是分析jdbc 以及 分析jdbc存在的问题 怎么用更好的办法解决这些问题 这也是持久层框架存在的初衷 我们从源头出发去, 一步一步就很容易的理解其中的思想了
JDBC回顾
这段jdbc的代码很清楚 注释也已经写好了
我们先来看一下这段代码
这就是纯JDBC在代码中的硬编码查询
public static void main(String[] args) { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null;
try {
//加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//通过驱动管理类获取数据库连接
connection =
DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis? characterEncoding=utf-8", "root", "root");
// 定义sql语句 ?表示占位符
String sql = "select * from user where username = ?";
// 获取预处理statement
preparedStatement = connection.prepareStatement(sql);
// 设置参数
preparedStatement.setString(1, "tom");
// 向数据库发出sql查询,返回结果集
resultSet = preparedStatement.executeQuery();
// 遍历结果集
while (resultSet.next()) {
int id = resultSet.getInt("id");
String username = resultSet.getString("username");
// 手动封装结果集User
user.setId(id);
user.setUsername(username); }
System.out.println(user);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 释放资源
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (preparedStatement != null) {
try {
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace(); }
}
}
JDBC问题及分析
提出问题解决方案
问题一 数据库配置信息 可以写在配置文件中
问题二 利用连接池解决问题
问题三 同样可以写入配置文件中(尽量不要写在数据库配置信息同文件中)
问题四 利用反射、内省等方式去解决
解决完这些问题 一个大致的持久层框架的雏形就出来了
下一章 我们将解决这些问题 然后进行封装