一、JDBC总结问题:
- 数据库连接创建、释放频繁造成系统资源浪费,从而影响系统性能
- SQL语句在代码中硬编码,造成代码不易维护,实际应用中SQL变化的可能较大,SQL变动需要改变java代码
- 使用prepardStatement向占有位符号传参数存在硬编码,因为SQL语句的where条件不一定,可能多也1可能少,修改SQL还要修改代码,系统不易维护
- 对结果集解析存在硬编码(查询列名),SQL变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成pojo对象解析比较方便
二、问题解决思路
- 使用数据库连接池初始化连接资源
- 将SQL语句抽取到xml配置文件中
- 使用反射、内省等底层技术,自动将实体与进行属性与字段的自动映射
自定义持久层框架设计思路:
使用端:(项目):引入自定义持久层框架的jar包
提供两部分配置信息:数据库配置信息、sql配置信息:sql语句、参数类型、返回值类型
使用配置文件来提供这两部分配置信息:
1、sqlMapConfig.xml存放数据库配置信息,存放mapper.xml的全路径
2、mapper.xml:存放sql配置信息
自定义持久层框架本身:(工程):本质就是对JDBC代码进行了封装
1、加载配置文件:根据配置文件的路径,加载配置文件成字节输入流,存储在内存中
创建Resources类 方法:InputSteam getResourcesAsSteam(String path)
2、创建两个javaBean:(容器对象):存放的就是对配置文件解析出来的内容
Configuration:核心配置类:存放sqlMapConfig.xml解析出来的内容
MapperdStatement:映射配置类:存放mapper.xml解析出来的内容
3、解析配置文件:dom4j
创建类:SqlSessionFactoryBuiler 方法:build (InputSteam in)
第一:使用dom4j解析配置文件,将解析出来的内容封装到容器对象中
第二:创建SqlSesionFactory对象;生产sqlSesion:会话对象(工厂模式)
4、创建SqlSessionFactory接口及实现类DefaultSqlSessionFacotry
第一:openSession():生产sqlSession
5、创建SqlSession接口及实现DefaultSesion
定义对数据库的crud操作:selectList() 、selectOne()、update()、delete()
6、创建Executor接口及实现类SimpleExecutor实现类
query(Configuration,MappedStatement,Object...params):执行的就是JDBC代码
源码地址:https://gitee.com/jiege0525_admin/handwritten-jdbc