笔者开始对Mybaits源码进行分析、学习,并记录下学习的历程,既对自己的成长有帮助,也对有可能看到本文的读者起到帮助。

对直接使用JDBC链接数据库的读者或许知道,要操作数据库需要以下几部分(相关JDBC操作数据库代码可自行Google/Baidu):
- 指定驱动类;
- 指定数据库链接地址、数据库登陆账号及密码;
- SQL语句;
- 预执行SQL语句(PrepareStatement);
- 设置参数及执行;
- 封装返回结果集。
使用持久层框架可以在业务系统简化以上步骤的代码,将链接的创建、销毁;SQL的执行与结果封装等这些“模版类”代码交由持久层负责,程序员只需要关注业务代码(SQL)即可。其中1与2步骤交由业务系统指定,3-6由持久层框架本身处理。
项目工程(业务系统)
业务系统引入自定义持久层的Jar包,并提供Jar包所需要的两种配置信息:
1. 数据库配置信息(自定义为:sqlMapperConfig.xml)
- 数据库驱动类,如:com.msyql.jdbc.Driver等;
- 数据库地址及账号密码;
- mapper.xml全路径信息(在此处定义mapper.xml全路径信息的好处是Jar包只需要配置sqlMapperConfig.xml的路径即可,方便扩展)。
2. SQL配置信息(自定义为:mapper.xml)
- SQL语句
- 参数类型
- 返回值类型
自定义持久层框架(Jar包)
持久层框架的本质就是对JDBC代码进行封装
步骤1:加载配置文件
创建Resources类,根据配置文件的路径,加载配置文件成字节输入流,存放至内存中。
类的方法:InputStream getResourceAsStram(String path)
步骤2: 创建两个javaBean
创建两个容器对象(Configuration和MappedStatement),存放配置文件解析出来的内容。
Configuration(核心配置类):存放sqlMapperConfig.xml解析出来的内容;
MappedStatement(映射配置类):存放mapper.xml解析出来的内容。
步骤3: 解析配置文件
创建SqlSessionFactoryBuilder类。
类的方法:build(InputStream) {
1. 使用dom4j解析配置文件,将解析出来的内容封装到容器对象中;
2. 创建sqlSessionFactory对象,生产sqlSession(对话对象),此处设计模式工厂模式。
}
步骤4: 创建SqlSessionFactory接口及实现类DefaultSqlSessionFactory
类的方法:openSession() {
生产sqlSession
}
步骤5: 创建SqlSession接口及实现类DefaultSession
定义对数据库的curd操作:
- selectList()
- selectOne()
- update()
- delete()
步骤6: 创建Executor接口及实现类SampleExecutor
类的方法:query(Configuration configuration, MappedStatement mappedStatement, Object… params) {
执行的就是JDBC代码。
}
代码实现: