持久层是适合使用MyBatis的地方。在面向对象的系统中,持久层主要关注对象(或者更精确地说应该是存储在那些对象中的数据)的存取。在企业应用程序中持久层通常用关系数据库系统来存储数据,虽然某些情况下其他持久的数据结构或者介质也可能使用。如某些系统就可能会使用简单的以逗号分隔数据的平板文件或XML文件。考虑到企业应用程序的持久化策略往往具有异质性,因此持久层需要关注的第二个问题就是抽象。持久层应该隐藏关于数据如何被存储以及如何被取出的所有细节。这样的细节决不能暴露 给应用程序的其他层。

为更好地理解这些关注点及其如何被管理,我们将持久层又分为3层:抽象层、持久化框架 以及驱动程序/接口层,如下图。

让我们再仔细研究一下持久层细分后得到的这3层吧。

抽象层

抽象层的目的就在于为持久层提供一致且有意义的接口。它是一组类和方法的集合,这些类和方法是持久层实现细节。抽象层中的方法不能使用特定于实现的参数,也不能返回特定实现专用的类或抛出特定实现专用的异常。一旦合适的抽象层准备就绪,整个持久化方法(包 括持久化API以及存储设施)的改变就不再涉及该抽象层,也不能引起其他任何依赖层的改变。 有许多模式可用于帮助实现一个合适的抽象层,其中最常用的就是DAO模式。包括MyBatis在内的许多框架都为你实现了这个模式。

持久化框架

持久化框架负责与数据库驱动程序(或接口)的交互。持久化框架会提供用于存储、获取、 更新、查找以及管理数据的方法。与抽象层不同,持久化框架通常只针对一类存储设施。例如, 你可能会找到专用于处理XML文件的数据存储的持久化API。但是,对大多数现代企业应用程序 来说,关系数据库通常是存储设施的首选。大多数流行的编程语言都带有用于访问关系数据库的 标准API。JDBC是Java应用程序访问数据库的标准框架

①即“外观模式”,用于为一个子系统定义一组一致的接口。据库的标准持久化框架。这些标准API能够用于任何目的,因此它们的实现非常完备,只是使用 起来非常冗长和繁琐。基于这些原因,人们在标准API的基础上又创建了许多框架,使之功能更加专用,因此也更加强大。MyBatis就是这样的一个持久化框架,它专用于处理任何类型的关系数据库,且以一种一致的方式同时支持Java。

驱动程序/接口层

存储设施可以简单得像一个以逗号分隔数据的平板文件,也可以复杂得像一个价值几百万元的企业数据库服务器。但不论是哪种情况,总有一个软件驱动程序在底层与存储设施通信以交换数据。一些驱动程序,如本地文件系统驱动程序,虽然在功能上是通用的,但与平台相关。你也许永远也不会看到文件I/O驱动程序,但可以肯定的是它一定存在。另一方面,数据库驱动程序总是非常复杂,并且在实现、大小和行为上存在较大的不同。因此就需要由持久化框架来与这些数据库驱动程序通信,从而将它们之间的不同简化并降低到最低点。

系列文章:

MyBatis知多少(1)

MyBatis知多少(2)

MyBatis知多少(3)

MyBatis知多少(4)MyBatis的优势

MyBatis知多少(5)业务对象模型

MyBatis知多少(6)表现层与业务逻辑层

