01-03手写持久层框架-JDBC问题与框架实现思路
学习视频来源:https://www.bilibili.com/video/BV1R14y1W7yS
文章目录
- 1.jdbc问题分析
- 2.解决思路
- 3. 使用JDBC和使用持久层框架的区别
- 4. 手写持久层框架思路分析
- 4.1 框架使用端
- 4.2持久层框架
1.jdbc问题分析
下边是一段使用JDBC方式执行SQL的一段代码
使用JDBC方式执行SQL有以下问题:
- 数据库配置信息硬编码
如使用mysql数据库,加载驱动为com.mysq.jdbc.Driver,如果要换成其他数据库,比如oracle,那么就要换成oracle.jdbc.driver.OracleDriver。源码改了以后,需要重新打包、部署等,比较麻烦。 - 频繁创建释放数据库连接
每次获取数据库连接,都需要和数据库建立TCP连接等等,但是SQL执行后,立刻就释放了。连接未得到复用,影响性能。 - sql语句、参数、返回结果集,均存在硬编码问题
- 需要手动封装返回结果集。属性过多时,较为繁琐
2.解决思路
- 数据库配置信息硬编码问题可以采用配置文件解决。
- 频繁创建释放数据库连接可以采用数据库连接池解决。常用的数据库连接池:HikariCP、C3P0、Druid等等。
- sql语句、参数、返回结果集,均存在硬编码问题,也可用通过配置文件解决。但是不建议与数据库配置使用同一份配置文件,因为数据库的配置信息基本不会变化,但是sql语句参数等等,会经常变化。所以sql配置文件和数据库配置文件分开。
- 手动封装返回结果集问题,使用反射、内省技术自动将返回结果进行封装。
3. 使用JDBC和使用持久层框架的区别
使用持久层框架只需要提供数据库配置信息和SQL配置信息就行了,其他的步骤不用管了,由框架帮我们完成。
4. 手写持久层框架思路分析
4.1 框架使用端
引用自定义框架的jar包,提供数据库配置文件SqlMapConfig.xml和sql配置文件mappper.xml。SqlMapConfig.xml存放的是数据库的配置信息和mapper.xml文件的路径。存放mapper.xml的路径,是为了解析时只需提供SqlMapConfig.xml的路径,就能解析出mapper.xml文件的路径,不用传2个路径了。 mapper.xml存放sql信息,参数类型、返回值类型。
4.2持久层框架
本质就是对JDBC进行封装,步骤如下:
- 加载配置文件
创建Resources类,负责加载配置文件成输入流,存入内存中。方法:InputStream getResourceAsStream(String path); - 创建2个JavaBean(容器对象)
Configuration:全局配置类:存储sqlMapConfig.xml配置文件解析出的内容。
MappedStatement:映射配置类:存储mapper.xml配置文件解析出的内容。 - 解析配置文件,填充容器对象
创建SqlSessionFactoryBuilder类和public SqlSessionFactory build(InputStream inputStream) 方法 用于
(1)解析配置文件,封装Configuration
(2)创建SqlSessionFactory并返回。 - 创建SqlSessionFactory接口和DefaultSqlSessionFactory实现类。使用SqlSession openSession()方法工厂模式生成SqlSession对象,通过不同的参数,生成不同的SqlSession对象。比如是自动提交事务,还是手动提交事务,还是批量操作等等。
- 创建SqlSession接口和DefaultSqlSession实现类。
方法:selectList()查询所有
selectOne()查询单个
update();更新
delete()删除 - 创建Executor接口和是实现类SimpleExecutor
方法: query(Configuration,MappedStatement, Object parameter);执行的就是底层JDBC代码(数据库配置信息、SQL配置信息)