设为首页 加入收藏

TOP

day02-自己实现Mybatis底层机制-01(一)
2023-07-25 21:42:18 】 浏览:88
Tags:day02- Mybatis -01

自己实现Mybatis底层机制-01

主要实现:封装SqlSession到执行器+Mapper接口和Mapper.xml+MapperBean+动态代理Mapper的方法

1.Mybatis整体架构分析

对上图的解读:

1)mybatis 的核心配置文件

? mybatis-config.xml:进行全局配置,全局只能有一个这样的配置文件

? XxxMapper.xml 配置多个SQL,可以有多个 XxxMapper.xml 配置文件

2)通过 mybatis-config.xml 配置文件得到 SqlSessionFactory

3)通过 SqlSessionFactory 得到 SqlSession,用 SqlSession 就可以操作数据了

4)SqlSession 底层是 Executor(执行器),有两个重要的实现类

image-20230222211659114

5)MappedStatement 是通过 XxxMapper.xml 来定义的,用来生成 statement 对象

6)参数输入执行并输出结果集,无需动手判断参数类型和参数下标位置,且自动将结果集映射为Java对象

2.搭建开发环境

(1)创建maven项目

image-20230223184352888

(2)在pom.xml 中引入必要的依赖

<!--指定编译器/source/target的版本-->
<properties>
    <project.build.sourdeEncoding>UTF-8</project.build.sourdeEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <java.version>1.8</java.version>
</properties>

<!--引入必要的依赖-->
<dependencies>
    <!--dom4j-->
    <dependency>
        <groupId>dom4j</groupId>
        <artifactId>dom4j</artifactId>
        <version>1.6.1</version>
    </dependency>
    <!--mysql-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.49</version>
    </dependency>
    <!--lombok-简化entity/javabean/pojo 的开发-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.4</version>
    </dependency>
    <!--junit-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
</dependencies>

(3)创建数据库和表

-- 创建数据库
CREATE DATABASE `li_mybatis`;
USE `li_mybatis`;
-- 创建monster表
CREATE TABLE `monster`(
`id` INT NOT NULL AUTO_INCREMENT,
`age` INT NOT NULL,
`birthday` DATE DEFAULT NULL,
`email` VARCHAR(255) NOT NULL,
`gender` TINYINT NOT NULL,-- 1 male,0 female
`name` VARCHAR(255) NOT NULL,
`salary` DOUBLE NOT NULL,
PRIMARY KEY(`id`)
)CHARSET=utf8
-- insert
INSERT INTO `monster` VALUES(NULL,200,'2000-11-11','nmw@qq.com',1,'牛魔王',8888);
image-20230223185346450

3.设计思路

image-20230223191810930

解读:

  1. 传统的方式操作数据库
    1)得到 MySession 对象
    2)调用 MyExecutor 的方法完成操作
    3)MyExecutor 的连接是从 MyConfiguration 获取

  2. Mybatis 操作数据库的方式
    1)得到 MySession 对象
    2)不直接调用 MyExecutor 的方法
    3)而是通过 MyMapperProxy 获取 Mapper 对象
    4)调用 Mapper 的方法,完成对数据库的操作
    5)Mapper 最终还是动态代理方式,使用 MyExecutor 的方法完成操作
    6)这里比较麻烦的就是 MyMapperProxy 的动态代理机制如何实现

4.任务阶段1

阶段1任务:通过配置文件,获取数据库连接

4.1分析

image-20230223192425061

4.2代码实现

(1)在src 的 resources目录下创建 my-config.xml,模拟原生的 mybatis 配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<database>
    <!--配置连接数据库的信息-->
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/li_mybatis?
    useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
    <property name="username" value="root"/>
    <property name="password" value="123456"/>
</database>

(2)创建 MyConfiguration 类,用来读取xml文件,建立连接

因为这里重点是实现 Mybatis 的底层机制,为了简化操作

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇如何通过Java应用程序将 PDF转为W.. 下一篇一文详解 Netty 组件

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目