Mybatis源码学习
想要自己走一下试试。
public static void main(String[] args) { SqlSession sqlSession = null; try { InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 查询数据库内容 sqlSession = sqlSessionFactory.openSession(); Blog blog = sqlSession.selectOne("me.aihe.dao.BlogMapper.selectBlog",1); System.out.println(blog); } catch (IOException e) { e.printStackTrace(); }finally { if (sqlSession != null) { sqlSession.close(); } } }
//1.读取配置文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
Resources类
public static InputStream getResourceAsStream(String resource) throws IOException {
//classLoader默认为空
return getResourceAsStream((ClassLoader)null, resource);
}
public static InputStream getResourceAsStream(ClassLoader loader, String resource) throws IOException {
//调用ClassLoaderWrapper读取配置文件
InputStream in = classLoaderWrapper.getResourceAsStream(resource, loader);
if (in == null) { //没有读取到文件抛出异常
throw new IOException("Could not find resource " + resource);
} else { //返回流
return in;
}
}
ClassLoaderWrapper类
public InputStream getResourceAsStream(String resource, ClassLoader classLoader) {
return this.getResourceAsStream(resource, this.getClassLoaders(classLoader));
}
//创建classloader对象
ClassLoader[] getClassLoaders(ClassLoader classLoader) {
return new ClassLoader[]{classLoader, this.defaultClassLoader, Thread.currentThread().getContextClassLoader(), this.getClass().getClassLoader(), this.systemClassLoader};
}
//把配置文件和生成的 classloader对象传过来
InputStream getResourceAsStream(String resource, ClassLoader[] classLoader) {
ClassLoader[] var3 = classLoader;
int var4 = classLoader.length;
for(int var5 = 0; var5 < var4; ++var5) {
ClassLoader cl = var3[var5];
if (null != cl) { //如果classloader对象不为空
InputStream returnValue = cl.getResourceAsStream(resource);
if (null == returnValue) {
returnValue = cl.getResourceAsStream("/" + resource);
}
//如果读取到配置文件返回流回去
if (null != returnValue) {
return returnValue;
}
}
}
//没有的话返回null
return null;
}
public InputStream getResourceAsStream(String name) {
URL url = getResource(name);
try {
return url != null ? url.openStream() : null; //返回一个流
} catch (IOException e) {
return null;
}
}
private final ClassLoader parent;
//这个方法获取到配置文件
public URL getResource(String name) {
URL url;
if (parent != null) {
// parent ClassLoader对象
url = parent.getResource(name);
} else {
url = getBootstrapResource(name);
}
if (url == null) {
url = findResource(name);
}
return url;
}
//获取到配置文件 开始返回
//2.创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
努力学习,共勉.