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)

  • 相关阅读:
    tcpdump教程入门
    ubuntu编译运行xv6
    sed学习笔记
    词典及容错处理
    [译]SpringMVC自定义验证注解(SpringMVC custom validation annotations)
    git指令集合
    linux绝大部分命令集合(自己需要的时候方便查找)
    django中使用AJAX时如何获取表单参数(按钮携带参数)
    正则表达式基础
    linux备份mysql文件并恢复的脚本,以及其中出现的错误:ERROR: ASCII '' appeared in the statement
  • 原文地址:https://www.cnblogs.com/wenwenzuiniucha/p/14829378.html
Copyright © 2011-2022 走看看