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

本贴最后更新于 600 天前,其中的信息可能已经天翻地覆

核心要点

  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()
      
  • 创建 Executor 实现类以及实现类 SimpleExecutor

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

文章更新历史

2022/05/08 feat:新增 Kotlin 版代码实现 。

2022/03/14 feat:初稿。

打赏 5 积分后可见
5 积分
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3167 引用 • 8207 回帖 • 2 关注
  • 框架
    47 引用 • 346 回帖 • 1 关注
  • DAO
    2 引用 • 3 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...