MyORMFramework(一):如何通过JDBC优化自定义持久层框架?

2026-06-11 15:1815阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计779个文字,预计阅读时间需要4分钟。

MyORMFramework(一):如何通过JDBC优化自定义持久层框架?

使用JDBC连接数据库,实现数据查询功能。javapackage 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 conn=null; Statement stmt=null; ResultSet rs=null; try { // 加载数据库驱动 Class.forName(com.mysql.cj.jdbc.Driver); // 连接数据库 conn=DriverManager.getConnection(jdbc:mysql://localhost:3306/database_name, username, password); // 创建Statement对象 stmt=conn.createStatement(); // 执行查询 String sql=SELECT * FROM users; rs=stmt.executeQuery(sql); // 处理结果集 List users=new ArrayList(); while (rs.next()) { int id=rs.getInt(id); String name=rs.getString(name); User user=new User(id, name); users.add(user); } // 输出结果 for (User user : users) { System.out.println(ID: + user.getId() + , Name: + user.getName()); } } catch (Exception e) { e.printStackTrace(); } finally { // 关闭资源 try { if (rs !=null) rs.close(); if (stmt !=null) stmt.close(); if (conn !=null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } }}

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<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>

执行后控制台输出如下:

JDBC问题总结

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

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

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

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

    问题解决思路

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

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

  • 本文共计779个文字,预计阅读时间需要4分钟。

    MyORMFramework(一):如何通过JDBC优化自定义持久层框架?

    使用JDBC连接数据库,实现数据查询功能。javapackage 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 conn=null; Statement stmt=null; ResultSet rs=null; try { // 加载数据库驱动 Class.forName(com.mysql.cj.jdbc.Driver); // 连接数据库 conn=DriverManager.getConnection(jdbc:mysql://localhost:3306/database_name, username, password); // 创建Statement对象 stmt=conn.createStatement(); // 执行查询 String sql=SELECT * FROM users; rs=stmt.executeQuery(sql); // 处理结果集 List users=new ArrayList(); while (rs.next()) { int id=rs.getInt(id); String name=rs.getString(name); User user=new User(id, name); users.add(user); } // 输出结果 for (User user : users) { System.out.println(ID: + user.getId() + , Name: + user.getName()); } } catch (Exception e) { e.printStackTrace(); } finally { // 关闭资源 try { if (rs !=null) rs.close(); if (stmt !=null) stmt.close(); if (conn !=null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } }}

    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<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>

    执行后控制台输出如下:

    JDBC问题总结

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

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

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

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

    问题解决思路

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

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