前言

上一篇文章讲到了JDBC的基本用法及其问题所在,并提出了使用Mybatis的好处,那么今天这篇文章就来说一下该如何设计一个类似Mybatis这样的持久层框架(暂时只讲思路,具体的代码编写工作从下一篇文章开始)。

从使用端的角度来设计

从使用端的角度来看,我们需要做一些配置工作,原理等同于使用Mybatis框架时所进行的配置。这其中包括以下步骤:

  1. 引入自定义持久层框架的jar包。
  2. 提供存放数据库核心配置的信息。
  3. 提供sql配置信息(包括sql语句、参数类型和返回类型)。

这里暂时不讲这些工作的具体实现方法,等后面自定义持久层框架编写完成了,再来进行这些配置工作,并编写相应的dao层、实体层及测试类。

从框架端的角度来设计

设计持久层框架,本质上是对JDBC代码进行封装,因此我们需要做这样一些工作:

  1. 既然是跟数据库相关的框架,那么第一步肯定是要先连接上数据库。因此我们首先要读取存放数据库核心配置信息和sql配置信息的配置文件,也就是根据配置文件的路径,加载配置文件成字节输入流,存储在内存中。当然,我们不能一直将读取到的配置信息以流的形式存储在内存中,这样操作起来很不方便。我们可以创建两个javaBean:Configuration和MappedStatement,讲解析出来的核心配置信息和sql配置信息分别存放在这两个容器对象中。
  2. 上面提到了解析配置文件,这里来讲一下具体的实现思路。这里我们需要用到Java的XML应用程序编程接口:dom4j对两类配置文件进行解析,讲解析出来的内容封装到容器对象Configuration和MappedStatement中。
  3. 创建SqlSessionFactory接口及其实现类,获取数据库核心配置信息参数,生产sqlSession。
  4. 创建sqlSession接口及其实现类,用于封装数据库CRUD操作的相关方法,包括增删查改。
  5. 创建Executor接口及其实现类,用于调用JDBC的增删查改方法。

总结

本篇我们分别从使用端和框架端的角度阐述了自定义持久层框架的设计思路,对于程序员来说,光说原理而不写代码是很枯燥的,从下一篇开始,我们正式用边写代码、边分析原理的方法来讲解如何自定义一个持久层框架。

