(一)自定义持久层设计思路

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

图1 自定义持久层设计思路

对直接使用JDBC链接数据库的读者或许知道,要操作数据库需要以下几部分(相关JDBC操作数据库代码可自行Google/Baidu):

  1. 指定驱动类;
  2. 指定数据库链接地址、数据库登陆账号及密码;
  3. SQL语句;
  4. 预执行SQL语句(PrepareStatement);
  5. 设置参数及执行;
  6. 封装返回结果集。

使用持久层框架可以在业务系统简化以上步骤的代码,将链接的创建、销毁;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代码。
}


代码实现: