前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自定义持久层框架MyORMFramework(一)—JDBC分析和解决思路

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

作者头像
共饮一杯无
发布2022-11-24 20:58:44
2230
发布2022-11-24 20:58:44
举报

JDBC连接查询数据库

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
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如下:

代码语言:javascript
复制
<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开发存在的问题如下:

  1. 数据库连接创建、释放频繁造成系统资源浪费,从?影响系统性能。
  2. SQL语句在代码中硬编码,造成代码不易维护,实际应?中SQL变化的可能较?,SQL变动需要改变 Java代码。
  3. 使?PreparedStatement向占有位符号传参数存在硬编码,因为SQL语句的where条件不?定,可能多也可能少,修改SQL还要修改代码,系统不易维护。
  4. 对结果集解析存在硬编码(查询列名),SQL变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成POJO对象解析?较?便。

问题解决思路

  1. 使?数据库连接池初始化连接资源。
  2. 将sql语句抽取到xml配置?件中。
  3. 使?反射、内省等底层技术,?动将实体与表进?属性与字段的?动映射。
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-04-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • JDBC连接查询数据库
  • JDBC问题总结
  • 问题解决思路
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com