Mybatis底層源碼分析與實現2

核心配置文件mybatis.cfg.xml
在裏面配置
util MyBatisUtil.java
package com.yxxy.mybatis.util;

import java.io.InputStream;

public class MyBatisUtil{
private static SqlSessionFactory sqlSessionFactory=null;
private static SqlSession sqlSession=null;
private static String resource=null;

public static SqlSessionFactory getSqlSessionFactory {
	resource="mybatis.cfg.xml";
	InputStream inputStream=null;
	try{
		inputStream=Resources.getResourceAsStream(resource);
		sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
    }catch(Exception e){
    	e.printStackTrace();
    }
    return sqlSessionFactory;
   }

mapper UserMapper.java

package com.yxxy.mybatis.mapper;

import com.yxxy.mybatis.entiey.User;

public interface UserMapper{

	User selectUserById(Integer id);
}

使用mybatis框架時根本不需要自己創建實現類,只有接口
在這裏插入圖片描述

test Test.java

package com.yxxy.mybatis.test;

import org.apache.ibatis.session.SqlSession;

public class Test{
	public static void main(String[] args){
		SqlSession sqlsession=MyBatisUtil.getSession();//打一個斷點,通過debug模式啓動
		UserMapper userMapper=sqlsession.getMapper(UserMapper.class);
		User user=userMapper.selectUserById(1);
		System.out.println(user);
		MyBatisUtil.closeSession();
	}
}

SqlSession sqlsession=MyBatisUtil.getSession();//打一個斷點,通過debug模式啓動

UserMapper userMapper=sqlsession.getMapper(UserMapper.class);//使用mybatis框架時根本不需要自己創建實現類,只有接口

首先要讀取配置文件mybatis.cfg.xml和UserMapper.xml
一個加載了數據庫連接信息,一個讀取我們編寫的SQL信息
在這裏插入圖片描述

分析完源碼後,自己寫一個這樣的框架
1、解析配置文件–UserMapper.xml的解析工具類
硬編碼:直接寫死在那裏
2、實現動態代理–MapperProxy
3、加載代理對象並執行SQL–SqlSession
4、封裝JDBC–Executor接口和它的實現SimpleExecutor
5、mybatis的mapper接口–UserMapper類
6、映射數據庫實體–User類

UserMapper.xml
namespace
map key-value

MapperProxy
實現的invokahandler
invoke方法method,args

SqlSession
T getMapper
T selectOne(String sql,)

Executor
query

總共八個類實現
在這裏插入圖片描述

新建項目Java Project mybatis_hello
->將mysql的jar包導入
->新建包com.yxxy.mybatis.entity
User.java
UserMapperXml.java
public class UserMapperXml{
//模擬UserMapper.xml的命名空間
public static final String namespace=“com.yxxy.mybatis.mapper.UserMapper”;
public static Map<String,String> map=new HashMap<>();

static{//模擬

->新建包com.yxxy.mybatis.executor
Excutor.java
public class Excutor{

SimpleExcutor.java
封裝JDBC實現CURD

public query(String sql,Object parameter){
Connection connection=null;
PrepareStatement prepared

private Connection getConnection(){
String driver="";
String url="";
String username="";
String password="";
Class.forName(driver);
Connection connection

->新建包com.yxxy.mybatis.mapper
UserMapper.java
public interface UserMapper{
User selectUserById(Integer id);

MapperProxy.java
public class MapperProxy implements InvocationHandler{
private SqlSession sqlSession

public Objecy invoke(Object proxy,Method method,Ob){
if(){
String sql=UserMapperXml.map.get();

session SqlSession.java
加載代理對象執行SQL的類
public class SqlSession{
private Executor executor=new SimpleExecutor();
public T selectOne(String statement,Object patameter){
return executor.query(statement,parameter);
}
public T getMapper(Class clazz){
return Proxy.newIn

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章