自定义持久层框架MyORMFramework(一)—JDBC分析和解决思路

网友投稿 578 2022-10-29

自定义持久层框架MyORMFramework(一)—JDBC分析和解决思路

自定义持久层框架MyORMFramework(一)—JDBC分析和解决思路

JDBC连接查询数据

package com.zjq.jdbc; import com.zjq.entity.User; import java.sql.*; import java.util.ArrayList; import java.util.List; /** * 通过JDBC连接数据库 * @author zjq * @date 2022/3/14 */ public class JDBCConnect { 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/my-orm-framework?characterEncoding=utf-8", "root", "root"); // 定义sql语句?表示占位符 String sql = "select * from user where username = ?"; // 获取预处理statement preparedStatement = connection.prepareStatement(sql); // 设置参数,第⼀个参数为sql语句中参数的序号(从1开始),第⼆个参数为设置的参数值 preparedStatement.setString(1, "zjq666888"); // 向数据库发出sql执⾏查询,查询出结果集 resultSet = preparedStatement.executeQuery(); List userList = new ArrayList<>(16); // 遍历查询结果集 while (resultSet.next()) { User user = new User(); Long id = resultSet.getLong("id"); String username = resultSet.getString("username"); String password = resultSet.getString("password"); String phone = resultSet.getString("phone"); // 封装User user.setId(id); user.setUsername(username); user.setPassword(password); user.setPhone(phone); userList.add(user); } System.out.println(userList); } 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(); } } } } }

上述所需引入的jar如下:

mysql mysql-connector-java 5.1.17 org.projectlombok lombok 1.18.10

JDBC问题总结

原始jdbc开发存在的问题如下:

数据库连接创建、释放频繁造成系统资源浪费,从⽽影响系统性能。 SQL语句在代码中硬编码,造成代码不易维护,实际应⽤中SQL变化的可能较⼤,SQL变动需要改变

Java代码。

使⽤PreparedStatement向占有位符号传参数存在硬编码,因为SQL语句的where条件不⼀定,可能

多也可能少,修改SQL还要修改代码,系统不易维护。

对结果集解析存在硬编码(查询列名),SQL变化导致解析代码变化,系统不易维护,如果能将数据库

记录封装成POJO对象解析⽐较⽅便。

问题解决思路

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Async++ 是一个用于C++11的轻量级并发框架
下一篇:商品竞猜活动
相关文章

 发表评论

暂时没有评论,来抢沙发吧~