『手撕 Mybatis 源码』01 - 基本原理与搭建

MyBatis的架构设计

在这里插入图片描述

  1. Api接口层:提供API 增加、删除、修改、查询等接口,通过API接口对数据库进行操作
  • 例如下面这些操作
sqlSession.selectOne(statementId, param);
mapperProxy.findByCondition(param);
  1. 数据处理层:解析sql根据调用请求完成一次数据库操
  2. 框架支撑层:负责通用基础服务支撑
  • 例如事务管理、连接池管理、缓存管理等共用组件的封装
  1. 引导层:引导层是配置和启动 MyBatis 配置信息的方式
  • 例如提供 XML、或者 Java API 的配置方式

MyBatis主要组件及其相互关系

在这里插入图片描述

  1. SqlSession:是 Mybatis 对外暴露的核心 API,提供了对数据库的 CRUD 操作接口
  • 例如
sqlSession.selectOne(statementId, param);
  1. Executor:负责数据库操作以及 Mybatis 两级缓存的维护
  2. StatementHandler:封装了JDBC Statement操作,负责对Statement的操作,例如 PrepareStatement 参数的设置以及结果集的处理
  • 例如下面代码,其中 sql 是从 BoundSql 中获取过来的
connection.prepareStatement(sql)
  1. ParameterHandler:内部组件,负责对 ParameterStatement 参数的设置
  2. ResultSetHandler:内部组件,负责对 ResultSet 结果集的处理,封装成目标对象返回
  3. TypeHandler:用于 Java 类型与 JDBC 类型之间的数据转换
  4. MappedStatement:是对 Mapper 配置文件或 Mapper 接口方法上通过注解申明 SQL 的封装
  5. Configuration:Mybatis 所有配置都统一由 Configuration 进行管理,内部由具体对象分别管理各自的小功能模块

源码环境搭建

  1. 下载源码(用的是 3.5.7)
  • https://github.com/mybatis/mybatis-3
  1. 源码目录说明
    在这里插入图片描述
  2. mysql 导入表
CREATE TABLE `user` (
  `id` bigint(20) NOT NULL COMMENT '主键ID',
  `name` varchar(30) DEFAULT NULL COMMENT '姓名'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  1. 初步搭建
    在这里插入图片描述
  • 创建 sqlMapConfig.xml
<!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://127.0.0.1:3306/mb_mybatis"/>
        <property name="username" value="root" />
        <property name="password" value="root" />
      </dataSource>
    </environment>
  </environments>

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

</configuration>
  • 创建 UserMapper.xml
<!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.itheima.pojo.User">
    SELECT id, name FROM  user WHERE id = #{id}
  </select>

</mapper>
  • 创建 User
@Data
public class User {
  // ID标识
  private Long id;
  // 用户名
  private String name;
}
  • 创建测试类,然后运行成功即可
public class MybatisTest {

  @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", 1);
    System.out.println(user);
    System.out.println("MyBatis源码环境搭建成功...");
    sqlSession.close();
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值