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

系列文章目录

一、Dao高级实现原理

现在我们来开始项目的Dao这一层
回顾一下以前,先写一个接口,然后写一个实现类
对,就是这样,没错,但是在这个项目中也可以这样吗?这个思路到底对不对呢?
下面我们看分析
在这里插入图片描述
再仔细看会发现不仅如此,接口里面也有相同的代码
这里就可以用到设计模式,我们能不能把相同的方法提取出来呢?
所以这里这两个我们都可以写个继承,后面继承就行了,这样就把相同的代码提取出来了
在这里插入图片描述
只是参数不一样,我们就可以用泛型
我们先只看接口这块的代码,写个基类
在这里插入图片描述
再来只看Dao这块
在这里插入图片描述
这里我们可以看到我们抽取的只是公共的东西,但是肯定还有一些特殊的东西,特殊的我们怎么处理呢?
在这里插入图片描述
在这里插入图片描述
如果没看懂也没关系,接着来跟着写就明白了,毕竟概念或者说光说有时候还是比较抽象

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

在这里插入图片描述
在这里插入图片描述
查询的这个id,我们暂时先这样,写一个测试类,来看看先

在这里插入图片描述
这个类型我们怎么去理解?理解为任意类型就行了,虽然实际意思是序列化的意思
所以我们下面应该这样做
在这里插入图片描述
这样公共接口(接口的基类)就做好了
下面写继承基类的子类接口
在这里插入图片描述
在这里插入图片描述
一定要加泛型,因为我们不确定具体的类型,未来具体类型是变化的
在这里插入图片描述
Spring自动注入就更简单了,简单到不了解原理有点看不懂
保存和删除就更简单了
在这里插入图片描述
注意:这里的this可以写,也可以不写,写不写都行
在这里插入图片描述
可能是user.class也可能是order.class 一切皆有可能,这里要变的,先放一下
我们继续下面的操作
我们写一下user的实现类
在这里插入图片描述
这样dao的代码就写完了
我们就需要测试一下通不通
因为现在我们没有界面,做一个界面来测试太麻烦了,所以我们可以用单元测试来做

在这里插入图片描述
为什么要新建一个test,而不是放到src下?因为我们测试的代码不需要打包

在这里插入图片描述
而拿到userDao要去读取配置文件,让它给我们创建bean,所以我们在这里Spring的配置一定要做好
在这里插入图片描述
配置一个UserDaoImpl的bean有两种方法,一种是在实现类里面用注解,一种是在xml里面配置
我们用注解看看怎么解决
在这里插入图片描述
然后我们惊讶的发现在Spring里面也没有hibernate模板
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
配置完之后我们就可以直接进行单元测试了
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
继续往下,看看还少了什么?少了事务,以前我们是怎么做的,使用事务管理器,这次我们怎么做呢?
因为我们还没有写service,所以事务先放下,因为我们有星辰大海,我们要应用全部,但是要记住,事务是一定要配置的
以上用一张图表示就是
在这里插入图片描述

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

现在我们还有之前遗留的一个地方没有实现
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后直接执行,按道理是自动注入的,会自动帮我们new一个实现类,会执行
在这里插入图片描述
这里需要用到反射
在这里插入图片描述
在这里插入图片描述
注意看,这里的获取父类,把这个泛型 T 也获取到了,这就是我们非常需要的,这样我们就可以动态获取到具体的数据类型了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
这样我们就获取到具体的数据类型了
可以这样输出看一下
在这里插入图片描述

注意

Dao层也叫持久层

猜你喜欢

转载自blog.csdn.net/qq_41753340/article/details/115012452