MyBatis源码实现之环境准备

一、引言

  • 作为一名Java高级开发人员,阅读源码的功底是其重要的基础技能。除了Spring系列的源码之外,就是MyBatis的源码阅读,好了,废话不多说直接开干。
  • 声明:这里我使用的3.4.6版本。不同版本之间代码略有差异

二、搭建

1.创建源码阅读项目(Maven方式)

1.1 以Maven方式创建项目

在这里我使用的idea创建的(过程略)。效果如下:
MyBatis源码实现之环境准备_第1张图片

2.导入MyBatis相关源码

2.1 下载官方源代码

  • 下载地址:Github MyBatis 官方源码地址
  • 以zip方式下载后进行解压。解压后如下:
    MyBatis源码实现之环境准备_第2张图片

2.2 将源代码导入项目中

  • 将解压后的src\main\java里面的:从org开始,把源文件拷贝到第一步中创建的项目中(以java为根文件),拷贝完毕后如下:
    MyBatis源码实现之环境准备_第3张图片
  • 将mybatis-3-mybatis-3.4.6源码包中pom.xml中的依赖拷贝到源码项目的pom.xml中去,并添加上MySql连接的相关依赖。拷贝后代码如下:


    4.0.0

    com.gyoomi
    Learning-MyBatis
    1.0-SNAPSHOT

    
        UTF-8
        UTF-8
        1.8
    

    
        
            ognl
            ognl
            3.1.16
            compile
            true
        
        
            org.javassist
            javassist
            3.22.0-GA
            compile
            true
        
        
            org.slf4j
            slf4j-api
            1.7.25
            true
        
        
            org.slf4j
            slf4j-log4j12
            1.7.25
            true
        
        
            log4j
            log4j
            1.2.17
            true
        
        
        
            org.apache.logging.log4j
            log4j-core
            2.3
            true
        
        
            commons-logging
            commons-logging
            1.2
            true
        
        
            cglib
            cglib
            3.2.5
            true
        

        
        
            org.junit.vintage
            junit-vintage-engine
            4.12.2
            test
        
        
            org.hsqldb
            hsqldb
            2.3.5 
            test
        
        
            org.apache.derby
            derby
            10.12.1.1
            test
        
        
            org.mockito
            mockito-core
            2.12.0
            test
        
        
        
            commons-dbcp
            commons-dbcp
            1.4
            test
        
        
            org.jboss.spec.javax.transaction
            jboss-transaction-api_1.2_spec
            1.0.1.Final
            test
        
        
            org.apache.velocity
            velocity
            1.7
            test
        
        
        
            org.postgresql
            postgresql
            42.1.4.jre6
            test
        
        
            org.assertj
            assertj-core
            1.7.1 
            test
        
        
            eu.codearte.catch-exception
            catch-exception
            1.4.4
            test
        
        
            ru.yandex.qatools.embed
            postgresql-embedded
            2.5
            test
        

        
        
            mysql
            mysql-connector-java
            5.1.6
        

        
            junit
            junit
            4.11
            test
        
    

3.创建测试用例

3.1 创建User表

CREATE TABLE `t_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `deptment` varchar(255) DEFAULT NULL,
  `phone` varchar(255) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `status` int(11) DEFAULT NULL,
  `create_date` datetime DEFAULT NULL,
  `remark` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4;

3.2 创建UserMapper接口和实现类

  • UserMapper接口
public interface UserMapper {
	
    User save(User user);

}

  • UserMapper接口实现类
public class UserMapperImpl implements UserMapper {

    private static final String NAME_SPACE = "UserMapper.";
    private static SqlSessionFactory ssf;
    private static Reader reader;

    static {
        try {
            reader = Resources.getResourceAsReader("mybatis-config.xml");
            ssf = new SqlSessionFactoryBuilder().build(reader);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public User save(User user) {
        SqlSession sqlSession = ssf.openSession();
        int rows = sqlSession.insert(NAME_SPACE + "save", user);
        sqlSession.commit();
        if (rows > 0) {
            return user;
        } else {
            return null;
        }
    }
}

3.3 创建MyBatis-config.xml和UserMapper.xml文件

MyBatis-config.xml:





    
        
        
        
    

    
        
    

    
        
            
            
                
                
                
                
            
        
    

    
        
    

UserMapper.xml:





    
        
            SELECT LAST_INSERT_ID();
        
        INSERT INTO t_user
            (id, user_name, password, deptment, phone, email, status, create_date, remark)
        VALUES
            (null, #{userName}, #{password}, #{deptment}, #{phone}, #{email}, #{status}, #{createDate}, #{remark})
    

3.4 创建测试的Main方法

创建Main.java(其实这里是不规范的,一般是要写JUnit单元测试的。)

public class Main {
    public static void main(String[] args) {
        UserMapper userMapper = new UserMapperImpl();
        User user = new User();
        user.setPassword("123");
        user.setCreateDate(new Date());
        user.setDeptment("研发部门");
        user.setEmail("[email protected]");
        user.setStatus(1);
        user.setUserName("张三");
        user.setPhone("13888888888");
        user.setRemark("系统默认用户");
        User userToReturn = userMapper.save(user);
        System.out.println(userToReturn);
    }
}

4.测试环境

执行完上述3步后,整体的代码结构如下:
MyBatis源码实现之环境准备_第4张图片
执行Main方法后,打开数据看到t_user表新增了一条记录。
MyBatis源码实现之环境准备_第5张图片
支持MyBatis的源码阅读的环境搭建并测试完毕。下面就让我们开始畅快地阅读源码吧!

Github地址:MyBatis源码

你可能感兴趣的:(MyBatis源码实现,MyBatis源码实现)