mybatis分页 mybatis( 二 )


把Mybatis的功能架构分为三层:
1、API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库 。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理 。
2、数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等 。它主要的目的是根据调用的请求完成一次数据库操作 。
3、基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件 。为上层的数据处理层提供最基础的支撑 。
什么是mybatis?MyBatis 是一个可以自定义SQL、存储过程和高级映射的持久层框架 。MyBatis 摒除了大部分的JDBC代码、手工设置参数和结果集重获 。MyBatis 只使用简单的XML 和注解来配置和映射基本数据类型、Map 接口和POJO 到数据库记录 。相对Hibernate和Apache OJB等“一站式”ORM解决方案而言,Mybatis 是一种“半自动化”的ORM实现 。
需要使用的Jar包:mybatis-3.0.2.jar(mybatis核心包) 。mybatis-spring-1.0.0.jar(与Spring结合包) 。
MyBatis的前身是ibatis,但是在配置sql的语法上有明显的区别,并且spring目前的版本封装mybatis,至于mybatis-spring.jar文件也是mybatis团队复杂开发的jar包,用于和spring整合 。之前ibatis的源码托管方是apache,而mybatis是google 。
深入Mybatis框架学习了Spring之后,我们已经了解如何将一个类作为Bean交由IoC容器管理,也就是说,现在我们可以通过更方便的方式来使用Mybatis框架,我们可以直接把SqlSessionFactory、Mapper交给Spring进行管理,并且可以通过注入的方式快速地使用它们 。
因此,我们要学习一下如何将Mybatis与Spring进行整合,那么首先,我们需要在之前知识的基础上继续深化学习 。
在之前,我们如果需要创建一个JDBC的连接,那么必须使用DriverManager.getConnection()来创建连接,连接建立后,我们才可以进行数据库操作 。
【mybatis分页 mybatis】而学习了Mybatis之后,我们就不用再去使用DriverManager为我们提供连接对象,而是直接使用Mybatis为我们提供的SqlSessionFactory工具类来获取对应的SqlSession通过会话对象去操作数据库 。
那么,它到底是如何封装JDBC的呢?我们可以试着来猜想一下,会不会是Mybatis每次都是帮助我们调用DriverManager来实现的数据库连接创建?我们可以看看Mybatis的源码:
在通过SqlSessionFactory调用openSession方法之后,它调用了内部的一个私有的方法openSessionFromDataSource,我们接着来看,这个方法里面定义了什么内容:
也就是说,我们的数据源配置信息,存放在了Transaction对象中,那么现在我们只需要知道执行器到底是如何执行SQL语句的,我们就知道到底如何创建Connection对象了,就需要获取数据库的链接信息了,那么我们来看看,这个DataSource到底是个什么:
我们发现,它是在javax.sql定义的一个接口,它包括了两个方法,都是用于获取连接的 。因此,现在我们可以断定,并不是通过之前DriverManager的方法去获取连接了,而是使用DataSource的实现类来获取的,因此,也就正式引入到我们这一节的话题了:
数据库链接的建立和关闭是极其耗费系统资源的操作,通过DriverManager获取的数据库连接,
一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完后立即关闭连接,频繁的打开、关闭连接会持续消耗网络资源,造成整个系统性能的低下 。
因此,JDBC为我们定义了一个数据源的标准,也就是DataSource接口,告诉数据源数据库的连接信息,并将所有的连接全部交给数据源进行集中管理,当需要一个Connection对象时,可以向数据源申请,数据源会根据内部机制,合理地分配连接对象给我们 。
一般比较常用的DataSource实现,都是采用池化技术,就是在一开始就创建好N个连接,这样之后使用就无需再次进行连接,而是直接使用现成的Connection对象进行数据库操作 。
当然,也可以使用传统的即用即连的方式获取Connection对象,Mybatis为我们提供了几个默认的数据源实现,我们之前一直在使用的是官方的默认配置,也就是池化数据源:
一共三个选项:
那么我们先来看看,不使用池化的数据源实现,它叫做UnpooledDataSource,我们来看看源码:
首先这个类中定义了很多的成员,包括数据库的连接信息、数据库驱动信息、事务相关信息等 。
我们接着来看,它是如何实现DataSource中提供的接口的:

秒懂生活扩展阅读