zoukankan      html  css  js  c++  java
  • Mybatis工作原理

    mybatis运行原理图:

    mybatis运行流程:

    public SqlSession getSession() throws IOException {
        /**
         * 1、根据xml配置文件(全局配置文件),创建一个sqlSessionFactory对象
         */
        String resource = "src/main/resources/mybatis-config.xml";
        Reader reader = Resources.getResourceAsReader(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);①
    
        //2、获取sqlSession实例,能直接执行已经映射的sql语句
        SqlSession sqlSession = sqlSessionFactory.openSession();②
        return sqlSession;
    }
    
    @Test
    public void test1() throws IOException {
        //获取sqlSession对象
        SqlSession sqlSession = getSession();
        try {
            //获取接口的实现类
            //为接口创建一个代理对象,代理对象执行下面的操作
            EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);③
            Employee employee =  mapper.getEmployeeById(1);④
            System.out.println(employee);
        } finally {
            //关闭sqlSession对象
            sqlSession.close();
        }
    }

    1、首先根据全局配置文件创建SqlSessionFactory对象

    2、通过SqlSessionFactory获得SqlSession对象

    3、获取接口的代理对象(MapperProxy)

    4、执行增删改方法


    接下来探究每一处都做了些什么

    一、根据配置文件创建SqlSessionFactory


    其中的Configuration包含了所有配置文件的详细信息

    总结:把配置文件的信息解析保存在Configuration对象中,返回了包含Configuration的DefaultSqlSession对象。

    二、openSesion获取SqlSession对象



    返回SqlSession的实现类DefaultSqlSession,里面包含了Executor和Configuration,Executor在这一步会被创建。

    三、getMapper获取到接口的代理对象

    getMapper使用了MapperProxyFactory创建了一个MapperProxy的代理对象,包代理对象中包含了

    DefaultSqlSession(Executor)

    四、查询的实现(增删改查的实现)


    流程总结: 




    大总结:

    1、根据配置文件( 全局的和sql映射文件)初始化Configuration对象

    2、创建一个DefaultSqlSession对象,它里面包含Configuration以及Executor(根据全局配置文件中的defaultExecutorType创建出对应的Executor) 

    3、DefaultSqlSession.getMapper( )拿 到mapper接口对应的MapperProxy

    4、MapperProxy里面有( DefaultSqlSession)

    5、执行增删改查方法:

        1)、调用DefaultSqlSession的增删改查(Executor) 

        2)、会创建一个StatementHandler对象( 同时也会创建出ParameterHandler和ResultSetHandler)

        3)、调用StatementHandler预编译参数以及设置参数值,使用ParameterHandler来给sql设置参数

        4)、调用StatementHandler的增删改查方法

        5)、ResultSetHandler封装结果

  • 相关阅读:
    jsp
    session
    cookie
    异常
    静态导入 可变参数与collectiions集合工具 集合嵌套
    HashMap和LinkedHashMap
    map集合
    匿名对像,,,内部类
    电脑版校网登录助手
    360舵机与180舵机
  • 原文地址:https://www.cnblogs.com/huangzhe1515023110/p/9276078.html
Copyright © 2011-2022 走看看