MyBatisMyBatis 源码分析——介绍

作者第一次接触跟MyBatis框架是在二零零六年未的时候。可是那几个时候的她并不叫MyBatis,而是叫IBatis。二〇一〇年的时候改为当今的名字——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包中提到对应的源码。

MyBatis 1

下边的图形便是作者导入之后项目源码。事实对我们上学最快最实惠的应当是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概念。

 

网站地图xml地图