栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

自定义持久层框架

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

自定义持久层框架

目录

使用JDBC的问题总结:


使用JDBC的问题总结:

解决思路

自定义框架设计

自定义框架的具体实现

一、完成Resource类的定义

二、创建两个容器,存放文件解析后的内容

三、解析配置文件sqlMapConfigxml

四、创建sqlSessionFactory对象,生产sqlSession

五、创建SqlSession接口及实现类DefaultSession

六、总结遇到的问题:

使用JDBC的问题总结:

原始jdbc开发存在的问题如下:

1、 数据库连接创建、释放频繁造成系统资源浪费,从⽽影响系统性能。

2、 Sql语句在代码中硬编码,造成代码不易维护,实际应⽤中sql变化的可能较⼤,sql变动需要改变 java代码。

3、 使⽤preparedStatement向占有位符号传参数存在硬编码,因为sql语句的where条件不⼀定,可能 多也可能 少,修改sql还要修改代码,系统不易维护。

4、 对结果集解析存在硬编码(查询列名),sql变化导致解析代码变化,系统不易维护,如果能将数据 库记录封装成 pojo对象解析⽐较⽅便

解决思路

①使⽤数据库连接池初始化连接资源

②将sql语句抽取到xml配置⽂件中

③使⽤反射、内省等底层技术,⾃动将实体与表进⾏属性与字段的⾃动映射

自定义框架设计

使⽤端:

提供核⼼配置⽂件:

sqlMapConfig.xml : 存放数据源信息,引⼊mapper.xml

Mapper.xml : sql语句的配置⽂件信息

框架端:

1.读取配置⽂件,读取完成以后以流的形式存在,我们不能将读取到的配置信息以流的形式存放在内存中,不好操作,可以创建 javaBean来存储

(1)Configuration : 存放数据库基本信息、Map<唯⼀标识,Mapper> 唯⼀标识:namespace + "." + id

(2)MappedStatement:sql语句、statement类型、输⼊参数java类型、输出参数java类型

2.解析配置⽂件

创建sqlSessionFactoryBuilder类:

⽅法:sqlSessionFactory build():

第⼀:使⽤dom4j解析配置⽂件,将解析出来的内容封装到Configuration和MappedStatement中

第⼆:创建SqlSessionFactory的实现类DefaultSqlSession

3.创建SqlSessionFactory:

⽅法:openSession() : 获取sqlSession接⼝的实现类实例对象

4.创建sqlSession接⼝及实现类:主要封装crud⽅法

⽅法:selectList(String statementId,Object param):查询所有 selectOne(String statementId,Object param):查询单个 具体实现:封装JDBC完成对数据库表的查询操作

涉及到的设计模式: Builder构建者设计模式、⼯⼚模式、代理模式

自定义框架的具体实现

使用端:

1.创建Persistence_test使用端的类

2.在resource文件夹下创建sqlMapConfig.xml

内容:

  • 里面写着数据源的配置信息

  • 还有就是UserMapper.xml的全路径

3.在resource文件夹下创建UserMapper.xml

内容:

  • 里面包含我们的sql语句,不要忘记了初始化参数的类型和返回值结果的类型

  • 我们的statementId由我们的namespace+id组成

自定义持久层框架本身(工程):本质就是对JDBC代码进行了封装

首先再创建一个类Persistence作为我们的持久层框架

总览文件结构:

一、完成Resource类的定义

1.1该类的作用:就是根据xml文件的路径,将配置文件加载成字节输入流,存储在内存中

1.2代码编写:

1.3使用端创建测试类,并引入框架的依赖

选中框架类,点击Maven中的Lifecycle中的install将其打包

然后在使用类Persistence中引入依赖

Maven中显示了,表明引入成功

编写使用端的代码:

注意:xml文件的名字一定要写正确,否则字节输入流找不到文件

二、创建两个容器,存放文件解析后的内容

MappedStatement类:存放UserMapper的解析内容

2.1在框架类中创建MappedStatement类,并完成代码编写

注意:该类包含四个私有属性:id,resultType,paramterType,sql,并且生成属性的get和set方法

Configuration类:存放数据源解析后的内容以及sql的配置内容

这里我们就会思考一个问题,为什么这个类还要存放sql的配置信息呢?因为我们调用JDBC完成CRUD的时候需要传入数据源信息,sql语句信息,还有就是可变参数(用户输入的参数),而我们在Configuration类中将数据源信息和sql语句信息封装在一个Map集合中,我们就可以在形式上少传一个参数。

2.2代码的编写:

注意:要生成数据源和Map集合的get和set方法

三、解析配置文件sqlMapConfigxml

3.1创建SqlSessionFactoryBuilder类,该类用来创建工厂对象

3.2创建XMLConfigBuilder类,该类用dom4j来解析Configuration

过程:

  • 首先获得文本对象

  • 文本对象拿到根标签

  • 选择根标签中的属性生成链表list,为了获取里面的值

  • 创建Properties对象,

  • 遍历list,将name和value存储在Peoperties中

  • 最后创建连接池对象,设置数据源

3.3创建XMLMapperBuilder类,该类用dom4j解析sqlMapConfig.xml

过程:

  • 首先获得Configuration,因为等下要将解析出来的sql属性封装到MappedStatement中,然后在封装到Configuration中。

  • 解析sqlMapConfig.xml文件,还是一样获得文本对象

  • 获得文本中的根对象

  • 根对象获得namesapce属性值

  • 根对象获得结点