博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis 3.3 源码阅读(一)
阅读量:6181 次
发布时间:2019-06-21

本文共 3657 字,大约阅读时间需要 12 分钟。

  hot3.png

                                                                   搭建一个最简单的 mybatis 3.3 demo

新建一个jdbc.properties文件,内容为:jdbc_driverClassName=com.mysql.jdbc.Driverjdbc_url=jdbc:mysql://localhost:3307/person_blog?characterEncoding=utf8&zeroDateTimeBehavior=convertToNulljdbc_username=xxxxjdbc_password=xxx
新建一个配置文件 configuration.xml,内容为:

    

写根据实体写一个简单的 BlogMapper.xml 文件
 
select * from Blog where blog_id = #{blog_id}  
新建一个实体bean    public class Blog {	private int blog_id;	private String blog_title;	public int getBlog_id() {		return blog_id;	}	public void setBlog_id(int blog_id) {		this.blog_id = blog_id;	}	public String getBlog_title() {		return blog_title;	}	public void setBlog_title(String blog_title) {		this.blog_title = blog_title;	}}
定义一个BlogMapper 接口public interface BlogMapper {//	@Select("select *from Blog where blog_id = #{blog_id}")	Blog selectBlog(int blog_id);}
查询一次结果是否正确    public class Main {	public static void main(String args[]) throws IOException{		String resource = "com/debug/mybaits/configuration.xml";		InputStream inputStream = Resources.getResourceAsStream(resource);		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);		SqlSession session = sqlSessionFactory.openSession();		try {			BlogMapper mapper = session.getMapper(BlogMapper.class);			Blog blog=	mapper.selectBlog(1);			XueMapper mapper1 = session.getMapper(XueMapper.class);			Xue xue=	mapper1.selectXue(20);		System.out.println(blog.getBlog_title()+" "+xue.getGrade());		} finally {		session.close();		}		}}

    前面是为了说明我分析源码之前的用法,后面根据用法来分析mybatis 的层次结构。

    

InputStream inputStream = Resources.getResourceAsStream(resource);//为什么可以得到InputStream

    进入Recources类

public class Resources {  private static ClassLoaderWrapper classLoaderWrapper = new ClassLoaderWrapper();  ......    public static InputStream getResourceAsStream(String resource) throws IOException {    return getResourceAsStream(null, resource);  }   public static InputStream getResourceAsStream(ClassLoader loader, String resource) throws IOException {    //这个地方发现mybatis的具体获取InputStream 是委托给了ClassLoaderWrapper     InputStream in = classLoaderWrapper.getResourceAsStream(resource, loader);    if (in == null) {      throw new IOException("Could not find resource " + resource);//如果没有找到的话就报的错    }    return in;  } }

    进入ClassLoaderWrapper类:

public class ClassLoaderWrapper {  ClassLoader defaultClassLoader;  ClassLoader systemClassLoader;    public InputStream getResourceAsStream(String resource, ClassLoader classLoader) {    return getResourceAsStream(resource, getClassLoaders(classLoader));//这个就是委托的  }   ClassLoader[] getClassLoaders(ClassLoader classLoader) {    return new ClassLoader[]{        classLoader,//按照指定的顺序返回一个classLoader数组,为什么要这个顺序我也没有搞清楚        defaultClassLoader,        Thread.currentThread().getContextClassLoader(),        getClass().getClassLoader(),        systemClassLoader};  }    InputStream getResourceAsStream(String resource, ClassLoader[] classLoader) {    for (ClassLoader cl : classLoader) {      if (null != cl) {        // try to find the resource as passed        InputStream returnValue = cl.getResourceAsStream(resource);//就是实际获取流的地方        // now, some class loaders want this leading "/", so we'll add it and try again if we didn't find the resource        if (null == returnValue) {          returnValue = cl.getResourceAsStream("/" + resource);        }        if (null != returnValue) {          return returnValue;        }      }    }    return null;  }}

    

转载于:https://my.oschina.net/QAAQ/blog/645833

你可能感兴趣的文章
体育类词汇
查看>>
"ORM"
查看>>
动态变更网页样式
查看>>
java编译过程中的bug
查看>>
查询时多个文本框怎样判断
查看>>
malloc分配的内存空间是连续的吗
查看>>
分享20个吸引眼球的高品质免费PSD网站模板
查看>>
利用memcached构建高性能的Web应用程序(转载)
查看>>
表设计避免使用保留字
查看>>
编程算法 - 翻转单词顺序 代码(C)
查看>>
SpiderMonkey-让你的C++程序支持JavaScript脚本
查看>>
2013 华为校招机试题
查看>>
Clr编写Insert Triggr
查看>>
泛型(一)
查看>>
sql读取xml
查看>>
CSDN博客的一些问题(友好的吐槽)--后记,有一点点改进
查看>>
激光推送
查看>>
Python 2.7 学习笔记 访问mysql数据库
查看>>
Windows 同一时候开启核心显卡与独立显卡(不接显示器启动核芯显卡)
查看>>
微信公众平台开放改名了 附修改公众号名称方法
查看>>