zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    archlinux .bash_history
    Ubuntu环境下挂载新硬盘
    软碟通 UltraISO U启替代品 Win32DiskImager 无设备 无盘符 无u盘 无优盘 解决方案 之diskpart
    delphi Integer overflow
    MSBuild Tools offline
    delphi synedit免费的拼写检查器dll
    git 自定义命令行
    lua编译
    gcc ar
    Windows Subsystem for Linux (WSL)挂载移动硬盘U盘 卸载 c d 盘
  • 原文地址:https://www.cnblogs.com/wenwenzuiniucha/p/14829378.html
Copyright © 2011-2022 走看看