MyBatis 源码分析——介绍

笔者第一次接触跟MyBatis框架是在2009年未的时候。不过那个时候的他并不叫MyBatis,而是叫IBatis。2010年的时候改成如今的名字——MyBatis。这几年过去了,对于笔者来说有一点陌生了。并且那个时候他也没有这么出名。hibernate占了大部分市场。虽然笔者早年的时候查看过他的源码,可是并无很深刻去理解他。主要的缘由是由于当时我还在看hibernate的源码。太累了因此就没有去认真的理解。如今笔者想要从新在来看一篇关于他的源码并增强对他的理解。也是对本身过程的一种回归吧。html

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

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

学习环境sql

MyBatis源码:mybatis-3-mybatis-3.4.1.数据库

数据库:SQL SERVER 2008性能优化

开发工具:Ecilpse,Maven网络

Java:1.8session

开发环境mybatis

官网上也有写一个篇关于入门的文章。 只是讲的可能简单了一点。可是这并非没有任何做用。笔者用的是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接口的工厂类吧。固然这还要回头看一下源码才能肯定。在这里顺便给你们推荐一个架构交流群:617434785,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源。相信对于已经工做和遇到技术瓶颈的码友,在这个群里会有你须要的内容。

在实例的开发过程当中,咱们必定会用到一个用于配置对象实体相关的配置文件。就是上面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概念。