MyBatis知多少(7)持久层
持久层是适合使用MyBatis的地方。在面向对象的系统中,持久层主要关注对象(或者更精确地说应该是存储在那些对象中的数据)的存取。在企业应用程序中持久层通常用关系数据库系统来存储数据,虽然某些情况下其他持久的数据结构或者介质也可能使用。如某些系统就可能会使用简单的以逗号分隔数据的平板文件或XML文件。考虑到企业应用程序的持久化策略往往具有异质性,因此持久层需要关注的第二个问题就是抽象。持久层应该隐藏关于数据如何被存储以及如何被取出的所有细节。这样的细节决不能暴露 给应用程序的其他层。
为更好地理解这些关注点及其如何被管理,我们将持久层又分为3层:抽象层、持久化框架 以及驱动程序/接口层,如下图。
让我们再仔细研究一下持久层细分后得到的这3层吧。

抽象层
抽象层的目的就在于为持久层提供一致且有意义的接口。它是一组类和方法的集合,这些类和方法是持久层实现细节。抽象层中的方法不能使用特定于实现的参数,也不能返回特定实现专用的类或抛出特定实现专用的异常。一旦合适的抽象层准备就绪,整个持久化方法(包 括持久化API以及存储设施)的改变就不再涉及该抽象层,也不能引起其他任何依赖层的改变。 有许多模式可用于帮助实现一个合适的抽象层,其中最常用的就是DAO模式。包括MyBatis在内的许多框架都为你实现了这个模式。
持久化框架
持久化框架负责与数据库驱动程序(或接口)的交互。持久化框架会提供用于存储、获取、 更新、查找以及管理数据的方法。与抽象层不同,持久化框架通常只针对一类存储设施。例如, 你可能会找到专用于处理XML文件的数据存储的持久化API。但是,对大多数现代企业应用程序 来说,关系数据库通常是存储设施的首选。大多数流行的编程语言都带有用于访问关系数据库的 标准API。JDBC是Java应用程序访问数据库的标准框架
①即“外观模式”,用于为一个子系统定义一组一致的接口。据库的标准持久化框架。这些标准API能够用于任何目的,因此它们的实现非常完备,只是使用 起来非常冗长和繁琐。基于这些原因,人们在标准API的基础上又创建了许多框架,使之功能更加专用,因此也更加强大。MyBatis就是这样的一个持久化框架,它专用于处理任何类型的关系数据库,且以一种一致的方式同时支持Java。
驱动程序/接口层
存储设施可以简单得像一个以逗号分隔数据的平板文件,也可以复杂得像一个价值几百万元的企业数据库服务器。但不论是哪种情况,总有一个软件驱动程序在底层与存储设施通信以交换数据。一些驱动程序,如本地文件系统驱动程序,虽然在功能上是通用的,但与平台相关。你也许永远也不会看到文件I/O驱动程序,但可以肯定的是它一定存在。另一方面,数据库驱动程序总是非常复杂,并且在实现、大小和行为上存在较大的不同。因此就需要由持久化框架来与这些数据库驱动程序通信,从而将它们之间的不同简化并降低到最低点。
系列文章:
MyBatis知多少(7)持久层的更多相关文章
- Mybatis学习之自定义持久层框架(三) 自定义持久层框架:读取并解析配置文件
前言 前两篇文章分别讲解了JDBC和Mybatis的基本知识,以及自定义持久层框架的设计思路,从这篇文章开始,我们正式来实现一个持久层框架. 新建一个项目 首先我们新建一个maven项目,将其命名为I ...
- Mybatis学习之自定义持久层框架(二) 自定义持久层框架设计思路
前言 上一篇文章讲到了JDBC的基本用法及其问题所在,并提出了使用Mybatis的好处,那么今天这篇文章就来说一下该如何设计一个类似Mybatis这样的持久层框架(暂时只讲思路,具体的代码编写工作从下 ...
- Mybatis学习之自定义持久层框架(一) 为什么要用框架而不直接用JDBC?
前言 说起Mybatis,相信大家都不会感到陌生,它是一款优秀的持久层框架,应用于java后端开发中,为客户端程序提供访问数据库的接口. 我们都知道,JDBC是Java语言中用来规范客户端程序如何来访 ...
- Mybatis学习之自定义持久层框架(七) 自定义持久层框架优化
前言 接上文,这里只是出于强迫症,凭借着半年前的笔记来把之前没写完的文章写完,这里是最后一篇了. 前面自定义的持久层框架存在的问题 Dao层若使用实现类,会存在代码重复,整个操作的过程模版重复(加载配 ...
- Mybatis学习之自定义持久层框架(六) 自定义持久层框架:完善CRUD方法并进行测试
前言 没想到会等到半年以后才来写这篇文章,我已经不记得当初自己想要在这篇文章中写什么了,还好有一些零散的笔记留着,就对照着上一篇文章及零散的笔记,把内容给补充完吧. 完善CRUD方法 完善Defaul ...
- Mybatis学习之自定义持久层框架(五) 自定义持久层框架:封装CRUD操作
前言 上一篇文章我们完成了生产sqlSession的工作,与数据库的连接和创建会话的工作都已完成,今天我们可以来决定会话的内容了. 封装CRUD操作 首先我们需要创建一个SqlSession接口类,在 ...
- Mybatis学习之自定义持久层框架(四) 自定义持久层框架:生产sqlSession
前言 上一回我们完成了数据库配置文件的读取和解析工作,有了这些准备工作,我们就可以与数据库创建连接和会话了,所谓sqlSession就是数据库的会话,一切增删查改操作都是在与数据库的会话中完成,下面我 ...
- mybatis与hibernate的区别持久层对比【面试题】
Mybatis技术特点: 好处: 通过直接编写SQL语句,可以直接对SQL进行性能的优化: 学习门槛低,学习成本低.只要有SQL基础,就可以学习mybatis,而且很容易上手: 由于直接编写SQL语句 ...
- Java持久层框架Mybatis入门
MyBatis是什么 MyBatis是Java的持久层框架,GitHub的star数高达15.8k,是Java技术栈中最热门的ORM框架之一.它支持自定义SQL.存储过程以及高级映射,可以通过XML或 ...
随机推荐
- 雅虎Yahoo 前段优化 14条军规
Yahoo 14条 雅虎十四条 腾讯前端设计的Leader推荐我背熟的.请大家都能好好学习,不要像我一样一扫而过,好好的记下来!不仅仅是晓得一些CSS xhtml就好了,深刻认识到很多的东西需要学习的 ...
- js 导出Excel
最近从Silverlight这边转到javascript过来,现在要导出一个导出excel的功能.上级领导指示当页显示多少数据,就导出多少数据,没有必要从后台在去数据.以前也没有接触过这方面的,在网上 ...
- Windows 8.1/Server 2012 R2/Embedded 8.1 with Update 3(MSDN最新版)
微软于12月16日更新了包含Update 3的ISO,此次更新并不会明显改善用户的界面体验,下载后请校验MD5.我整理了中.英文的8.1/服务器版/嵌入式版本/多国语言包. 1,Windows 8.1 ...
- 无锁编程以及CAS
无锁编程 / lock-free / 非阻塞同步 无锁编程,即不使用锁的情况下实现多线程之间的变量同步,也就是在没有线程被阻塞的情况下实现变量的同步,所以也叫非阻塞同步(Non-blocking Sy ...
- Find Minimum in Rotated Sorted Array leetcode java
题目: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 ...
- vs2013 下载
http://download.microsoft.com/download/2/4/9/249BF223-5B84-4259-9424-429E66F45509/VS2013_RC_ULT_CHS. ...
- spring 4.2.0后jdbcTemplate中不用queryForLong了(之系统升级发现)
在spring 3.2.2之后,jdbcTemplate.queryForInt已经被取消了! 原来是这样写的: String sql = "SELECT count(*) FROM USE ...
- ReactiveCocoa与Functional Reactive Programming
转自 http://blog.leezhong.com/ios/2013/06/19/frp-reactivecocoa.html Functional Reactive Programming(以下 ...
- liunx 服务内存消耗100% 怎么处理
一.排查问题 查看内存使用 free 查看进程使用存储状况.看是不是业务进程在消耗存储,如果是就要优化业务代码了 使用top 命令 如果不是怎么办 二.处理办法 1.把没有用到的消耗内存的服务进程 ...
- liunx CentOS 升级Python版本
CentOS python版本是V2.6.6,升级3.4.3. 1.下载 安装包:wget http://www.python.org/ftp/python/3.4.3/Python-3.4.3.tg ...