持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第 20 天,点击查看活动详情
上期课程中,完成加载配置文件。那么,在本期的课程,要完成的功能创建两个 JavaBean,其实这两个 JavaBean 就是容器对象,作用是主要用来存放对配置文件解析出来的信息。
这两个 JavaBean 分别是 Configuration 类和 MapperStatement 类,其中,Configuration 类中存放的信息是解析核心配置文件的信息,MapperStatement 类中存放信息是解析映射配置文件的信息。
根据前面课程分析思路,接下来,使用代码具体实现其功能。
创建 MapperStatement 容器对象
首先,我们来创建 MapperStatement 类。在 MapperStatement 这个对象中都要有哪些属性呢?我们可以根据映射配置文件设置属性,id 标识、返回值类型、参数值类型以及 SQL 语句。
public class MapperStatement {
private String id;
private String resultType;
private String parameterType;
private String sql;
//getter setter 略
}
第一个容器对象 MapperStatement ,我们就创建完成了。
创建 Configuration 容器对象
在 Configuration 类中,主要存放的是 sql-mapper-config.xml 配置文件中解析出来的信息。存放的是 dataSource 下四个 property 属性的值,在 Configuration 类中,我们可以创建这四个属性,分别去存储这四个值。但是我们还可以换一种思路,我们取到这个四个值,主要是要来完成获取一个数据源对象的功能。所以我们可以直接在这个 Configuration 类着中存一个 DataSource,再去使用 dom4j 解析 sql-mapper-config.xml 核心配置文件时,我们就会解析到这四个属性的值,并根据这四个属性的值来获取到一个数据源对象,再把创建出来的这个数据源对象往 Configuration 类中的 DataSource 存放。
public class Configuration {
private DataSource dataSource;
// getter 和 setter 略
}
这来个容器对象具体代码实现编写完成了。思考一些,如果在解析的过程中,我们是不是要把 mapper.xml 里面 select 标签部分的信息封装成 MapperStatement 对象,而把 sql-mapper-config.xml 中关于 dataSource 的这一部分信息也要去封装成 Configuration 对象里面的 DataSource。
假设这两个对象都封装完成了,再进行向下传递的时候,我们是不是要把这两个对象都要进行传递。
如果按照面向对象的思想来说,现在多参数传递,我们是不是可以把它合成一个对象来进行传递。怎么去合成一个对象呢?MapperStatement 对象在解析的过程中,肯定是要被解析成多个的,因为同一个标签如果有多个,它会被封装成多个。所以可以在 Configuration 这个对象中来创建一个 Map 集合。这个 Map 集合要存放的信息是封装好的一个又一个的MapperStatement。把封装好的一个又一个的 MapperStatement 全部都放 Configuration 这个对象里面的 Map 集合中。这样在传递参数时,我们只需要传递 Configuration 即可。因为Configuration 此时既包含了数据库的配置信息,也包含了 SQL 的配置信息。
public class Configuration {
private DataSource dataSource;
/**
* key:statementId
* value:封装好的 MapperStatement 对象
*/
Map<String,MapperStatement> mapperStatementMap=new HashMap<>();
// getter 和 setter 略
}
其中,String 的 key 使用 statementId 进行存储,这个 statementId 就是 mapper.xml 配置文件中 namespace 和标签中的 id 组成,是 SQL 的唯一标识。value 值是封装好的 MapperStatement 对象。
介绍到这里,Configuration 容器对象代码才算编写完成了。
目前为止,我们把这两个容器对象创建完成了,自定义持有层框架第二步。下期课程,使用 dom4j 技术解析核心配置文件的信息。
小结
本期课程内容不多,主要完成的功能创建两个 JavaBean 容器对象,一个是 Configuration 容器对象,主要用于存放解析出来的核心配置文件的信息,另一个是 MapperStatement 容器对象,主要用于存放解析出来的映射配置文件的信息,最终将解析出来的一个又一个的对象合并成一个 Map 集合存放在 Configuration 容器对象中。