二、MyBatis的核心对象
2.1、核心对象
2.1、MappedStatement
MyBatis其实是对JDBC的进一步封装,我们都知道JDBC有几个重要的对象:
- Statement
- Prepared Statement
- Callable Statement
- ResultSet
Statement、Prepared Statement、Callable Statement分别与数据与进行交互,最终执行返回的结果由ResultSet进行封装。而SqlSession是对上述步骤进行进一步的封装。
mybatis-config.xml最终被封装成了Configuration对象。我们点啊看iabatis的Configuration类可以发现,environment标签都封装在了Configuration这个类的Environment属性当中,而mapper.xml文件中的一个一个的标签一般会被封装在MappedStatement这个对象中,这就注定了一个Mybatis应用中会有N个MappedStatement对象。
还有一个我们很常见的二级缓存的配置在Configuration类中也有对应的属性。我们可以发现他的默认值为true,所以这个属性我们写不写都可以,因为是默认开启的。
而我们写别名的<typeAlioases>标签被mybatis封装成的对象是TypeAliasRegistry
对于mapper.xml文件的注册,我们可以封装在<mappers>这个标签里面,而被mybatis封装的对象是loadedResources。
而最重要的是写sql语句的mapper.xml文件,在Configuration对象中也做了汇总进行封装。
那么此时问题来了,我们写在标签里面的sql语句最终会被封装到哪里了呢?因为sql语句是写在标签里面的,每一个标签都被封装成了一个个的MappedStatement对象,所以我们需要在MappedStatement对象里面去找。我们往下翻会发现一个getBoundSql方法。
我们会发现他的返回值是叫一个BoundSql的对象,这个对象其实就是MyBatis对sql语句的封装。我们点进去看看这个对象,他有这么几个属性。我们来挨个分析一下。
- private final String sql:用于封装我们写的sql
- 其他的用于封装各种参数。