0
点赞
收藏
分享

微信扫一扫

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型


系列文章目录

文章目录

  • 系列文章目录
  • 一、Dao高级实现原理
  • 二、Dao高级实现-代码具体实现
  • 三、Dao高级代码实现—获取泛型的真实类型
  • 注意

一、Dao高级实现原理

现在我们来开始项目的Dao这一层

回顾一下以前,先写一个接口,然后写一个实现类

对,就是这样,没错,但是在这个项目中也可以这样吗?这个思路到底对不对呢?

下面我们看分析

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_代码实现


再仔细看会发现不仅如此,接口里面也有相同的代码

这里就可以用到设计模式,我们能不能把相同的方法提取出来呢?

所以这里这两个我们都可以写个继承,后面继承就行了,这样就把相同的代码提取出来了

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_泛型_02


只是参数不一样,我们就可以用泛型

我们先只看接口这块的代码,写个基类

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_数据类型_03


再来只看Dao这块

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_泛型_04


这里我们可以看到我们抽取的只是公共的东西,但是肯定还有一些特殊的东西,特殊的我们怎么处理呢?

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_数据类型_05


BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_代码实现_06


如果没看懂也没关系,接着来跟着写就明白了,毕竟概念或者说光说有时候还是比较抽象

二、Dao高级实现-代码具体实现

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_数据类型_07


BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_泛型_08


查询的这个id,我们暂时先这样,写一个测试类,来看看先

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_代码实现_09


这个类型我们怎么去理解?理解为任意类型就行了,虽然实际意思是序列化的意思

所以我们下面应该这样做

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_数据类型_10


这样公共接口(接口的基类)就做好了

下面写继承基类的子类接口

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_数据类型_11


BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_泛型_12


一定要加泛型,因为我们不确定具体的类型,未来具体类型是变化的

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_代码实现_13


Spring自动注入就更简单了,简单到不了解原理有点看不懂

保存和删除就更简单了

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_代码实现_14


注意:这里的this可以写,也可以不写,写不写都行

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_数据类型_15


可能是user.class也可能是order.class 一切皆有可能,这里要变的,先放一下

我们继续下面的操作

我们写一下user的实现类

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_数据类型_16


这样dao的代码就写完了

我们就需要测试一下通不通

因为现在我们没有界面,做一个界面来测试太麻烦了,所以我们可以用单元测试来做

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_泛型_17


为什么要新建一个test,而不是放到src下?因为我们测试的代码不需要打包

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_泛型_18


而拿到userDao要去读取配置文件,让它给我们创建bean,所以我们在这里Spring的配置一定要做好

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_泛型_19


配置一个UserDaoImpl的bean有两种方法,一种是在实现类里面用注解,一种是在xml里面配置

我们用注解看看怎么解决

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_数据类型_20


然后我们惊讶的发现在Spring里面也没有hibernate模板

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_泛型_21

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_数据类型_22


BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_泛型_23


BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_数据类型_24

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_代码实现_25


配置完之后我们就可以直接进行单元测试了

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_数据类型_26


BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_泛型_27

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_数据类型_28

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_代码实现_29


继续往下,看看还少了什么?少了事务,以前我们是怎么做的,使用事务管理器,这次我们怎么做呢?

因为我们还没有写service,所以事务先放下,因为我们有星辰大海,我们要应用全部,但是要记住,事务是一定要配置的

以上用一张图表示就是

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_泛型_30

三、Dao高级代码实现—获取泛型的真实类型

现在我们还有之前遗留的一个地方没有实现

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_代码实现_31


BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_数据类型_32


BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_泛型_33


然后直接执行,按道理是自动注入的,会自动帮我们new一个实现类,会执行

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_泛型_34


这里需要用到反射

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_泛型_35


BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_泛型_36


注意看,这里的获取父类,把这个泛型 T 也获取到了,这就是我们非常需要的,这样我们就可以动态获取到具体的数据类型了

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_泛型_37


BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_代码实现_38


BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_代码实现_39


BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_数据类型_40

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_代码实现_41


这样我们就获取到具体的数据类型了

可以这样输出看一下

BOS项目02_05_Dao高级实现原理以及代码实现、-获取泛型的真实(即具体的数据类型)类型_代码实现_42

注意

Dao层也叫持久层


举报

相关推荐

0 条评论