如何在Java 中使用泛型或反射机制对DAO进行抽象

发布时间:2020-11-26 16:07:42

来源:亿速云

阅读:80

作者:Leah

本篇文章为大家展示了如何在Java 中使用泛型或反射机制对DAO进行抽象,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

Java 中利用泛型和反射机制抽象DAO的实例

一般的DAO都有CRUD操作,在每个实体DAO接口中重复定义这些方法,不如提供一个通用的DAO接口,具体的实体DAO可以扩展这个通用DAO以提供特殊的操作,从而将DAO抽象到另一层次,令代码质量有很好的提升

1.通用接口import java.io.Serializable;

import java.util.List;

public interface BaseDao {

T get(Serializable id);

List getAll();

// List find(String hql,);

void save(Object o);

void remove(Object o);

void update(Object o);

}

2.DAO基类import java.io.Serializable;

import java.lang.reflect.ParameterizedType;

import java.lang.reflect.Type;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class HibernateBaseDao extends HibernateDaoSupport implements BaseDao{

private Class entityClass;

public HibernateBaseDao() {

Type genType = getClass().getGenericSuperclass();

Type[] params = ((ParameterizedType) genType).getActualTypeArguments();

entityClass = (Class)params[0];

}

public T get(Serializable id) {

return (T)getHibernateTemplate().load(entityClass, id);

}

public List getAll() {

return getHibernateTemplate().loadAll(entityClass);

}

public void save(Object o) {

getHibernateTemplate().saveOrUpdate(o);

}

public void remove(Object o) {

getHibernateTemplate().delete(o);

}

public void update(Object o) {

getHibernateTemplate().update(o);

}

}

这里利用反射机制获取泛型对应的实体类的类型

3.实体DAO类import java.util.Iterator;

import java.util.List;

import com.baobaotao.dao.ForumDao;

import com.baobaotao.dao.HibernateBaseDao;

import com.baobaotao.domain.Forum;

public class ForumHibernateDao2 extends HibernateBaseDao implements ForumDao{

public long getForumNum() {

Iterator iter = getHibernateTemplate().iterate(

"select count(f.forumId) from Forum f");

return ((Long)iter.next());

}

}

通过扩展泛型DAO基类,就自动拥有基类的数据操作功能,只要提供特殊的功能即可,实体DAO的编码生产率得到了极大的提高

上述内容就是如何在Java 中使用泛型或反射机制对DAO进行抽象,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

java如何用反射把具体方法抽象_如何在Java 中使用泛型或反射机制对DAO进行抽象...相关推荐

  1. java 反射父类私有属性值_如何在Java中通过反射访问父类的父类的私有字段? - java...

    在一个API中,我使用的是一个抽象类(A类),该类具有一个私有字段(A.privateField). B类在API中扩展了A类. 我需要扩展B类的实现,即C类,但是我需要A类的privateField ...

  2. java如何给一个链表定义和传值_如何在CUDA中为Transformer编写一个PyTorch自定义层...

    如今,深度学习模型处于持续的演进中,它们正变得庞大而复杂.研究者们通常通过组合现有的 TensorFlow 或 PyTorch 操作符来发现新的架构.然而,有时候,我们可能需要通过自定义的操作符来实现 ...

  3. java如何解压rar文件怎么打开_如何在java中实现对zip和rar文件的解压

    如何在java中实现对zip和rar文件的解压 关注:101  答案:1  mip版 解决时间 2021-01-26 10:50 提问者芣①樣哋羙莮 2021-01-25 22:44 如何在java中 ...

  4. java把一段英文拆成单词_如何在java中将句子拆分成单词和标点符号

    与其试图提出一个模式来进行拆分,不如通过提出一个要捕获的元素的模式来解决这个难题. 尽管它不仅仅是一个简单的 split() ,它仍然可以在Java 9+中的单个语句中完成: String regex ...

  5. Java一种错误的实例化方法:在默认无参构造函数中进行实例化

    Java一种错误的实例化方法:在默认无参构造函数中进行实例化 代码如下: package Construction_test;public class A {static int i=0;public ...

  6. Java中的泛型与异常机制

    Java中的泛型与异常机制 ※泛型的使用 如果在使用集合时没有限定集合所保存的数据类型,则在代码运行期间容易会出现ClassCastException类转换的异常 通过设置泛型,可以在编译期间发生问题 ...

  7. 【笔记】JAVA中的泛型和反射

    泛型 Java的泛型是如何工作的?什么是类型擦除? ----泛型是通过类型擦除来实现的,编译器在编译时擦除了所有类型相关的信息,所以在运行时不存在任何类型相关的信息.例如List在运行时仅用一个Lis ...

  8. java 方法当参数_如何在Java中将函数作为参数传递?

    如何在Java中将函数作为参数传递? 这个问题在这里已有答案: Java Pass方法作为参数                                     14个答案 是否可以将方法作为参 ...

  9. java对密码进行加密的方法_如何在JAVA中使用MD5加密对密码进行加密

    如何在JAVA中使用MD5加密对密码进行加密 发布时间:2020-11-25 17:12:40 来源:亿速云 阅读:118 作者:Leah 本篇文章为大家展示了如何在JAVA中使用MD5加密对密码进行 ...

最新文章

  1. uvm_dpi——DPI在UVM中的实现(一)
  2. QT 的信号与槽机制介绍
  3. python文件读取输出-Python 读写文件中数据
  4. Ansj中文分词Java开发小记
  5. Maven学习总结(十)——使用Maven编译项目gbk的不可映射问题
  6. TCP滑动窗口和拥塞控制机制
  7. Java –手工Classloader隔离
  8. Powerline专用字体安装_PowerFonts字体库安装_Meslo LG字体安装
  9. 选择排序与冒泡排序的区别
  10. Swift - 循环强引用,内存泄漏
  11. 首例猪心移植人体,川妹子立大功!36 岁哈佛女学霸敲除猪致病基因,成顶刊收割机...
  12. BZOJ2059: [Usaco2010 Nov]Buying Feed 购买饲料
  13. 一文讲解安卓应用软件开发有什么优势?
  14. (转载)网络互联参考模型(详解)
  15. 你所不了解的“三消”游戏
  16. ( cf1249 )Codeforces Round #595 (Div. 3)部分题解
  17. 井字游戏HTML,HTML5井字棋游戏
  18. 爱快iKuai软路由系统远程升级(从2.5.10系统升级至3.X系列)教程(图文详解)
  19. JS match() 方法 使用
  20. U8C报表模板已设置,任务已分配仍无法查看报表数据

热门文章

  1. 【题解】生日蛋糕-C++
  2. [洛谷P3550][POI2013]TAK-Taxis
  3. 不同包之间的继承extends
  4. laravel event
  5. Character,String相关方法,Int,double互相转换
  6. 如何有效提高你的沟通技巧
  7. dudu: 图片显示错误问题,望更正
  8. Python之数据分析(卷积运算、移动均线、布林带)
  9. winformbutton边框怎么改_C#(winform)为button添加背景图片,并去掉各种边框
  10. collection集合 地址_有容乃大--Java 集合(List/Set/Map)