avatar

自定义持久层框架

JDBC问题分析

JDBC是java实现与数据库交互的一种技术,但是其中存在的非常多的问题,下面我们来分析一下。

//这是一段JDBC获取数据库信息的代码
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);
//设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
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 {
//释放资源
}

问题分析

//加载数据库驱动
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);
    //设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
    preparedStatement.setString(1,"tom");
    //向数据库发出SQL执行查询,查询出结果集
    resultSet = preparedStatement.executeQuery();
  • sql语句、设置参数、获取结果集参数均存在硬编码问题,解决思路还是配置文件,不过这个配置文件不适合与上面的配置文件糅杂在一起,最好分开
     //遍历查询结果集
    while (resultSet.next()){
    int id = resultSet.getInt("id");
    String username = resultSet.getString("username");
    //封装User
    user.setId(id);
    user.setUsername(username);
    }
  • 手动封装返回结果集,较为繁琐,解决思路就是利用反射,将结果集自动填充。

自定义持久层框架思路分析

持久层框架可以分为

文章作者: zenshin
文章链接: https://zlh.giserhub.com/2021/08/27/cl35o0mqm002qp4tg255w5gl9/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 zenshin's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论