远方的灯塔 - 专注于服务端技术分享 远方的灯塔 - 专注于服务端技术分享
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 《C程序设计语言》
心情随笔
  • 文章分类
  • 文章标签
  • 文章归档
友情链接
关于我
GitHub (opens new window)

Terwer Green

一个后端老菜鸟
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 《C程序设计语言》
心情随笔
  • 文章分类
  • 文章标签
  • 文章归档
友情链接
关于我
GitHub (opens new window)
  • MyBatis

    • 解析原生JDBC开发问题与优化方案
    • 自定义持久层框架的设计思路
      • 为什么要自定义框架
      • 核心要点
      • 实现思路
        • 使用端(项目)
        • 自定义持久层框架本身(工程)
    • 自定义持久层框架的代码实现一
    • 自定义持久层框架的代码实现二
    • 使用getMapper方式对自定义持久层框架进行优化
    • MyBatis的基本介绍及优势
    • MyBatis的基本使用
    • Mybatis基本流程及配置文件解析
    • MyBatis复杂映射开发之一对一查询
    • MyBatis复杂映射开发之一对多查询
    • MyBatis复杂映射开发之多对多查询
    • MyBatis常用注解及基本增删改查的注解实现
    • MyBatis的注解实现复杂映射开发
    • MyBatis缓存的概念
    • 深度剖析MyBatis的一级缓存
    • 深度剖析MyBatis的二级缓存
    • MyBatis的二级缓存整合redis
    • MyBatis-RedisCache源码分析
    • MyBatis机制介绍与原理
    • 自定义MyBatis插件
    • 插件源码进一步分析与pageHelper分页插件介绍
    • 通用 Mapper 封装
    • 深入剖析MyBatis的架构原理
  • 《设计模式》

  • 后端开发
  • MyBatis
terwer
2022-08-27
目录

自定义持久层框架的设计思路

本文介绍了自定义持久层框架的核心要点,实现思路,以及在项目和框架本身两方面的实现方式。使用端需要引入框架的jar包并提供数据库和SQL配置信息,而框架本身对JDBC代码进行封装,包括加载配置文件、创建JavaBean、解析配置文件、生成SqlSessionFactory以及实现CRUD操作。

# 为什么要自定义框架

解决 解析原生JDBC开发问题与优化方案,同时理解 MyBatis 的底层原理。

# 核心要点

  • 自定义持久层框架的核心要点是什么?

    1. 解析配置文件

      • 数据库配置信息
      • sql 的封装
    2. 构建 SqlSessionFactory,注意这里的 openSession 方法

    3. 拿到 SqlSesion

      • 定义 SqlSession 基本方法

      • 封装具体的执行逻辑,Executor

        Execute 的 query 方法就对应 jdbc 操作

      • 优化,使用 JDK 动态代理避免 statementId 的硬编码

    4. 将 SqlSession 的操作封装到 DAO 层

# 实现思路

  • 自定义持久层框架需要考虑哪几个实现方向?

    • 使用端,项目端
    • 自定义持久层框架本身,也就是工程端

# 使用端(项目)

  • 自定义持久层框架在使用端的实现思路是什么?

    • 引入自定义持久层框架的 jar 包

    • 提供两部分配置信息

      • 数据库配置信息
      • sql 配置信息:sql 语句、参数类型、返回值类型
    • 使用配置文件来提供这两部分配置信息:

    (1)sqlMapConfig.xml​ :存放数据库配置信息,存放 mapper.xml​ 的全路径

    (2)mapper.xml​ :存放 sql 配置信息

# 自定义持久层框架本身(工程)

  • 自定义持久层框架本身需要怎么实现?

    本质是对 JDBC 代码进行封装

    • 加载配置文件

      根据配置文件的路径记载成字节输入流,存储到内存中

      创建 Resources 类

      方法:InputStream getResourceAsStream(String path)​

    • 创建两个 JavaBean(容器对象):存放的是配置文件解析出来的内容

      Configuration:核心配置类,存放 sqlMapConfig.xml​ 解析出来的内容

      MappedStatement:映射配置类,存放 mapper.xml​ 解析出来的内容

    • 解析配置文件:dom4j

      创建类:sqlSessionFactoryBuilder 类,方法 build(InputStream in)​

      1、使用 dom4j 解析配置文件,将解析出来的内容封装到威器对象中

      2、创建 SqlSessionFactory 对象,生产 SqlSession(会话对象),工厂模式

    • 创建 SqlSessionFactory 以及实现类 DefaultSqlSessionFactory

      ​openSession()​:生产 SqlSession

      • 创建 SqlSession 接口及实现类 DefaultSqlSession

        定义对数据库的 CRUD 操作:

        selectList()
        selectOne()
        update()
        delete()
        
        1
        2
        3
        4
    • 创建 Executor 实现类以及实现类 SimpleExecutor

      ​query(Configuration configuration, MappedStatement mappedStatement, Object... params)​:执行 JDBC 代码

文章更新历史

2024/04/12 同步文章到其他平台

2023/10/12 feat:增加闪卡速记

2022/03/14 feat:初稿

‍

编辑 (opens new window)
#custom#dao#framework#persistence#mybatis#mybatis-2
上次更新: 2024/06/13, 05:26:42
解析原生JDBC开发问题与优化方案
自定义持久层框架的代码实现一

← 解析原生JDBC开发问题与优化方案 自定义持久层框架的代码实现一→

最近更新
01
深入剖析MyBatis的架构原理
12-04
02
通用 Mapper 封装
10-09
03
插件源码进一步分析与pageHelper分页插件介绍
10-09
更多文章>
Theme by Vdoing | Copyright © 2011-2024 Terwer Green | MIT License | 粤ICP备2022020721号-1 | 百度统计
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式