Mybatis源码解析(一):环境搭建

Mybatis源码系列文章

手写源码(了解源码整体流程及重要组件)

Mybatis源码解析(一):环境搭建

Mybatis源码解析(二):全局配置文件的解析

Mybatis源码解析(三):映射配置文件的解析

Mybatis源码解析(四):sql语句及#{}、${}的解析

Mybatis源码解析(五):SqlSession会话的创建

Mybatis源码解析(六):缓存执行器操作流程

Mybatis源码解析(七):查询数据库主流程

Mybatis源码解析(八):Mapper代理原理

Mybatis源码解析(九):插件机制

Mybatis源码解析(十):一级缓存和二级缓存



一、MyBatis架构原理&主要组件

MyBatis架构设计

在这里插入图片描述

mybatis架构四层作用:

  1. Api接口层:提供API增加、删除、修改、查询等接口,通过API接口对数据库进行操作。
  2. 数据处理层:主要负责sql的查询、解析、执行以及结果映射的处理,主要作用解析sql根据调用请求完成一次数据库操作
  3. 框架支撑层:负责通用基础服务支撑,包含事务管理、连接池管理、缓存管理等共用组件的封装,为上层提供基础服务支撑
  4. 引导层:引导层是配置和启动MyBatis配置信息的方法

MyBatis主要组件及其相互关系

在这里插入图片描述

组件介绍:

  • SqlSession:是Mybatis对外暴露的核心API,提供的对数据库的CRUD接口操作
  • Executor:执行器,由SqlSession调用,负责数据库操作以及Mybatis两级缓存的维护
  • StatementHandler:封装了JDBC Statement操作,负责对Statement的操作,如PrepareStatement参数的设置以及结果集的处理
  • PararmeterHandler:是StatementHandler内部一个组件,主要负责对ParameterStatement参数的设置
  • ResultSetHandler:是StatementHandler内部一个组件,主要负责对ResultSet结果集的处理,封装成目标对象返回
  • TypeHandler:用于Java类型与JDBC类型之间的数据转换,ParameterHandler和ResultSetHandler会分别使用到它的类型转换功能
  • MappedStatement:是对Mapper配置文件或Mapper接口方法上通过注解申明sql的封装
  • Configuration:Mybatis所有配置都统一由Configuration进行管理,内部由具体对象分别管理各自的小功能模块

二、源码环境搭建

1、源码地址及介绍

2、编写测试代码

核心配置文件sqlMapConfig.xml

<?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>

  <!--第一部分:数据源配置-->
  <environments default="development" >
    <environment id="development">
      <!-- 使用jdbc事务管理 -->
      <transactionManager type="JDBC" />
      <!-- 数据库连接池 -->
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.cj.jdbc.Driver" />
        <property name="url"
                  value="jdbc:mysql:///mybatis" />
        <property name="username" value="root" />
        <property name="password" value="123456789" />
      </dataSource>
    </environment>
  </environments>

  <!--第二部分:引入映射配置文件-->
  <mappers>
    <mapper resource="mapper/UserMapper.xml"></mapper>
    <!--<mapper class="mapper.UserMapper"></mapper>-->
    <!--<package name="mapper"/>-->
  </mappers>

</configuration>

实体类映射配置文件置UserMapper.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="user">

    <select id="findUserById" parameterType="int" resultType="com.xc.pojo.User"  >
        SELECT id,username FROM  user WHERE id = #{id}
    </select>

</mapper>

User类

@Data
public class User{
  // ID标识
  private Integer id;
  // 用户名
  private String username;
}

测试类:传统方式,非mapper代理

@Test
public void test1() throws IOException {
  InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");

  SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);

  SqlSession sqlSession = sqlSessionFactory.openSession();
  
  User user = sqlSession.selectOne("user.findUserById", 100);

  System.out.println(user);
  System.out.println("MyBatis源码环境搭建成功....");

  sqlSession.close();
}

输出结果:

DEBUG [main] - ==>  Preparing: SELECT id,username FROM user WHERE id = ?
DEBUG [main] - ==> Parameters: 100(Integer)
DEBUG [main] - <==      Total: 1
User(id=100, username=zhangsan)
MyBatis源码环境搭建成功....

进程已结束,退出代码0
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冬天vs不冷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值