Mybatis学习之自定义持久层框架(二) 自定义持久层框架设计思路的更多相关文章

  1. Spring+SpringMVC+MyBatis+easyUI整合优化篇(十二)数据层优化-explain关键字及慢sql优化

    本文提要 从编码角度来优化数据层的话,我首先会去查一下项目中运行的sql语句,定位到瓶颈是否出现在这里,首先去优化sql语句,而慢sql就是其中的主要优化对象,对于慢sql,顾名思义就是花费较多执行时 ...

  2. iOS开发:代码通用性以及其规范 第一篇(附带,自定义UITextView\进度条\双表显示\瀑布流 代码设计思路)

    在iOS团队开发中,我见过一些人的代码,也修改过他们的代码.有的人的代码写的非常之规范.通用,几乎不用交流,就可以知道如何修改以及在它基础上扩展延生.有的人的代码写的很垃圾,一眼看过去,简直会怀疑自己 ...

  3. 软件工程学习之小学四则混合运算出题软件 Version 1.00 设计思路及感想

    对于小学四则混合运算出题软件的设计,通过分析设计要求,我觉得为了这个软件在今后便于功能上的扩充,可以利用上学期所学习的<编译原理>一课中的LL1语法分析及制导翻译的算法来实现.这样做的好处 ...

  4. 软件工程学习之小学四则混合运算出题软件 Version 1.1 设计思路及感想

    继上次采用形式文法来生成混合运算的算式,由于算法中没有引入控制参数而导致容易产生形式累赘(多余的括号等)的算式.本次更新决定采用一种更为简单有效的生成方式,由给出的一个随机的最终答案S,通过给定的一个 ...

  5. 【MyBatis学习笔记】

    [MyBatis学习笔记]系列之预备篇一:ant的下载与安装 [MyBatis学习笔记]系列之预备篇二:ant入门示例 [MyBatis学习笔记]系列之一:MyBatis入门示例 [MyBatis学习 ...

  6. TCP/IP协议族之链路层(二)

    TCP/IP学习记录,如有错误请指正,谢谢!!! TCP/IP协议族之链路层(二) 链路层是最底层协议,主要有三个目的: 1. 为IP模块发送和接收IP数据报 2. 为ARP模块发送ARP请求和接收A ...

  7. Mybatis学习之自定义持久层框架(三) 自定义持久层框架:读取并解析配置文件

    前言 前两篇文章分别讲解了JDBC和Mybatis的基本知识,以及自定义持久层框架的设计思路,从这篇文章开始,我们正式来实现一个持久层框架. 新建一个项目 首先我们新建一个maven项目,将其命名为I ...

  8. Mybatis(一):手写一套持久层框架

    作者 : 潘潘 未来半年,有幸与导师们一起学习交流,趁这个机会,把所学所感记录下来. 「封面图」 自毕业以后,自己先创业后上班,浮沉了近8年,内心着实焦躁,虽一直是走科班路线,但在技术道路上却始终没静 ...

  9. mybatis学习笔记之基础框架(2)

    mybatis学习笔记之基础框架(2) mybatis是一个持久层的框架,是apache下的顶级项目. mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成满足s ...

随机推荐

  1. java.lang.IllegalArgumentException: MALFORMED

    java.lang.IllegalArgumentException: MALFORMED at java.util.zip.ZipCoder.toString(ZipCoder.java:58) a ...

  2. 12、MyBatis教程之缓存

    13.缓存 简介 1.什么是缓存 [ Cache ]? 存在内存中的临时数据. 将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高 ...

  3. OCPC产品初探

    OCPC即Optimization CPC,今天我们就来看看它的Optimizaton在哪儿. 在广告模型初探(一)中我们就曾提到过,互联网广告的本质其实就是流量的买卖.是广告主.媒体方以及用户三方之 ...

  4. Hi3516如何连接Wifi(二)

    目录: 一.总体思路 二.启动Daemon 三.作者文章合集 书承上回(Hi3516如何连接Wifi(一)),上一篇聊了一下怎样在Hi3516中用wpa_supplicant连接到Wifi热点,本文讲 ...

  5. 移动端调试vConsole

    当我们在进行移动端开发的时候,经常会出现在pc显示正常,在移动端却各种异常的情况.这时候我们在手机上又看不到error log. 所以我们就需要vConsole这样一个移动端开发神器. 那具体要怎么使 ...

  6. K8S 上部署 Redis-cluster 三主三从 集群

    介绍 Redis代表REmote DIctionary Server是一种开源的内存中数据存储,通常用作数据库,缓存或消息代理.它可以存储和操作高级数据类型,例如列表,地图,集合和排序集合. 由于Re ...

  7. SQL语句练习(基础版)

    最近在学习SQL基本语句的练习,在此分享一下笔者做过的练习以及个人的解决教程: 首先是基本练习表格的搭建,具体内容如下表所示: Snum Sname Ssex Sage Sphone Dname S0 ...

  8. 消息中间件rabbitMQ

    1 为什么使用消息队列啊? 其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队列是什么 面试官问你这个问题,期望的一个回答是说,你们公司有个什么业务场景,这 ...

  9. ECDSA密钥对生成以及在Token中的应用

    1 概述 本文主要讲述了如何利用Openssl生成ECDSA密钥对,并利用Auth0库进行Token生成及验证的过程. 2 ECDSA 2.1 简介 ECC(Elliptic Curve Crypto ...

  10. python 匿名函数,内置函数

    一 :匿名函数 匿名就是没有名字 def func(x,y,z=1): return x+y+z 匿名 lambda x,y,z=1:x+y+z #与函数有相同的作用域,但是匿名意味着引用计数为0,使 ...