MyBatis知多少(7)持久层的更多相关文章

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

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

  2. Mybatis学习之自定义持久层框架(二) 自定义持久层框架设计思路

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

  3. Mybatis学习之自定义持久层框架(一) 为什么要用框架而不直接用JDBC?

    前言 说起Mybatis,相信大家都不会感到陌生,它是一款优秀的持久层框架,应用于java后端开发中,为客户端程序提供访问数据库的接口. 我们都知道,JDBC是Java语言中用来规范客户端程序如何来访 ...

  4. Mybatis学习之自定义持久层框架(七) 自定义持久层框架优化

    前言 接上文,这里只是出于强迫症,凭借着半年前的笔记来把之前没写完的文章写完,这里是最后一篇了. 前面自定义的持久层框架存在的问题 Dao层若使用实现类,会存在代码重复,整个操作的过程模版重复(加载配 ...

  5. Mybatis学习之自定义持久层框架(六) 自定义持久层框架:完善CRUD方法并进行测试

    前言 没想到会等到半年以后才来写这篇文章,我已经不记得当初自己想要在这篇文章中写什么了,还好有一些零散的笔记留着,就对照着上一篇文章及零散的笔记,把内容给补充完吧. 完善CRUD方法 完善Defaul ...

  6. Mybatis学习之自定义持久层框架(五) 自定义持久层框架:封装CRUD操作

    前言 上一篇文章我们完成了生产sqlSession的工作,与数据库的连接和创建会话的工作都已完成,今天我们可以来决定会话的内容了. 封装CRUD操作 首先我们需要创建一个SqlSession接口类,在 ...

  7. Mybatis学习之自定义持久层框架(四) 自定义持久层框架:生产sqlSession

    前言 上一回我们完成了数据库配置文件的读取和解析工作,有了这些准备工作,我们就可以与数据库创建连接和会话了,所谓sqlSession就是数据库的会话,一切增删查改操作都是在与数据库的会话中完成,下面我 ...

  8. mybatis与hibernate的区别持久层对比【面试题】

    Mybatis技术特点: 好处: 通过直接编写SQL语句,可以直接对SQL进行性能的优化: 学习门槛低,学习成本低.只要有SQL基础,就可以学习mybatis,而且很容易上手: 由于直接编写SQL语句 ...

  9. Java持久层框架Mybatis入门

    MyBatis是什么 MyBatis是Java的持久层框架,GitHub的star数高达15.8k,是Java技术栈中最热门的ORM框架之一.它支持自定义SQL.存储过程以及高级映射,可以通过XML或 ...

随机推荐

  1. 盘点mysql中容易被我们误会的地方

    引语:mysql作为数据库的一大主力军,到处存在于我们各种系统中,相信大家都不陌生!但是,你知道你能用不代表你知道细节,那我们就来盘点盘点其中一些我们平时不太注意的地方,一来为了有趣,二来为了不让自己 ...

  2. JAVA学习AWT绘图

    package com.graphics; import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JPanel ...

  3. 微信小程序笔记(二)

    微信小程序环境搭建与开发工具介绍 2-1 开篇介绍及下载工具 1.开发工具下载地址:   http://t.cn/RVKH0HS 2.下载安装对应版本:win32,win64,mac; 2-2 小程序 ...

  4. React访问组件元素的子元素(ES5与ES6的对比)

    // 创建组件var NewDom = React.createClass({ // 类名一定要大写开头 render: function () { return ( <ol> { Rea ...

  5. Leetcode-462 Minimum Moves to Equal Array Elements II

    #462.   Minimum Moves to Equal Array Elements II Given a non-empty integer array, find the minimum n ...

  6. python的反射

    目前大多数网站都是通过路由的方法来,处理url请求,如果有很多个url的话,不停的include或者用if判断匹配,似乎不太符合情理,因此这里讲讲python的反射机制, 自动装在模块.请看下面的实例 ...

  7. ios之如何删除默认的约束

    应用场景,你是否尝试过定义一个在设置了autolayout中的xib的控件,然后连线关联了outlet.跟住在代码中设置了针对这个控件的约束,但是发现没有显示效果,控制台里面打印出约束的问题.大概就是 ...

  8. React学习资料

    以下是我整理的React学习资料,包括:React基础.Redux.reat-router, redux middleware, higher order components, React验证等, ...

  9. Log4j2常见使用示例及Syslog/Syslog-ng

    准备工作 打开http://logging.apache.org/log4j/,点击左侧Download,我下载的是Apache Log4j 2 binary (zip),目前是2.0.2版本.解压后 ...

  10. django文件上传下载

    views: def mgmt_files(request): #列出树形目录,上传文件页面 if request.method == 'POST': path_root = "D:\\py ...