原文:http://blog.csdn.net/hupanfeng/article/details/9068003/

MyBatis的前身叫iBatis,本是apache的一个开源项目, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis。MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录。

Mybatis的功能架构分为三层(图片借用了百度百科):

1)       API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。

2)       数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。

3)      基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。

快速入门

Mybatis的整体流程图

SqlSessionFactoryBuilder

每一个MyBatis的应用程序的入口是SqlSessionFactoryBuilder,它的作用是通过XML配置文件创建Configuration对象(当然也可以在程序中自行创建),然后通过build方法创建SqlSessionFactory对象。没有必要每次访问Mybatis就创建一次SqlSessionFactoryBuilder,通常的做法是创建一个全局的对象就可以了。示例程序如下:

[java] view plain copy

  1. private static SqlSessionFactoryBuilder sqlSessionFactoryBuilder;  
  2. private static SqlSessionFactory sqlSessionFactory;  
  3. private static void init() throws IOException {  
  4.     String resource = "mybatis-config.xml";  
  5.     Reader reader = Resources.getResourceAsReader(resource);  
  6.     sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();  
  7.     sqlSessionFactory = sqlSessionFactoryBuilder.build(reader);  
  8. }  

SqlSessionFactory

SqlSessionFactory对象由SqlSessionFactoryBuilder创建。它的主要功能是创建SqlSession对象,和SqlSessionFactoryBuilder对象一样,没有必要每次访问Mybatis就创建一次SqlSessionFactory,通常的做法是创建一个全局的对象就可以了。SqlSessionFactory对象一个必要的属性是Configuration对象,它是保存Mybatis全局配置的一个配置对象,通常由SqlSessionFactoryBuilder从XML配置文件创建。这里给出一个简单的示例:

[html] view plain copy

  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE configuration PUBLIC   
  3.     "-//mybatis.org//DTD Config 3.0//EN"  
  4.     "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  5. <configuration>  
  6.     <!-- 配置别名 -->  
  7.     <typeAliases>  
  8.         <typeAlias type="org.iMybatis.abc.dao.UserDao" alias="UserDao" />  
  9.         <typeAlias type="org.iMybatis.abc.dto.UserDto" alias="UserDto" />  
  10.     </typeAliases>  
  11.          
  12.     <!-- 配置环境变量 -->  
  13.     <environments default="development">  
  14.         <environment id="development">  
  15.             <transactionManager type="JDBC" />  
  16.             <dataSource type="POOLED">  
  17.                 <property name="driver" value="com.mysql.jdbc.Driver" />  
  18.                 <property name="url" value="jdbc:mysql://127.0.0.1:3306/iMybatis?characterEncoding=GBK" />  
  19.                 <property name="username" value="iMybatis" />  
  20.                 <property name="password" value="iMybatis" />  
  21.             </dataSource>  
  22.         </environment>  
  23.     </environments>  
  24.         
  25.     <!-- 配置mappers -->  
  26.     <mappers>  
  27.         <mapper resource="org/iMybatis/abc/dao/UserDao.xml" />  
  28.     </mappers>  
  29.         
  30. </configuration>  

要注意XML头部的声明,需要用来验证XML文档正确性。typeAliases 元素是包含所有typeAlias(别名)的列表,别名用来替换完整类名,这样在需要完整类名的地方就可以用别名来代替。environment元素体中包含对事务管理和连接池的环境配置。mappers元素是包含所有mapper(映射器)的列表,这些mapper的XML文件包含SQL代码和映射定义信息。当然,在XML配置文件中还有很多可以配置的,上面的示例指出的则是最关键的部分,其他配置请参考Mybatis的官方文档。

SqlSession

SqlSession对象的主要功能是完成一次数据库的访问和结果的映射,它类似于数据库的session概念,由于不是线程安全的,所以SqlSession对象的作用域需限制方法内。SqlSession的默认实现类是DefaultSqlSession,它有两个必须配置的属性:Configuration和Executor。Configuration前文已经描述这里不再多说。SqlSession对数据库的操作都是通过Executor来完成的,Executor的具体功能在下一小节在描述。

到目前为止,我们看到的都是mybatis的流程,我们的应用程序在什么地方插入到这个流程中并获得我们想要的结果呢?就是SqlSession这里。SqlSession有一个重要的方法getMapper,顾名思义,这个方式是用来获取Mapper对象的。什么是Mapper对象?根据Mybatis的官方手册,应用程序除了要初始并启动Mybatis之外,还需要定义一些接口,接口里定义访问数据库的方法,存放接口的包路径下需要放置同名的XML配置文件。SqlSession的getMapper方法是联系应用程序和Mybatis纽带,应用程序访问getMapper时,Mybatis会根据传入的接口类型和对应的XML配置文件生成一个代理对象,这个代理对象就叫Mapper对象。应用程序获得Mapper对象后,就应该通过这个Mapper对象来访问Mybatis的SqlSession对象,这样就达到里插入到Mybatis流程的目的。(注:这里可以参考mybatic MapperScannerConfigurer的原理)示例代码如下:

[java] view plain copy

  1. SqlSession session= sqlSessionFactory.openSession();  
  2. UserDao userDao = session.getMapper(UserDao.class);  
  3. UserDto user = new UserDto();  
  4. user.setUsername("iMybatis");  
  5. List<UserDto> users = userDao.queryUsers(user);  

对应的接口:

[java] view plain copy

  1. public interface UserDao {  
  2.     public List<UserDto> queryUsers(UserDto user) throws Exception;  
  3. }  

对应的配置文件:

[html] view plain copy

  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  3. <mapper namespace="org.iMybatis.abc.dao.UserDao">  
  4.     <select id="queryUsers" parameterType="UserDto" resultType="UserDto"  
  5.         useCache="false">  
  6.         <![CDATA[ 
  7.         select * from t_user t where t.username = #{username} 
  8.         ]]>  
  9.     </select>  
  10. </mapper>  

sqlsession的方法有:

Executor

Executor对象在创建Configuration对象的时候创建,并且缓存在Configuration对象里。Executor对象的主要功能是调用StatementHandler访问数据库,并将查询结果存入缓存中(如果配置了缓存的话)。

StatementHandler

StatementHandler是真正访问数据库的地方,并调用ResultSetHandler处理查询结果。

ResultSetHandler

处理查询结果。

Mybatis的体系结构(转载)的更多相关文章

  1. SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)【转载】

    最近在学习Spring+SpringMVC+MyBatis的整合.以下是参考网上的资料自己实践操作的详细步骤. 1.基本概念   1.1.Spring Spring是一个开源框架,Spring是于20 ...

  2. 简述MyBatis的体系结构

    MyBatis体系结构主要由以下几个关键部分: 1.加载配置 配置有两种形式:一种是xml配置文件,另一种是java代码的注解MyBatis将SQL的配置信息加载成为一个个的MappedStateme ...

  3. SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)(转载)

    使用SSM(Spring.SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没有记录SSM整合 ...

  4. MyBatis学习总结(七)——Mybatis缓存(转载)

      孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(七)--Mybatis缓存 一.MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的 ...

  5. 第八章 springboot + mybatis + 多数据源(转载)

    本篇博客转发自:http://www.cnblogs.com/java-zhao/p/5413845.html 在实际开发中,我们一个项目可能会用到多个数据库,通常一个数据库对应一个数据源. 代码结构 ...

  6. mybatis逆向工程,转载别人的,很清楚

    转载博客地址:http://www.cnblogs.com/selene/p/4650863.html

  7. Oracle实例和Oracle数据库(Oracle体系结构)---转载

    对于初接触Oracle 数据库的人来讲,很容易混淆的两个概念即是Oracle 实例和Oracle 数据库.这两 概念不同于SQL sever下的实例与数据库,当然也有些相似之处.只是在SQL serv ...

  8. spring+mybatis事务配置(转载)

    原文地址:http://blog.csdn.net/wgh1015398431/article/details/52861048 申明式事务配置步骤 .xml文件头部需要添加spring的相关支持: ...

  9. MyBatis 体系结构、根配置文件、Mapper映射文件

    一.MyBatis的体系结构 1.SqlSessionFactory对象 SqlSessionFactory对象是MyBatis的管理核心,它是单个数据库映射关系经过编译后的内存镜像,是创建SqlSe ...

随机推荐

  1. foundation DB问题

    1. go get github.com/apple/foundationdb/bindings/go/src/fdb # github.com/apple/foundationdb/bindings ...

  2. win10 点击开始按钮无反应

    本人亲身经历 由于安装软件时需要注册表权限,在一顿猛如虎的操作下,将注册表中 HKEY_CURRENT_USER 的权限出问题.而导致无法打开 开始菜单 ----------------以下是本人为了 ...

  3. Ubuntu13.04编译安装cmake2.8.12.2

    前提: 安装过程需要gcc和gcc-c++.ubuntu13.04桌面版自带gcc4.7,apt-get install g++4.7安装g++./usr/bin目录下有x86_64-linux-gn ...

  4. http详解之post 2

    -----------------------post请求示例----------------#请求行POST https://re.csdn.net/csdnbi HTTP/1.1 #请求头部开始H ...

  5. java:LeakFilling (SQL,JDBC)

    1.JDBC中的sql里面不能加 :号,否则报错 2.Oracle数据必须提交后才可以使用JDBC进行操作,否则没有结果 3. JDBC插入序列: 首先在sequences建一个序列 insert i ...

  6. LeetCode.1022-根到叶路径二进制数之和(Sum of Root To Leaf Binary Numbers)

    这是小川的第381次更新,第410篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第243题(顺位题号是1022).给定二叉树,每个节点值为0或1.每个根到叶路径表示以最高 ...

  7. Ubuntu安装并使用emacs

    1. sudo add-apt-repository ppa:kelleyk/emacs 2. sudo apt update sudo apt install emacs26 3.安装完成,查看em ...

  8. 第五周总结&实验·

                                                                  本周总结 1.final声明的变量即成为常量,常量不可以修改. 2.子类能够 ...

  9. Qt - 基于TCP的网络编程

    TCP(传输控制协议 Transmission Control Protocol) 可靠.面向数据流.面向连接  的传输协议.(许多应用层协议都是以它为基础:HTTP.FTP) 使用情况: 相比UDP ...

  10. awk 命令使用指南

    一:awk 的执行流程 (1) 首先执行BEGIN{} 块中的初始化操作 (2) 然后从指定的数据文件中循环读取一个数据行 ( 自动更新 NF.NR.$0.$1....., 等内建变量的值) (3) ...