自定义持久层框架—MyORMFramework(一)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 自定义持久层框架—MyORMFramework(一)

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开发存在的问题如下:

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

Java代码。

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

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

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

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

问题解决思路

  1. 使⽤数据库连接池初始化连接资源。
  2. 将sql语句抽取到xml配置⽂件中。
  3. 使⽤反射、内省等底层技术,⾃动将实体与表进⾏属性与字段的⾃动映射。
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
Java 数据库连接 mybatis
mybatis框架图
文章介绍了MyBatis框架的起源、发展和其作为持久层框架的功能,提供了MyBatis的框架图以帮助理解其结构和组件。
mybatis框架图
|
SQL Java 数据库连接
简化数据库操作:深入了解 MyBatis 数据持久层框架
在现代的软件开发中,与数据库交互是必不可少的一环,因此使用高效、灵活的数据持久层框架是至关重要的。MyBatis,作为一款受欢迎的数据持久层框架,提供了一种将数据库操作与 Java 代码解耦的方式,极大地简化了数据库访问过程。在本文中,我们将为您详细介绍 MyBatis 的核心概念、特性以及在实际应用中的优势。
148 0
|
Java 关系型数据库 MySQL
MyBatis(简化数据库操作的持久层框架)--快速入门[上]
MyBatis(简化数据库操作的持久层框架)--快速入门[上]
95 0
|
6月前
|
SQL Java 数据库连接
JDBC如何封装成Mybaits持久层框架只需4
本文主要讲解JDBC怎么演变到Mybatis的渐变过程,重点讲解了为什么要将JDBC封装成Mybaits这样一个持久层框架。再而论述Mybatis作为一个数据持久层框架本身有待改进之处。
33 0
|
SQL XML Java
Mybatis框架使用的学习
在沃尔玛项目中的Mybatis框架使用了两种实现CRUD的模式,为Dao文件编写相应的xml实现功能与直接在Dao的方法中直接使用注解开发
53 1
|
SQL Java 数据库连接
简化持久层开发:深入了解 MyBatis-Plus 数据持久层框架
在现代的应用程序开发中,数据库操作是不可或缺的一部分,因此选择一个高效、便捷的数据持久层框架对于提高开发效率和降低代码复杂度非常重要。MyBatis-Plus,作为一款优秀的增强版 MyBatis 框架,提供了更多便捷的功能和特性,进一步简化了持久层开发。在本文中,我们将详细介绍 MyBatis-Plus 的核心特点、用法以及在实际应用中的优势。
639 0
|
SQL Oracle Java
MyBatis框架:第六章:mybatis的核心配置
MyBatis框架:第六章:mybatis的核心配置
177 0
MyBatis框架:第六章:mybatis的核心配置
|
SQL XML 算法
Mybatis框架详解+示例
Mybatis框架详解+示例
Mybatis框架详解+示例
|
XML SQL Java
mybaits-plus常见配置
mybaits-plus常见配置
547 0
mybaits-plus常见配置
|
算法 关系型数据库 MySQL
mybaits-plus学习笔记整合(中)
mybaits-plus学习笔记整合
208 0
mybaits-plus学习笔记整合(中)