当前位置: 首页 > news >正文

01-03手写持久层框架-JDBC问题与框架实现思路

学习视频来源:https://www.bilibili.com/video/BV1R14y1W7yS

文章目录

  • 1.jdbc问题分析
  • 2.解决思路
  • 3. 使用JDBC和使用持久层框架的区别
  • 4. 手写持久层框架思路分析
    • 4.1 框架使用端
    • 4.2持久层框架

1.jdbc问题分析

下边是一段使用JDBC方式执行SQL的一段代码
在这里插入图片描述

使用JDBC方式执行SQL有以下问题:

  1. 数据库配置信息硬编码
    如使用mysql数据库,加载驱动为com.mysq.jdbc.Driver,如果要换成其他数据库,比如oracle,那么就要换成oracle.jdbc.driver.OracleDriver。源码改了以后,需要重新打包、部署等,比较麻烦。
  2. 频繁创建释放数据库连接
    每次获取数据库连接,都需要和数据库建立TCP连接等等,但是SQL执行后,立刻就释放了。连接未得到复用,影响性能。
  3. sql语句、参数、返回结果集,均存在硬编码问题
  4. 需要手动封装返回结果集。属性过多时,较为繁琐

2.解决思路

  1. 数据库配置信息硬编码问题可以采用配置文件解决。
  2. 频繁创建释放数据库连接可以采用数据库连接池解决。常用的数据库连接池:HikariCP、C3P0、Druid等等。
  3. sql语句、参数、返回结果集,均存在硬编码问题,也可用通过配置文件解决。但是不建议与数据库配置使用同一份配置文件,因为数据库的配置信息基本不会变化,但是sql语句参数等等,会经常变化。所以sql配置文件和数据库配置文件分开。
  4. 手动封装返回结果集问题,使用反射、内省技术自动将返回结果进行封装。

3. 使用JDBC和使用持久层框架的区别

使用持久层框架只需要提供数据库配置信息和SQL配置信息就行了,其他的步骤不用管了,由框架帮我们完成。
在这里插入图片描述

4. 手写持久层框架思路分析

4.1 框架使用端

引用自定义框架的jar包,提供数据库配置文件SqlMapConfig.xml和sql配置文件mappper.xml。SqlMapConfig.xml存放的是数据库的配置信息和mapper.xml文件的路径。存放mapper.xml的路径,是为了解析时只需提供SqlMapConfig.xml的路径,就能解析出mapper.xml文件的路径,不用传2个路径了。 mapper.xml存放sql信息,参数类型、返回值类型。

4.2持久层框架

本质就是对JDBC进行封装,步骤如下:

  1. 加载配置文件
    创建Resources类,负责加载配置文件成输入流,存入内存中。方法:InputStream getResourceAsStream(String path);
  2. 创建2个JavaBean(容器对象)
    Configuration:全局配置类:存储sqlMapConfig.xml配置文件解析出的内容。
    MappedStatement:映射配置类:存储mapper.xml配置文件解析出的内容。
  3. 解析配置文件,填充容器对象
    创建SqlSessionFactoryBuilder类和public SqlSessionFactory build(InputStream inputStream) 方法 用于
    (1)解析配置文件,封装Configuration
    (2)创建SqlSessionFactory并返回。
  4. 创建SqlSessionFactory接口和DefaultSqlSessionFactory实现类。使用SqlSession openSession()方法工厂模式生成SqlSession对象,通过不同的参数,生成不同的SqlSession对象。比如是自动提交事务,还是手动提交事务,还是批量操作等等。
  5. 创建SqlSession接口和DefaultSqlSession实现类。
    方法:selectList()查询所有
    selectOne()查询单个
    update();更新
    delete()删除
  6. 创建Executor接口和是实现类SimpleExecutor
    方法: query(Configuration,MappedStatement, Object parameter);执行的就是底层JDBC代码(数据库配置信息、SQL配置信息)

相关文章:

  • NVIDIA工业设施数字孪生中的机器人模拟
  • 嵌入式仿真实验教学平台的核心优势再解析:对比Proteus的技术与教学价值突破
  • GCC RISCV 后端 -- 控制流(Control Flow)的一些理解
  • 【渗透测试】Vulnhub靶机-FSoft Challenges VM: 1-详细通关教程
  • IROS 2025将于杭州举办,开启中国机器人发展与国际交流新契机
  • 第2.6节 iOS生成全量和增量报告
  • 前沿技术有哪些改变生活
  • 最新企业ERP进销存管理系统源码 基于PHP+MySQL 含完整图文部署教程
  • java 启动jar将日志每天输入
  • HDMI接口设计
  • TCP-IP模型
  • 深度学习——深入解读各种卷积的应用场景优劣势与实现细节
  • 如何应对Google Play卡审的问题?
  • 丝杆,同步带,链条选型(我要自学网)
  • 【辩证地看问题,和讲逻辑之间有冲突吗? 关键字摘抄】
  • Linux 2021韩顺平网课笔记:shell编程
  • Windows Docker基于Python制作镜像并上传全过程梳理(含docker hub账号注册),纯小白适用
  • 前端优化之缓存策略
  • react 路由管理自定义路由组件(React动态生成路由)仿Vue-router写法
  • AcWing 1140. 最短网络(最小生成树问题)
  • 国内大模型人才大战打响!大厂各出奇招
  • 刘元春在《光明日报》撰文:以法治护航民营经济高质量发展
  • 瑞士联邦主席凯勒-祖特尔、联邦副主席帕姆兰会见何立峰
  • 这座古村,藏着多少赣韵风华
  • 湖南省职业病防治院通报3岁女童确诊“铊中毒”:去年病例,编辑误写为“近日”
  • 深圳两家会所涉卖淫嫖娼各被罚7万元逾期未缴,警方发催告书