mybatis 自定义函数_Mybatis源码学习(一)SqlSessionFactoryBuilder

本文介绍了Mybatis的基础知识和传统JDBC操作的繁琐步骤,重点解析了SqlSessionFactoryBuilder在构建SqlSessionFactory过程中的作用。详细阐述了SqlSessionFactoryBuilder如何解析XML配置,构建configuration对象,包括环境设置、mapper接口映射和类型处理器信息。同时讨论了mapper接口和XML文件的加载,解析statement并注册到mapperRegistry中,确保增删改查操作的准备。最后总结了SqlSessionFactoryBuilder、SqlSessionFactory和SqlSession的作用域。
摘要由CSDN通过智能技术生成

一、什么是Mybatis

    引用Mybatis文档中的介绍:Mybatis是一款优秀的持久层框架,他支持自定义Sql、存储过程以及高级映射。Mybatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。Mybatis可以通过简单的XML或注解来配置和映射原始类型、接口和Java的POJO为数据库中的记录。

    而对于我自己想学习Mybatis的源码的原因,一是想了解Mybatis的源码,二是想学习下Mybatis中的设计模式,比如责任链、代理、装饰者模式等。

二、传统的JDBC操作

1、加载数据库驱动。

2、通过DriverManager注册驱动。

3、通过DriverManager创建数据库连接Connection。

4、通过Connection创建Statement/PreparedStatement。

5、通过Statement进行数据库操作。

6、处理结果集。

7、关闭资源。

    由于传统的JDBC中,如果每一个线程对数据库进行操作时,都需要进行上述的七步操作,从而导致开发中不停的造轮子,因此我们可以引入Mybatis框架,交给Mybatis来帮我们做这些事,我们只需要关心对应的配置信息和sql的编写即可。

三、SqlSessionFactoryBuilder

    引用Mybatis官方文档,构建SqlSessionFactory时会使用到SqlSessionFactoryBuilder。

5485a26bc0bcb29e3a9f27593ba2e229.png

    因此SqlSessionFactoryBuilder的作用为构建SqlSessionFactory。

·  SqlSessionFactoryBuilder源码

public class SqlSessionFactoryBuilder {
    
//...public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) { try {
XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties); return build(parser.parse()); } catch (Exception e) { throw ExceptionFactory.wrapException("Error building SqlSession.", e); } finally {
ErrorContext.instance().reset(); try {
inputStream.close(); } catch (IOException e) { }
}
}public SqlSessionFactory build(Configuration config) { return new DefaultSqlSessionFactory(config); }
}

    build中的源码过程即对parser进行解析,解析完后,生成SqlSessionFactroy对象。

    观察DefaultSqlSessionFactory(config)构造函数,可以发现,SqlSessionFactory类中维护了一个configuration对象,用于存储environment(数据库相关环境信息)、mapperRegistry(mapper或dao层接口映射器信息)、typeHandlerRegistr(类型处理器信息)等。

public DefaultSqlSessionFactory(Configuration configuration) {
    this.configuration = configuration;}

·  解析XML文件

public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
    
//解析XML文件
XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
    //...
}
public XPathParser(InputStream inputStream, boolean validation, Properties variables, EntityResolver entityResolver) {
    

commonConstructor(validation, variables, entityResolver);

  //调用jdk方法,生成document树
this.document = createDocument(new InputSource(inputStream));}

    引用Mybatis官方文档配置的xml信息为:

79cc2cd036c503eb9237e9246e1d8ed4.png========>

    转换为document树后的结点信息为:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值