跳过正文
  1. 文章/

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

·1991 字·4 分钟
目录

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

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

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

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

使用持久层框架可以在业务系统简化以上步骤的代码,将链接的创建、销毁;SQL的执行与结果封装等这些“模版类”代码交由持久层负责,程序员只需要关注业务代码(SQL)即可。其中1与2步骤交由业务系统指定,3-6由持久层框架本身处理。

目录

<span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="Toggle Table of Content" role="button"><label for="item-6896f65950c5b" ><span class=""><span style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="http://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewBox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="http://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 24 24" version="1.2" baseProfile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></label><input aria-label="Toggle" aria-label="item-6896f65950c5b"  type="checkbox" id="item-6896f65950c5b" /></a></span>

项目工程(业务系统)
#

业务系统引入自定义持久层的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代码。
}


代码实现: