MyBatis源码解读2(2.1、核心对象)

659 阅读2分钟

二、MyBatis的核心对象

2.1、核心对象

2.1、MappedStatement

MyBatis其实是对JDBC的进一步封装,我们都知道JDBC有几个重要的对象:

  1. Statement
  2. Prepared Statement
  3. Callable Statement
  4. ResultSet

image-20230618182852840Statement、Prepared Statement、Callable Statement分别与数据与进行交互,最终执行返回的结果由ResultSet进行封装。而SqlSession是对上述步骤进行进一步的封装。

mybatis-config.xml最终被封装成了Configuration对象。我们点啊看iabatis的Configuration类可以发现,environment标签都封装在了Configuration这个类的Environment属性当中,而mapper.xml文件中的一个一个的标签一般会被封装在MappedStatement这个对象中,这就注定了一个Mybatis应用中会有N个MappedStatement对象。

image-20230618194011980

还有一个我们很常见的二级缓存的配置在Configuration类中也有对应的属性。我们可以发现他的默认值为true,所以这个属性我们写不写都可以,因为是默认开启的。

image-20230618194226910

而我们写别名的<typeAlioases>标签被mybatis封装成的对象是TypeAliasRegistry

image-20230618223437255

对于mapper.xml文件的注册,我们可以封装在<mappers>这个标签里面,而被mybatis封装的对象是loadedResources。

image-20230618223622443

而最重要的是写sql语句的mapper.xml文件,在Configuration对象中也做了汇总进行封装。

image-20230618223739810

那么此时问题来了,我们写在标签里面的sql语句最终会被封装到哪里了呢?因为sql语句是写在标签里面的,每一个标签都被封装成了一个个的MappedStatement对象,所以我们需要在MappedStatement对象里面去找。我们往下翻会发现一个getBoundSql方法。

image-20230622115532337

我们会发现他的返回值是叫一个BoundSql的对象,这个对象其实就是MyBatis对sql语句的封装。我们点进去看看这个对象,他有这么几个属性。我们来挨个分析一下。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. private final String sql:用于封装我们写的sql
  2. 其他的用于封装各种参数。