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)