(六)编写基类BaseDao

DAO基类中配备增删改查的操作。

 1 public interface BaseDao<T> {
 2     //新增
 3     public void save(T entity);
 4     //更新
 5     public void update(T entity);
 6     //根据id删除
 7     public void delete(Serializable id);
 8     //根据id查找
 9     public T findObjectById(Serializable id);
10     //查找列表
11     public List<T> findObjects();
12 }
 1 public abstract class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T> {
 2
 3     Class<T> clazz;
 4
 5     public BaseDaoImpl(){
 6         ParameterizedType pt =  (ParameterizedType) this.getClass().getGenericSuperclass(); //BaseDaoImpl<user>
 7         clazz = (Class<T>) pt.getActualTypeArguments()[0];
 8     }
 9
10     public void save(T entity) {
11         getHibernateTemplate().save(entity);
12
13     }
14
15     public void update(T entity) {
16         getHibernateTemplate().update(entity);
17
18     }
19
20     public void delete(Serializable id) {
21         getHibernateTemplate().delete(findObjectById(id));
22
23     }
24
25     public T findObjectById(Serializable id) {
26
27         return getHibernateTemplate().get(clazz,id);
28     }
29
30     public List<T> findObjects() {
31         Query query = getSession().createQuery("FROM "+clazz.getSimpleName());
32         return query.list();
33     }
34
35 }

获取泛型类型:

// 使用反射得到T的真实类型

ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass(); // 获取当前new的对象的 泛型的父类 类型

this.clazz = (Class<T>) pt.getActualTypeArguments()[0]; // 获取第一个类型参数的真实类型

}

时间: 2025-01-31 07:04:00

(六)编写基类BaseDao的相关文章

Android App框架设计之编写基类BaseActivity

Android App框架设计之编写基类BaseActivity 编写基类BaseActivity - OOP里面子类里面能够共享父类的方法,提高代码的可复用性 - 基类的编写要根据实际项目的情况,有的可能很简单 比如只是显示 "关于" 信息, 业务功能非常少 你可以不用继承基类进行扩展 BaseActivity继承Activity 还是 FragmentActivity 还是其它? 也是根据你的技术要求,因为解决问题的方法有很多种,或者你根本不用写基类也能完成工作. 我们的目的是编写

DikeJs基类BaseClass的编写

在编写组件的基类时,我从未想过要把这个类的方法和属性编写的这么密集,后来在D.js (DikeJS core component)DikeJs的核心组件的出现,使得方法得到了进一步的扩充,D.js目前只有一个方法,就是根据ID和NAME获取实例化后的组件对象,而基类BaseClass中存在的公共属性.方法和私有属性和方法使得每个组件在继承时有了选择性.   此刻DikeJS的成长真是有着许多的偶然和思维的跳跃,一个类的内容可能会让读者存在很大的疑问,为了处理这些疑问,我尽量的将注释写到最好. B

编写高质量代码改善C#程序的157个建议——建议23:避免将List&lt;T&gt;作为自定义集合类的基类

建议23:避免将List<T>作为自定义集合类的基类 如果要实现一个自定义的集合类,不应该以一个FCL集合类为基类,反而应扩展相应的泛型接口.FCL结合类应该以组合的形式包含至自定义的集合类,需要扩展的泛型接口通常是IEnumerable<T>和ICollection<T>(或ICollection<T>的子接口,如IList<T>),前者规范了集合类的迭代功能,后者规范了一个集合通常会有的操作. 一般的情况下,下面两个实现的集合类都能完成默认的

saltstack主机管理项目:编写插件基类-获取主机列表-提取yaml配置文件(四)

一.编写插件基类 1.目录结构 1.我是如何获知我有多少种系统? 当客户端第一连接过来的时候,我就已经把这些文件存下来了 ,存在到哪里了?存到数据库了 每次对主机发送命令的动作时,我从库里把数据取出来,我去判断有几种就可以,每个模块执行之前都要这样的判断, 直接把用户分配给了不同的模块,这就变成我了我每个模块都要写一边(重复劳动) 写一个公共的类,就是提取这些,你一定要有一个公共的类,他的作用是为了规范其他的模块 2.运行结果截图 cmd和state只要一执行就会自动去提取主机 二.获取主机列表

用基类编写干XCUITest测试

在我们以前的职位在设置XCUITest框架时,我们用Xcode 10建立并运行了一个示例XCUITest.Apple的XCUITest框架使我们能够记录基本的用户行程,从而开始使用XCUITest,但是所记录的测试不具有可伸缩性和可重用性.我们必须努力提高XCUITest的可读性.可伸缩性.可维护性和可重用性. 按照上一篇文章中提到的方法,我们可以添加更多的UI测试,但是会有大量的代码重复,这会使我们的UI测试很难维护和修复.编写自动化测试非常容易,但随着项目的规模和复杂性的增加,编写可靠的测试

第六篇:为多态基类声明虚析构函数

前言 在很多类中,可以看到其析构函数都是声明为虚函数的. 那么,为何要将析构函数声明为虚函数?哪些情况要将析构函数声明为虚函数? 本文将为你解惑. 在使用 C++ 实现多态的时候,有一点一定要清楚:当派生类对象经由基类指针被删除,而此基类的析构函数没有被声明为虚函数的话,那么析构函数只会释放基类部分的成员而无视派生类成员. 如果不对这一点加以防范,那么很多时候,会带来内存泄露这样灾难性的后果. 问题描述 假设,有以下几个类,分别代表:钟,原子钟,水钟,腕表: 1 // 钟 2 class Tim

[DikeJS]编写组件基类(八)

通过前几章的定义,发现所有的组件可以拥有共同的方法,例如,设置渲染,设置组件的id.name,以及曾经使用的event方法,在这里也可以得以使用,因此我删除了之前的Event类,在基类中添加了event的触发事件,完成了渲染完成组件后执行设定好的方法,代码如下: /**  * @Author Dike.Li  * @Date 2015/8/31  * @class BaseClass  * @public  * @Description Basic classes for all compone

通用财经数据传输与监控平台1.0(泛型,接口与基类,Sql,Ibatis,Awt,Swing)

导言 本系统通过访问url接口,实现财经数据的获取以及实时的更新到用户本地数据库的功能,并且配备了实时的数据传输的监控平台.通过本系统,用户可以的得到并保存所需的财经数据(超过200张表),并能实时的查看数据传输是否正常以及传输中的过程. 目录结构 一.相关技术总结 1.通用DAO.Service.Action的设计与实现:(VERY IMPORTMANT) 面向对象设计:接口.基类.继承:泛型 (如通用类BaseObject.接口BaseDao与实现类BaseDaoImp的设计) 2.树Tre

【WPF学习】第二十六章 Application类——应用程序的生命周期

原文:[WPF学习]第二十六章 Application类--应用程序的生命周期 在WPF中,应用程序会经历简单的生命周期.在应用程序启动后,将立即创建应用程序对象,在应用程序运行时触发各种应用程序事件,你可以选择监视其中的某些事件.最后,当释放应用程序对象时,应用程序将结束. 一.创建Application对象 使用Application类的最简单方式是手动创建它.下面的示例演示了最小的程序:在应用程序入口(Main()方法)处创建名为MainWindow的窗口,并启动一个新的应用程序: 在本质