MyBatis源码图

 

1、SqlMapperConfig.xml配置i文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    <settings>
        <setting name="cacheEnabled" value="true"/>
        <setting name="lazyLoadingEnabled" value="false"/>
        <!--<setting name="logImpl" value="STDOUT_LOGGING"/> <!– 打印日志信息 –>-->
    </settings>

    <typeAliases>
        <typeAlias type="com.luo.dao.UserDao" alias="User"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/> <!--事务管理类型-->
            <dataSource type="POOLED">
                <property name="username" value="luoxn28"/>
                <property name="password" value="123456"/>
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://192.168.1.150/ssh_study"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="userMapper.xml"/>
    </mappers>

</configuration>

 2 查询

package com.xiangwen.studymybaits;

import com.xiangwen.dao.Student;
import com.xiangwen.dao.StudentDao;
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 org.junit.Test;

import java.io.InputStream;

public class MyTest2 {
    @Test
    public void test1()throws Exception{
        String resource = "sqlMapperConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 通过工厂得到SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();

        // 通过SqlSession操作数据库
        // 第一个参数:映射文件中statement的id,等于=namespace+"."+statement的id
        // 第二个参数:指定和映射文件中所匹配的parameterType类型的参数
        // sqlSession.selectOne结果 是与映射文件中所匹配的resultType类型的对象
        // selectOne查询出一条记录
        StudentDao dao=sqlSession.getMapper(StudentDao.class);
        MyClass myClass=dao.selectClass(2);
        System.out.println(myClass);
        // 释放资源
        sqlSession.close();
    }
}

  

 

 

 

 

 

 2、执行到

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream)
1)解析configuration标签里的内容

 

 

 2)分别解析标签里的内容,存放到configuration对象里面去

 

 

 3)引入mapper文件有4种方式package,resource,url,class

 

 

 4)返回一个DefaultSqlsessionFactory工厂,将configuration对象传进去

 

 3、执行到,SqlSession sqlSession = sqlSessionFactory.openSession();

从configuration得到事务配置,

 

 有四种execute,counfiguration对象里面executorType默认是simple,因为一级缓存开关cacheEnabled是开启的,上面最终返回的是缓存处理器

 

 

 

 4、当执行到 StudentDao dao=sqlSession.getMapper(StudentDao.class);

通过MapperProxy实现了jdk代理类给接口生成代理对象,因为接口没有实现类,逻辑都在invoke方法里面

 

 

 5、当运行到  MyClass myClass=dao.selectClass(2);

1)进入invoke方法

 

 2)里面有个switch catch判断具体是哪种操作

 

 

 

 3)

posted @ 2021-05-30 22:12  傲云萧雨  阅读(43)  评论(0编辑  收藏  举报