Mybatis源码解析之四大对象

一 环境准备

以一个最简单的例子来看看Mybatis的运行流程以及Mybatis四大对象起了什么作用。

Mybatis源码解析之四大对象_第1张图片

Employee.java

package com.lxj.bean;

public class Employee {

	private Integer id;
	private String lastName;
	private String email;
	private String gender;

	public Integer getId() {
		return id;
	}

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

	public String getLastName() {
		return lastName;
	}

	public void setLastName(String lastName) {
		this.lastName = lastName;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getGender() {
		return gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}

	@Override
	public String toString() {
		return "Employee [id=" + id + ", lastName=" + lastName + ", email=" + email + ", gender=" + gender + "]";
	}

}

EmployeeMapper.java

package com.lxj.mapper;

import com.lxj.bean.Employee;

public interface EmployeeMapper {
	  public Employee getEmpById(Integer id);
}

EmployeeMapper.xml




	

mybatis-config.xml



 
    
    
        
       
    
	
		
			
			
				
				
				
				
			
		
	
	
        
		
	

 

二  测试

测试代码如下:

public class MybatisTest {

	@Test
	public void testMybatisSource() throws IOException {
		SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
		SqlSession openSession = sqlSessionFactory.openSession();
		try {
			EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
			Employee employee = mapper.getEmpById(1);
			System.out.println(employee);
		}finally {
			openSession.close();
		}
	
	}

	private SqlSessionFactory getSqlSessionFactory() throws IOException {
		String resource = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		return sqlSessionFactory;
	}

}

Mybatis源码解析之四大对象_第2张图片

可以看到运行一切正常,下面就开始从获取SqlSessionFactory开始打一个断点:

Mybatis源码解析之四大对象_第3张图片

直接 Step Into

Mybatis源码解析之四大对象_第4张图片

Mybatis源码解析之四大对象_第5张图片

Mybatis源码解析之四大对象_第6张图片

Mybatis源码解析之四大对象_第7张图片

Mybatis源码解析之四大对象_第8张图片

Mybatis源码解析之四大对象_第9张图片

Mybatis源码解析之四大对象_第10张图片

Mybatis源码解析之四大对象_第11张图片

Mybatis源码解析之四大对象_第12张图片

Mybatis源码解析之四大对象_第13张图片

Mybatis源码解析之四大对象_第14张图片

Mybatis源码解析之四大对象_第15张图片

Mybatis源码解析之四大对象_第16张图片

Mybatis源码解析之四大对象_第17张图片

 

Mybatis源码解析之四大对象_第18张图片

Mybatis源码解析之四大对象_第19张图片

Mybatis源码解析之四大对象_第20张图片

Mybatis源码解析之四大对象_第21张图片

Mybatis源码解析之四大对象_第22张图片

Mybatis源码解析之四大对象_第23张图片

Mybatis源码解析之四大对象_第24张图片

Mybatis源码解析之四大对象_第25张图片

Mybatis源码解析之四大对象_第26张图片

Mybatis源码解析之四大对象_第27张图片

Mybatis源码解析之四大对象_第28张图片

Mybatis源码解析之四大对象_第29张图片

Mybatis源码解析之四大对象_第30张图片

Mybatis源码解析之四大对象_第31张图片

Mybatis源码解析之四大对象_第32张图片

StatementHandler 借助ParameterHandler设置参数,借助ResultSetHandler处理结果

Mybatis源码解析之四大对象_第33张图片

三 源码分析

Mybatis源码解析之四大对象_第34张图片

StatementHandler:处理sql语句预编译,设置参数等相关工作;

ParameterHandler:设置预编译参数用的

ResultSetHandler:       处理结果集

TypeHandler:在整个过程中,进行数据库类型和javaBean类型的映射

时序图如下:

Mybatis源码解析之四大对象_第35张图片

Mybatis源码解析之四大对象_第36张图片

Mybatis源码解析之四大对象_第37张图片

Mybatis源码解析之四大对象_第38张图片

四 总结

    Mybatis基本运行流程就到这里,自己过一遍源码比看几遍更有效率, 如果有什么问题请留言。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(后端,java,网站)