手把手教你看Mybatis源码(一),源码阅读环境搭建

我这里采用的是mysql数据库,当然你用其他数据库也一样。

一、数据库的建立

建表语句:


DROP TABLE IF EXISTS `payment`;
CREATE TABLE `payment`  (
  `id` bigint(20) NOT NULL,
  `serial` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of payment
-- ----------------------------
INSERT INTO `payment` VALUES (1, '2323');
INSERT INTO `payment` VALUES (36, '121212');

SET FOREIGN_KEY_CHECKS = 1;

二、构建maven项目

这个就不行了,发下目录。(maven项目不会构建,那目前不适合看源码,把mybatis用熟练了再说)

2.1、项目结构

手把手教你看Mybatis源码(一),源码阅读环境搭建_第1张图片

2.2、pom文件

依赖,我这里用的是3.5.0的版本

	<dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.18</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.0</version>
        </dependency>
    </dependencies>

2.3、相关代码

2.3.1 mybatis配置文件



<configuration>
    <environments default="development">
        <environment id="development">
            <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/db2019?serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            dataSource>
        environment>
    environments>
    <mappers>
        <mapper resource="mapper/PaymentMapper.xml"/>
    mappers>
configuration>

2.3.2 entity 文件

package com.fxy.mybatis.entity;

public class Payment {
        private Long id;
        private String serial;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getSerial() {
        return serial;
    }

    public void setSerial(String serial) {
        this.serial = serial;
    }

    @Override
    public String toString() {
        return "Payment{" +
                "id=" + id +
                ", serial='" + serial + '\'' +
                '}';
    }
}

2.3.3、mapper接口文件

package com.fxy.mybatis.reposity;

import com.fxy.mybatis.entity.Payment;

public interface PaymentMapper {

    Payment getPayment(int id);
}

2.3.4、mapper.xml配置文件



<mapper namespace="com.fxy.mybatis.reposity.PaymentMapper">
    <select id="getPayment" resultType="com.fxy.mybatis.entity.Payment">
        select * from payment where id = #{id}
    select>
mapper>

2.3.5、主函数入口文件

package com.fxy.mybatis;

import com.fxy.mybatis.entity.Payment;
import com.fxy.mybatis.reposity.PaymentMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class OrgionCodeRead {

    public static void main(String[] args) throws IOException {
        //1\读取配置文件
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //2、初始化mybatis,创建SqlSessionFactory类实例
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //3、创建Session实例
        SqlSession session = sqlSessionFactory.openSession();
        Payment payment = session.selectOne("com.fxy.mybatis.reposity.PaymentMapper.getPayment",36);
        PaymentMapper paymentMapper = session.getMapper(PaymentMapper.class);
        Payment payment1= paymentMapper.getPayment(1);
        System.out.println(payment.toString());
        System.out.println(payment1.toString());

    }
}

三、执行结果,即简单调试说明

手把手教你看Mybatis源码(一),源码阅读环境搭建_第2张图片
证明我们搭的环境没问题,接下来便是一步步调试,阅读源码的过程。
注意事项
1、请对mybatis的使用有一定的了解
2、带有目的的去阅读源码,比如说我们配置文件是如何被获取的,又在哪里被使用? mapper接口和mapper.xml 如何关联在一起?接口里的方法和xml里的sql是怎么绑定在一起?输入参数,和输出参数又是怎么转换的呢?输入参数是在哪里被替换为sql语句中的参数?我们没有写mapper接口的实现,那接口里的方法是怎么被实现调用的呢?等等很多问题,带着问题去源码中寻找他们是怎么解决的,会有比较好的效果,要不然阅读起来比较枯燥,漫无目的,会忽略很多细节。
3、阅读源码的时候也要对mybatis整个框架有一定的了解,从宏观—到 微观—再总结—从微观到宏观。多看几次会有个更深的理解。

下一节将对mybatis整个框架进行一个介绍

你可能感兴趣的:(手把手教你看Mybatis源码)