当前位置: 首页 > news >正文

泛型的应用


tags: Java基础


当我们写网页的时候,常常会有多个DAO,我们要写每次都要写好几个DAO,这样会有点麻烦。

那么我们想要的效果是什么呢??只写一个抽象DAO,别的DAO只要继承该抽象DAO,就有对应的方法了。

要实现这样的效果,肯定是要用到泛型的。因为在抽象DAO中,是不可能知道哪一个DAO会继承它自己,所以是不知道其具体的类型的。而泛型就是在创建的时候才指定其具体的类型。

  • 抽象DAO


public abstract class BaseDao<T> {

	//模拟hibernate....
	private Session session;
	private Class clazz;
	
	
	//哪个子类调的这个方法,得到的class就是子类处理的类型(非常重要)
	public BaseDao(){
		Class clazz = this.getClass();  //拿到的是子类
		ParameterizedType  pt = (ParameterizedType) clazz.getGenericSuperclass();  //BaseDao<Category>
		clazz = (Class) pt.getActualTypeArguments()[0];
		System.out.println(clazz);
		
	}
	

	public void add(T t){
		session.save(t);
	}
	
	public T find(String id){
		return (T) session.get(clazz, id);
	}
	
	public void update(T t){
		session.update(t);
	}
	
	public void delete(String id){
		T t = (T) session.get(clazz, id);
		session.delete(t);
	}
	
}
复制代码
  • 继承抽象DAO,该实现类就有对应的增删改查的方法了。

CategoryDao


public class CategoryDao extends BaseDao<Category> {

}

复制代码

BookDao


public class BookDao extends BaseDao<Book> {


}

复制代码

如果您觉得这篇文章帮助到了您,可以给作者一点鼓励

相关文章:

  • 生成字符Banner
  • 通过例子理解 k8s 架构 - 每天5分钟玩转 Docker 容器技术(122)
  • tomcat 和 数据库的连接
  • 使用laravel构建spa
  • MyBatis 缓存机制深度解剖 / 自定义二级缓存
  • weex打包android apk采坑之旅(windows)
  • 7-设计模式-代理模式
  • 如何统计序列中元素的出现频度
  • DirectX3D设备丢失(lost device)的处理(一)
  • Ubuntu12.04_X64 apt-get install 报错404
  • 面试必问的volatile,你了解多少?
  • Day04——Python模块
  • [UWP]附加属性2:实现一个Canvas
  • 微信支付demo 报错解决方案:ld: symbol(s) not found for architecture arm64 clang: error: lin
  • java ftp上传方法
  • 【347天】每日项目总结系列085(2018.01.18)
  • 0x05 Python数据分析,Anaconda八斩刀
  • angular2 简述
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • LeetCode18.四数之和 JavaScript
  • 测试开发系类之接口自动化测试
  • 创建一种深思熟虑的文化
  • 大快搜索数据爬虫技术实例安装教学篇
  • 我是如何设计 Upload 上传组件的
  • 系统认识JavaScript正则表达式
  • 怎么将电脑中的声音录制成WAV格式
  • 正则表达式小结
  • 【干货分享】dos命令大全
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • 国内开源镜像站点
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #HarmonyOS:软件安装window和mac预览Hello World
  • $.ajax()
  • $GOPATH/go.mod exists but should not goland
  • (11)MATLAB PCA+SVM 人脸识别
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (备忘)Java Map 遍历
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (转)http-server应用
  • (转)Linux整合apache和tomcat构建Web服务器
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)
  • @value 静态变量_Python彻底搞懂:变量、对象、赋值、引用、拷贝
  • [C#]无法获取源 https://api.nuge t.org/v3-index存储签名信息解决方法
  • [delphi]保证程序只运行一个实例
  • [IE编程] 打开/关闭IE8的光标浏览模式(Caret Browsing)
  • [ios] IOS文件操作的两种方式:NSFileManager操作和流操作【转】
  • [Lua实战]整理Lua中忽略的问题
  • [MZ test.16]P2 math 乘方e