package com.dao;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
/**
* 实现增删改查的超类
* @author Administrator
*
* @param <T>
* @param <I>
*/
@Transactional
public class DaoSupport<T,I extends Serializable> {
@Autowired protected SessionFactory factory;
private Class<T> entityClass;
@SuppressWarnings("unchecked")
public DaoSupport() {
Type genType = getClass().getGenericSuperclass();
if(genType instanceof ParameterizedType){
ParameterizedType pra=(ParameterizedType)genType;
Type[] t=pra.getActualTypeArguments();
if(t.length>0){
entityClass=(Class<T>) t[0];
}else{
entityClass=(Class<T>) Object.class;
}
}else{
entityClass=(Class<T>) Object.class;
}
}
/**
* 保存数据
* @param entity
*/
public void save(T entity) {
factory.getCurrentSession().save(entity);
}
/**
* 更新数据
* @param entity
*/
public void update(T entity){
factory.getCurrentSession().update(entity);
}
/**
* @param entity
*/
public void delete(T entity){
factory.getCurrentSession().delete(entity);
}
@SuppressWarnings("unchecked")
public List<T> listAll(){
return factory.getCurrentSession().createCriteria(entityClass).list();
}
@SuppressWarnings("unchecked")
public T get(I id){
return (T) factory.getCurrentSession().get(entityClass, id);
}
public final SessionFactory getFactory() {
return factory;
}
public final void setFactory(SessionFactory factory) {
this.factory = factory;
}
}
分享到:
相关推荐
本文介绍了一个简单的JavaScript类框架,它通过提供一种基础的类定义和继承机制,使得初学者可以更加容易地理解和掌握JavaScript中类的创建和继承。 为了帮助初学者理解JavaScript中类的创建与继承,这个简单的类...
- 向下转型(简称下转):将超类转换为子类的操作。 - AnyObject和Any的转换:介绍这两种类型之间的转换方法。 21. 类型嵌套 - 类型嵌套实例:在类型内部定义另一个类型。 - 类型嵌套的引用:如何引用嵌套类型...
9. 继承与方法调用:Java中的实例方法可以通过`super`关键字调用超类的实例方法,也可以直接调用超类的类方法(静态方法),但不能直接调用其他类的实例方法。 10. Java程序种类:Java程序可以是类、Applet(小程序...
- **扩展**: 扩展可以在不修改原定义的情况下添加新的功能到现有的类、结构体或枚举中。 **7. 泛型** - **泛型**: 泛型允许编写可以操作任意类型而不牺牲性能或类型安全性的代码。 #### 三、高级特性 **1. 字符串...
- **简单易学**:Java 设计时考虑了易用性和易学性,语法简洁明了。 - **面向对象**:Java 是一门完全支持面向对象编程(OOP)的语言。 - **安全性**:Java 提供了严格的类型检查机制和安全模型,可以避免很多...
4. **继承**:一个类可以从另一个类派生,获取父类的属性和方法,Object类是所有Java类的根超类。 5. **对象的特性**:行为(能做什么)、状态(对象对方法的响应)和身份(区分不同对象)。 6. **类之间的关系**...
- **简单易用**:Java的设计初衷是为了简化C和C++的复杂性,提供了自动内存管理和垃圾回收机制,使开发者能够更加专注于业务逻辑的实现。 - **功能完善**:Java拥有庞大的标准库,包括网络编程、图形用户界面(GUI)...
封装是将对象的状态和行为结合在一起,而类则是具有相同特征对象的集合,可以形成类层次结构,其中子类继承超类的属性和方法,体现了“is A”的语义。 在面向对象数据库中,继承机制允许子类从超类继承属性和方法,...
- **Embeddable**:定义了可嵌入到其他实体中的类。 - **实体监听器**:用于指定一个类作为实体的监听器。 - **示例**:给出一个具体的类元数据配置示例。 - **字段和属性元数据**: - **瞬态**:标记不持久化的...
Flask适合用于创建小型的Web应用,它的设计哲学是简单易用。阅读Flask的源码可以帮助开发者深入理解Web框架的工作原理以及如何处理Web请求。 Python中可迭代对象(iterable)的概念允许开发者创建可以被迭代的对象...
数据建模和模式的持久化是IT领域中关于对象存储和检索的...通过创建如PersistentObject这样的抽象超类,使用模板方法模式和数据库代理模式,开发者可以构建出既能适应多种存储机构,又能保持代码清晰和模块化的系统。
2. 定义测试入口:通过`Class.forName()`方法,获取需要测试的Activity类。 3. 初始化Solo对象:在测试类的setUp()方法中,创建Solo对象,传入当前的Activity实例。 4. 编写测试用例:使用Solo提供的API,如`...
- **超类映射**:如果源对象和目标对象具有共同的父类,则可以定义超类映射规则。 - **第三方对象工厂**:支持使用XMLBeans、JAXB等第三方框架来创建对象实例。 - **监听Dozer事件**:可以通过注册监听器来监控Dozer...
Kodein是一个在Android开发中广泛使用的轻量级依赖注入框架,尤其在Kotlin环境下,它的易用性和灵活性深受开发者喜爱。依赖注入(Dependency Injection,简称DI)是一种设计模式,能够帮助开发者减少代码之间的耦合...
1. 操作性需求(Operational Requirements):这些需求涉及系统的日常运行和维护,比如系统的易用性、可管理性、可部署性和可扩展性。例如,用户界面的友好性、系统升级的便利性以及硬件设备的灵活扩容能力。 2. ...
例如,`@Override`用于标记一个方法覆盖了超类的方法,`@Deprecated`标记某个API不再推荐使用等。注解可以自定义,也可以使用预定义的系统注解。通过反射API,可以读取和处理程序中的注解信息。 这些特性极大地提升...
但是,作为一种消费设备,它在易用性和 “新奇特性” 方面难以和 iPhone 抗衡。Android 则是一个年轻的、有待开发的平台,它有潜力同时涵盖移动电话的两个不同消费群体,甚至可能缩小工作和娱乐之间的差别 如今,很...
Python作为一门广泛使用的高级编程语言,其内置函数的丰富性和易用性是其受欢迎的原因之一。Python的内置函数可以直接在Python环境中使用,无需额外导入模块。初学者通过学习和应用这些内置函数,可以更快速地编写...