上一篇,我们讲过DAO层接口,是怎么被mybatis自动实现的。DAO层接口,为什么能操作数据库
这篇,我们继续下去,讲一讲DAO层接口中selectById的流程。
一、准备工作
和上一篇文章中,用到的代码几乎没有区别,只是Main类有所调整
public class Main {
public static SqlSession getSqlSession() throws IOException {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
return sqlSessionFactory.openSession();
}
public static void main(String[] args) throws IOException {
TestDAO testDAO = getSqlSession().getMapper(TestDAO.class);
Test test = testDAO.selectById(1);
testDAO.testDefaultMethod();
//类文件是缓存在java虚拟机中,我们将类文件打印到文件中,便于查看
// generateProxyFile("F:/TestDAOProxy.class");
}
private static void generateProxyFile(String path){
byte[] classFile = ProxyGenerator.generateProxyClass("$Proxy0", new Class<?>[]{TestDAO.class});
try(FileOutputStream fos = new FileOutputStream(path)) {
fos.write(classFile);
fos.flush();
System.out.println("代理类class文件写入成功");
} catch (Exception e) {
System.out.println("写文件错误");
}
}
}
二、开始debug
1、起始位置
从main方法中的Test test = testDAO.selectById(1);这一行开始debug。探究selectById的流程
2、UML图
这里先给出一个UML图,照着这个UML进行讲解。当然这里UML图太繁琐了,根本记不住,