Mybatis源码解析(一)

开课吧开课吧锤锤2021-03-03 10:26

    Java是一门全球范围内使用最广泛的,面向对象的编程语言。Java语言具有功能强大和简单易用两个特征,它作为面向对象编程语言系列的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

    一、前言

    本文旨在mybatis源码解析,将整个mybatis运行原理讲解清楚,

    本文使用的mybatis版本:3.2.8,

    jdk版本:1.8

    数据库版本:mysql5.6,数据库脚本如下,此外在源文件为:resources/mybatis.sql

    --导出mybatis的数据库结构

    CREATEDATABASEIFNOTEXISTS`mybatis`/*!40100DEFAULTCHARACTERSETutf8*/;

    USE`mybatis`;

    --导出表mybatis.user结构

    CREATETABLEIFNOTEXISTS`user`(

    `id`int(11)NOTNULLAUTO_INCREMENT,

    `name`varchar(50)NOTNULL,

    `age`int(11)NOTNULL,

    `sex`int(11)NOTNULL,

    PRIMARYKEY(`id`)

    )ENGINE=MyISAMAUTO_INCREMENT=6DEFAULTCHARSET=utf8;

    --正在导出表mybatis.user的数据:3rows

    DELETEFROM`user`;

    INSERTINTO`user`(`id`,`name`,`age`,`sex`)VALUES

    (1,'张三',42,0),

    (2,'李四',15,0),

    (3,'王五',45,0),

    (4,'赵六',47,0),

    (5,'孙艳',26,1);

    本文主要是探究mybatis运行原理,所以示例项目非常简单,目录结构如下:

Java

    mybatis主配置文件mybatis-config.xml内容如下:

    <?xmlversion="1.0"encoding="UTF-8"?>

    <!DOCTYPEconfiguration

    PUBLIC"-//mybatis.org//DTDConfig3.0//EN"

    "http://mybatis.org/dtd/mybatis-3-config.dtd">

    <configuration>

    <propertiesresource="dbconfig.properties"></properties>

    <environmentsdefault="development">

    <environmentid="development">

    <transactionManagertype="JDBC"/>

    <dataSourcetype="POOLED">

    <propertyname="driver"value="${jdbc.driver}"/>

    <propertyname="url"value="${jdbc.url}"/>

    <propertyname="username"value="${jdbc.username}"/>

    <propertyname="password"value="${jdbc.password}"/>

    </dataSource>

    </environment>

    </environments>

    <mappers>

    <mapperresource="UserMapper.xml"/>

    </mappers>

    </configuration>

    UserMapper.xml的内容如下:

    <?xmlversion="1.0"encoding="UTF-8"?>

    <!DOCTYPEmapper

    PUBLIC"-//mybatis.org//DTDMapper3.0//EN"

    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

    <mappernamespace="com.cl.mybatis.learn.mapper.UserMapper">

    <selectid="selectById"resultType="com.cl.mybatis.learn.user.User">

    select*fromuserwhereid=#{id}

    </select>

    </mapper>

    UserMapper.java内容如下:

    packagecom.cl.mybatis.learn.mapper;

    importcom.cl.mybatis.learn.user.User;

    /**

    *@Author:chengli

    *@Date:2018/11/2412:08

    */

    publicinterfaceUserMapper{

    UserselectById(intid);

    }

    Mybatis001.java主函数内容如下:

    packagecom.cl.mybatis.learn;

    /**

    *@Author:chengli

    *@Date:2018/11/2412:00

    */

    publicclassMybatis001{

    publicstaticvoidmain(String[]args)throwsIOException{

    Stringresource="mybatis-config.xml";

    InputStreaminputStream=Resources.getResourceAsStream(resource);

    SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream);

    SqlSessionsession=sqlSessionFactory.openSession();

    try{

    UserMappermapper=session.getMapper(UserMapper.class);

    System.out.println(mapper.selectById(1));

    }finally{

    session.close();

    }

    }

    }

    其他内容过于简单,详情请移步github下载源代码查看。

    从main函数的运行步骤,本文将主要通过四个部分探讨mybatis的原理:

    1、SqlSessionFactory的创建

    2、SqlSession的创建

    3、UserMapper代理的生成

    4、数据库查询操作执行流程

    以上内容由开课吧老师左撇子小哥哥提供,更多Java教程尽在开课吧广场Java教程频道。

有用
分享