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

Terwer 后端开发 MyBatis评论2941字数 1360阅读4分32秒阅读模式
摘要

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

为什么要自定义框架

解决 解析原生JDBC开发问题与优化方案,同时理解 MyBatis 的底层原理。文章源自浅海拾贝-https://blog.terwergreen.com/custom-design-ideas-of-long-lasting-layer-framework-e3eoi.html

核心要点

  • 自定义持久层框架的核心要点是什么?文章源自浅海拾贝-https://blog.terwergreen.com/custom-design-ideas-of-long-lasting-layer-framework-e3eoi.html
    1. 解析配置文件文章源自浅海拾贝-https://blog.terwergreen.com/custom-design-ideas-of-long-lasting-layer-framework-e3eoi.html
      • 数据库配置信息
      • sql 的封装
    2. 构建 SqlSessionFactory,注意这里的 openSession 方法
    3. 拿到 SqlSesion文章源自浅海拾贝-https://blog.terwergreen.com/custom-design-ideas-of-long-lasting-layer-framework-e3eoi.html
      • 定义 SqlSession 基本方法
      • 封装具体的执行逻辑,Executor文章源自浅海拾贝-https://blog.terwergreen.com/custom-design-ideas-of-long-lasting-layer-framework-e3eoi.html

        Execute 的 query 方法就对应 jdbc 操作

      • 优化,使用 JDK 动态代理避免 statementId 的硬编码
    4. 将 SqlSession 的操作封装到 DAO 层

实现思路

  • 自定义持久层框架需要考虑哪几个实现方向?文章源自浅海拾贝-https://blog.terwergreen.com/custom-design-ideas-of-long-lasting-layer-framework-e3eoi.html
    • 使用端,项目端
    • 自定义持久层框架本身,也就是工程端

使用端(项目)

  • 自定义持久层框架在使用端的实现思路是什么?文章源自浅海拾贝-https://blog.terwergreen.com/custom-design-ideas-of-long-lasting-layer-framework-e3eoi.html
    • 引入自定义持久层框架的 jar 包
    • 提供两部分配置信息文章源自浅海拾贝-https://blog.terwergreen.com/custom-design-ideas-of-long-lasting-layer-framework-e3eoi.html
      • 数据库配置信息
      • sql 配置信息:sql 语句、参数类型、返回值类型
    • 使用配置文件来提供这两部分配置信息:

    (1)sqlMapConfig.xml​ :存放数据库配置信息,存放 mapper.xml​ 的全路径文章源自浅海拾贝-https://blog.terwergreen.com/custom-design-ideas-of-long-lasting-layer-framework-e3eoi.html

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

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

  • 自定义持久层框架本身需要怎么实现?文章源自浅海拾贝-https://blog.terwergreen.com/custom-design-ideas-of-long-lasting-layer-framework-e3eoi.html

    本质是对 JDBC 代码进行封装文章源自浅海拾贝-https://blog.terwergreen.com/custom-design-ideas-of-long-lasting-layer-framework-e3eoi.html

    • 加载配置文件文章源自浅海拾贝-https://blog.terwergreen.com/custom-design-ideas-of-long-lasting-layer-framework-e3eoi.html

      根据配置文件的路径记载成字节输入流,存储到内存中文章源自浅海拾贝-https://blog.terwergreen.com/custom-design-ideas-of-long-lasting-layer-framework-e3eoi.html

      创建 Resources 类文章源自浅海拾贝-https://blog.terwergreen.com/custom-design-ideas-of-long-lasting-layer-framework-e3eoi.html

      方法:InputStream getResourceAsStream(String path)

    • 创建两个 JavaBean(容器对象):存放的是配置文件解析出来的内容文章源自浅海拾贝-https://blog.terwergreen.com/custom-design-ideas-of-long-lasting-layer-framework-e3eoi.html

      Configuration:核心配置类,存放 sqlMapConfig.xml​ 解析出来的内容文章源自浅海拾贝-https://blog.terwergreen.com/custom-design-ideas-of-long-lasting-layer-framework-e3eoi.html

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

    • 解析配置文件:dom4j文章源自浅海拾贝-https://blog.terwergreen.com/custom-design-ideas-of-long-lasting-layer-framework-e3eoi.html

      创建类:sqlSessionFactoryBuilder 类,方法 build(InputStream in)文章源自浅海拾贝-https://blog.terwergreen.com/custom-design-ideas-of-long-lasting-layer-framework-e3eoi.html

      1、使用 dom4j 解析配置文件,将解析出来的内容封装到威器对象中文章源自浅海拾贝-https://blog.terwergreen.com/custom-design-ideas-of-long-lasting-layer-framework-e3eoi.html

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

    • 创建 SqlSessionFactory 以及实现类 DefaultSqlSessionFactory文章源自浅海拾贝-https://blog.terwergreen.com/custom-design-ideas-of-long-lasting-layer-framework-e3eoi.html

      openSession()​:生产 SqlSession文章源自浅海拾贝-https://blog.terwergreen.com/custom-design-ideas-of-long-lasting-layer-framework-e3eoi.html

      • 创建 SqlSession 接口及实现类 DefaultSqlSession文章源自浅海拾贝-https://blog.terwergreen.com/custom-design-ideas-of-long-lasting-layer-framework-e3eoi.html

        定义对数据库的 CRUD 操作:文章源自浅海拾贝-https://blog.terwergreen.com/custom-design-ideas-of-long-lasting-layer-framework-e3eoi.html

        selectList()
        selectOne()
        update()
        delete()
        
    • 创建 Executor 实现类以及实现类 SimpleExecutor文章源自浅海拾贝-https://blog.terwergreen.com/custom-design-ideas-of-long-lasting-layer-framework-e3eoi.html

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

文章更新历史文章源自浅海拾贝-https://blog.terwergreen.com/custom-design-ideas-of-long-lasting-layer-framework-e3eoi.html

2024/04/12 同步文章到其他平台文章源自浅海拾贝-https://blog.terwergreen.com/custom-design-ideas-of-long-lasting-layer-framework-e3eoi.html

2023/10/12 feat:增加闪卡速记文章源自浅海拾贝-https://blog.terwergreen.com/custom-design-ideas-of-long-lasting-layer-framework-e3eoi.html

2022/03/14 feat:初稿 文章源自浅海拾贝-https://blog.terwergreen.com/custom-design-ideas-of-long-lasting-layer-framework-e3eoi.html

文章源自浅海拾贝-https://blog.terwergreen.com/custom-design-ideas-of-long-lasting-layer-framework-e3eoi.html

本文介绍了自定义持久层框架的核心要点,实现思路,以及在项目和框架本身两方面的实现方式。使用端需要引入框架的jar包并提供数据库和SQL配置信息,而框架本身对JDBC代码进行封装,包括加载配置文件、创建JavaBean、解析配置文件、生成SqlSessionFactory以及实现CRUD操作。文章源自浅海拾贝-https://blog.terwergreen.com/custom-design-ideas-of-long-lasting-layer-framework-e3eoi.html

相关文章
  • 扫码加我微信
  • 验证消息请输入:来自你的博客
  • weinxin
  • 我的微信公众号
  • 微信扫一扫与我交流吧
  • weinxin
Terwer
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: