笔者第一次接触跟MyBatis框架是在2009年未的时候。不过那个时候的他并不叫MyBatis,而是叫IBatis。2010年的时候改为现在的名字——MyBatis。这几年过去了,对于笔者来讲有一点陌生了。而且那个时候他也没有这么出名。hibernate占了大部分市场。虽然笔者早年的时候查看过他的源码,但是并没有很深入去理解他。主要的原因是因为当时我还在看hibernate的源码。太累了所以就没有去认真的理解。现在笔者想要重新在来看一篇关于他的源码并加强对他的理解。也是对自己过程的一种回归吧。

想要查看源码就要先了解他的一些概念。否则云里来雾里去的什么也不懂。有很多朋友会选择去图书管买一些书来查看。当然这是可取的。那么如果不想的话,就可以去官网查看他们的介绍了——MyBatis网站。笔者也会按照官网上面的介绍来进行源码上的查看。

ORM思想的传播述造了很多ORM框架。事实上笔者也想把MyBatis定义为ORM框架。但是开发的过程中笔者感觉最多的是他在管理SQL语句。虽然在最后的结果会应射出对应的实体对象。可是还是我觉得MyBatis的管理SQL语句才是这个框架的核心。官网的介绍划分为四块来介绍MyBatis——XML配置、XML映射文件、动态SQL、日志。对于开发人员来讲主要看完这四块就可以了。当然关于什么是ORM的话,这个笔者就不在做什么相关的解释。网络上也有一片的资料足够你学习的。

学习环境


MyBatis源码:mybatis-3-mybatis-3.4.1.

数据库:SQL SERVER 2008

开发工具:Ecilpse,Maven

Java:1.8

开发环境


官网上也有写一个篇关于入门的文章。 只是讲的可能简单了一点。但是这并不是没有任何作用。笔者用的是Maven来引入MyBatis的源码的。虽然他有自带的测试代码,不过笔者还是希望读者们能自己在新建一个项目来学习。这样子方便自己动手做一些测试来加深映像。虽然可以用Maven来构建JAR。但是笔者没有这样子做。而是新建的项目里面引用MyBatis的源码。相信大家对Ecilpse里面的Build Path的Projects选择卡并不陌生。这样子方便查看源码,而不是在从JAR包中关联对应的源码。

上面的图片便是笔者导入之后项目源码。事实对我们学习最快最有用的应该是test这个部分的例子。你完全可以从例子中找到你不知道如何使用的功能点。

有了上面的源码,当然笔者也会简单的测试一下这个源码有没有错,能不能用。如下代码

public static void main(String[] args) {

        try {

            System.out.println("开始mybatis实验");

            String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
IProductMapper dao = session.getMapper(IProductMapper.class); List<Product> products = dao.SelectProducts(30); session.close(); System.out.println("结束mybatis实验"); } catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} }

相信没有用看不懂这段代码。事实上我们可以知道想要用MyBatis就离不开他相关的配置信息。相对的MyBatis而言笔者觉得还是比较简的。笔者的例子项目里面有一个文件叫mybatis-config.xml文件。相信大家看了就知道他的作用。jdbc.properties这个文件是存放了相关的数据库配置信息。可有可无,如果不要的话,就直接接在dataSource节点上直接修改数据库信息。

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <properties resource="jdbc.properties" /> <environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${database.driver}" />
<property name="url" value="${database.url}" />
<property name="username" value="${database.username}" />
<property name="password" value="${database.password}" />
</dataSource>
</environment>
</environments> <mappers>
<mapper resource="com/aomi/dao/ProductMapper.xml" />
</mappers> </configuration>

想要研究一个源码框架一定要找到切入口。从上面的例子代码中我们可以充分的分析出——SqlSessionFactoryBuilder类就是源码的切入口。相信大家可能会想到常用的JAVA模式中的一种叫Builder模式。通过SqlSessionFactoryBuilder类的build方法我们可以拿到一个相关的类——SqlSessionFactory类例化。实际就是DefaultSqlSessionFactory类。例子源码中我们可以看到后面的操作一定离不开SqlSession接口实例。而从名字上来讲,我们可以猜出SqlSessionFactory类好像是SqlSession接口的工厂类吧。当然这还要回头看一下源码才能确定。

在实例的开发过程中,我们一定会用到一个用于配置对象实体相关的配置文件。就是上面XML信息中的Mapper节点部分的信息。如下

    <mappers>
<mapper resource="com/aomi/dao/ProductMapper.xml" />
</mappers>

MyBatis的亮点笔者认为就是管理SQL语句。不然笔者真觉得MyBatis好像也没有多大的优点。而类似上面的XML文件中就是存放SQL语句。当然一个实体对象可能对应一个XML文件。例如笔者写的例子一样子。如下

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.aomi.dao.IProductMapper"> <select id="SelectProducts" resultMap="result">
select * from Products where #{id} > ProductID
</select> <resultMap type="com.aomi.vo.Product" id="result" autoMapping="true">
</resultMap>
</mapper>

关于如何管理SQL语句的话,笔者觉得你去查看官网来的更实际一点。而笔者想要讲的是不管是上面的XML配置文件,还是对实体的增删改查都离不开上面的SqlSession接口实例。看样子我们很清楚只要知道SqlSession接口实例的工作原理,就可以说理解了70%的MyBatis概念。

MyBatis 源码分析——介绍的更多相关文章

  1. Mybatis源码分析--关联表查询及延迟加载原理(二)

    在上一篇博客Mybatis源码分析--关联表查询及延迟加载(一)中我们简单介绍了Mybatis的延迟加载的编程,接下来我们通过分析源码来分析一下Mybatis延迟加载的实现原理. 其实简单来说Myba ...

  2. MyBatis 源码分析系列文章合集

    1.简介 我从七月份开始阅读MyBatis源码,并在随后的40天内陆续更新了7篇文章.起初,我只是打算通过博客的形式进行分享.但在写作的过程中,发现要分析的代码太多,以至于文章篇幅特别大.在这7篇文章 ...

  3. MyBatis 源码分析 - 插件机制

    1.简介 一般情况下,开源框架都会提供插件或其他形式的拓展点,供开发者自行拓展.这样的好处是显而易见的,一是增加了框架的灵活性.二是开发者可以结合实际需求,对框架进行拓展,使其能够更好的工作.以 My ...

  4. MyBatis 源码分析 - 缓存原理

    1.简介 在 Web 应用中,缓存是必不可少的组件.通常我们都会用 Redis 或 memcached 等缓存中间件,拦截大量奔向数据库的请求,减轻数据库压力.作为一个重要的组件,MyBatis 自然 ...

  5. MyBatis 源码分析 - 内置数据源

    1.简介 本篇文章将向大家介绍 MyBatis 内置数据源的实现逻辑.搞懂这些数据源的实现,可使大家对数据源有更深入的认识.同时在配置这些数据源时,也会更清楚每种属性的意义和用途.因此,如果大家想知其 ...

  6. MyBatis 源码分析 - 映射文件解析过程

    1.简介 在上一篇文章中,我详细分析了 MyBatis 配置文件的解析过程.由于上一篇文章的篇幅比较大,加之映射文件解析过程也比较复杂的原因.所以我将映射文件解析过程的分析内容从上一篇文章中抽取出来, ...

  7. MyBatis 源码分析 - 配置文件解析过程

    * 本文速览 由于本篇文章篇幅比较大,所以这里拿出一节对本文进行快速概括.本篇文章对 MyBatis 配置文件中常用配置的解析过程进行了较为详细的介绍和分析,包括但不限于settings,typeAl ...

  8. MyBatis 源码分析系列文章导读

    1.本文速览 本篇文章是我为接下来的 MyBatis 源码分析系列文章写的一个导读文章.本篇文章从 MyBatis 是什么(what),为什么要使用(why),以及如何使用(how)等三个角度进行了说 ...

  9. Mybatis源码分析之Cache二级缓存原理 (五)

    一:Cache类的介绍 讲解缓存之前我们需要先了解一下Cache接口以及实现MyBatis定义了一个org.apache.ibatis.cache.Cache接口作为其Cache提供者的SPI(Ser ...

随机推荐

  1. DHCP详解

    概述 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部网络或网络服务供应商自动分 ...

  2. css3的box-sizing--从此不用担心盒模型的不兼容

    前段时间阿里的面试问了关于盒模型的东西,众所周知,ie和标准盒模型是有着区别的.面试官问有没有什么办法可以改变盒模型的显示效果.答案是css3的box-sizing: 其可以取三个值: 1.值cont ...

  3. Extjs4 up 和down的用法

    Extjs4.x中,每个组件都新增加了两个方法up()和down()方法.这两个方法都是用来获取组件的,下面我们来看下up()方法和down()方法的官方解释. Extjs4.x中,新增加了两个方法u ...

  4. WEB前端资源集(一)

    做前端已经一年了,开发中换过很多开发工具,遇到bug到处求解,以及自学时到处找相关文章及教程,所以经过这么多的风波,我总结了一些对大家有帮助的网站,主题也将长期更新. 资源网站篇 CSDN:全球最大中 ...

  5. 基于LNMP的Zabbbix之PHP源码安装

    安装一些依赖的包 wget -c ftp://xmlsoft.org/libxml2/libxml2-2.7.8.tar.gz .tar.gz -C ../source/ cd ../source/l ...

  6. javascript之日期对象

    学习要点: 日期对象 将日期对象转换为字符串 将日期对象中的日期和时间转换为字符串 日期对象中的日期 日期对象中的时间 设置日期对象中的日期 设置日期对象中的时间 与毫秒相关的方法 一.日期对象 在j ...

  7. LPC1768的看门狗定时器使用

    void wwdg_init(void) { LPC_SC->PCLKSEL0 |= (3<<0);//分频数为八分频 LPC_WDT->WDCLKSEL &= ~(3 ...

  8. MySQL常用命令总结3

    id SMALLINT UNSIGNED [AUTO_INCREMENT] PRIMARY KEY, //把id定义为主键且自动排号,每张数据表只有一个主键,不能为NULL,确保记录唯一性 //省略a ...

  9. SocketChannel

    Java NIO 中的 SocketChannel 是一个连接到 TCP 网络套接字的通道.可以通过以下 2 种方式创建 SocketChannel: 打开一个 SocketChannel 并连接到互 ...

  10. 解决KVM中鼠标不同步问题

    VNCViewer中的鼠标走得总是比本地系统中的鼠标要慢,不同步,往往实体机中的鼠标都移出vnc窗口外边了,虚拟机中的鼠标指针还没移到需要点击的位置,操作起来很不方便. 起初的想法也是配置的问题,就按 ...