当前位置 : 主页 > 编程语言 > java >

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

来源:互联网 收集:自由互联 发布时间:2022-07-20
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

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<User> 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如下:

<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.17</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.10</version> </dependency>

执行后控制台输出如下:image.png

JDBC问题总结

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

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

  • 使⽤PreparedStatement向占有位符号传参数存在硬编码,因为SQL语句的where条件不⼀定,可能
  • 多也可能少,修改SQL还要修改代码,系统不易维护。

  • 对结果集解析存在硬编码(查询列名),SQL变化导致解析代码变化,系统不易维护,如果能将数据库
  • 记录封装成POJO对象解析⽐较⽅便。

    问题解决思路

  • 使⽤数据库连接池初始化连接资源。
  • 将sql语句抽取到xml配置⽂件中。
  • 使⽤反射、内省等底层技术,⾃动将实体与表进⾏属性与字段的⾃动映射。

    本文内容到此结束了, 如有收获欢迎点赞

  • 上一篇:poj 1961 Period(kmp最短循环节)
    下一篇:没有了
    网友评论