`

简化开发-base类(泛型)

阅读更多

本文章主要讲了两个技巧,一是在Dao层中基本操作的复用,和Spring配置中的一些代码复用。

 

简明的说一下类的作用:

 

BaseDao(接口类):

实体中共有的增删改查操作的接口

 

BaseHibernateDao(实现类):继承HibernateDaoSupport,实现BaseDao接口

实现BaseDao类中的基本操作。

 

UserDao(接口类):继承BaseDao类

实体中除了基本操作的额外操作,用于扩充功能。

 

UserHibernateDao(实现类):继承BaseHibernateDao类,实现UserDao接口

实现UserDao类的操作。

 

 

从上面的分析可以看出来,UserDao类是包含有全部的底层操作的接口,而UserHibernateDao类是实现了UserDao

类的全部操作。实现了base类后,实际上是简化了实体通用的操作,只写一次就行了。。

 

在ssh2 结构中,可以利用spring 对UserService 类进行注入UserDao类即可。如Spring的配置文件: 

	<bean id="daoTemplate" abstract="true">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>
	
                <bean id="userDao" class="dao.hibernate.UserHibernateDao" parent="daoTemplate"/>
	
	<bean id="userService" class="service.imp.UserService">
		<property name="userDao" ref="userDao"/>

               <bean id="***Dao" class="dao.hibernate.***HibernateDao" parent="daoTemplate"/>
	
	<bean id="***Service" class="service.imp.UserService">
		<property name="***Dao" ref="***Dao"/>

 

从这个配置文件上又有个 daoTemplate 的bean ,这个bean 是一个抽象类,注入了sessionFactory,如果其他bean类继承它的话,就可以不用在为它注入sessionFactory了,,这个也是一个技巧,有点像Base类,功能都是实现代码的复用。。。

 

下面是上面一些类的演示代码:

BaseDao

import java.io.Serializable;
import java.util.List;

public interface BaseDao<T,ID extends Serializable> {
	public void save(T entity);
	public void delete(T entity);
	public void deleteById(Class<T> entityClass,ID id);
	public void update(T entity);
	public T findById(Class<T> entityClass,ID id);
	public List<T> findAll(Class<T> entityClass);
	
}

 

BaseHibernateDao

package dao.base;

import java.io.Serializable;
import java.util.List;

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

public class BaseHibernateDao<T,ID extends Serializable> extends HibernateDaoSupport implements BaseDao<T,ID> {

	@Override
	public void delete(T entity) {
		this.getHibernateTemplate().delete(entity);
		
	}

	@Override
	public void deleteById(Class<T> entityClass, ID id) {
		delete(this.findById(entityClass, id));
		
	}

	@Override
	public T findById(Class<T> entityClass, ID id) {
		return (T)this.getHibernateTemplate().get(entityClass, id);
	}

	@Override
	public List<T> findAll(Class<T> entityClass) {
		String name=entityClass.getName();
		return this.getHibernateTemplate().find("from"+name);
	}

	@Override
	public void save(T entity) {
		this.getHibernateTemplate().save(entity);
	}

	@Override
	public void update(T entity) {
		this.getHibernateTemplate().update(entity);
	}


}

 

UserDao

package dao;
import dao.base.BaseDao;
import model.User;
public interface UserDao extends BaseDao<User,Integer>{
	User findUserByNameAndPass(String name,String password);
}

 

 

 UserHibernateDao

package dao.hibernate;

import java.util.List;

import model.User;
import dao.UserDao;
import dao.base.BaseHibernateDao;

public class UserHibernateDao extends BaseHibernateDao<User,Integer> implements UserDao {

	@Override
	public User findUserByNameAndPass(String name, String password) {
		// TODO Auto-generated method stub
		List<User> us=this.getHibernateTemplate().find("from User user where name=? and password=?",new Object[]{name,password});
		if(us.size()==1)
			return us.get(0);
		else
			return null;
	}

}

 

分享到:
评论

相关推荐

    深入解析C#中的泛型类与泛型接口

    在C#编程语言中,泛型是一个强大的特性,它允许我们编写可重用的代码,同时保持高效的数据处理。本文将深入探讨C#中的...通过合理地设计泛型类和接口,可以创建出强大的、可复用的组件,简化代码维护,提升开发效率。

    CS_Practice-base:CS实践

    - 泛型提供了一种在编译时增强类型安全性的方法,可以创建适用于多种类型的类、接口和方法。 5. **集合与LINQ** - 集合(如ArrayList、LinkedList、HashSet等)用于存储和操作一组数据。 - LINQ(Language ...

    ts-lerna-base:准系统打字稿lerna后端前端monorepo

    综上所述,“ts-lerna-base”项目采用TypeScript和Lerna构建,旨在创建一个高效的后端与前端Monorepo开发环境,通过强类型语言和先进的项目管理工具,提升代码质量和团队协作效率。这样的项目结构对于大型、复杂的...

    S2SH整合例子 注解配置 JSON 泛型Dao

    在实际开发中,`base`可能是指基础配置文件或者示例代码,包括Spring的bean配置文件(如`beans.xml`)、Struts2的配置文件(如`struts.xml`)、Hibernate的实体类以及相应的映射文件(如`.hbm.xml`)。这些配置文件...

    C#轻量级开发工具.net Asp

    - BCL(Base Class Library):提供大量预定义的类库,如集合、文件操作、网络通信等,简化开发工作。 - ADO.NET:用于数据库访问,支持SQL Server、Oracle等多种数据库。 3. **ASP.NET Web开发** - ASP.NET页面...

    分布式系统原理与泛型课件

    分布式系统原理与泛型是计算机科学中的重要概念,它们在现代软件开发,特别是大型互联网服务中扮演着核心角色。分布式系统是由多个独立的计算机节点通过网络进行通信和协作,共同完成一个任务或提供一个服务。而泛型...

    7.内部类、泛型、递归、IO、异常.md

    ### 内部类 #### 1. 静态内部类 静态内部类(Static Inner Class...通过以上对内部类、泛型、递归、IO和异常处理的详细解析,我们可以更深入地理解这些概念,并在实际开发中灵活运用它们来构建更健壮、更高效的程序。

    MybatisBaseSqlProvider:mybatis-base-sql-provider

    4. **泛型支持**:为了提高代码的可复用性,MybatisBaseSqlProvider可能支持泛型,允许开发者在定义Mapper接口时使用类型参数,这样同一个Mapper接口就可以服务于多个实体类。 5. **自定义SqlProvider**:除了预定...

    data-base-course-project

    TypeScript是JavaScript的一个超集,由微软开发并维护,它引入了静态类型系统和面向对象的特性,如接口、类和泛型,使得在大型项目中编写更稳定、更易于调试的代码成为可能。在数据库项目中,TypeScript的应用能够...

    C#.2010.for.Programmers.4nd.Edition

    - **泛型类型**:解释什么是泛型类型,如何在类、结构和方法中使用泛型。 - **泛型集合**:详细介绍.NET Framework中常用的泛型集合,如List、Dictionary, TValue&gt;等。 #### 3. 并发与多线程 - **线程基础**:介绍...

    Visual C# 2005开发技术

    - **Base Class Library (BCL)**:提供了大量预定义的类库,如System.IO(文件I/O)、System.Collections(集合)等,用于日常开发。 3. **Windows Forms开发** - **UI设计**:Visual Studio 2005提供直观的拖放...

    c#&编程实战宝典&本书源文件

    - 泛型:理解泛型的概念,以及如何使用泛型类、泛型接口和泛型方法提高代码复用性。 - Lambda表达式与匿名方法:掌握这些简洁的代码表示形式,用于简化回调和 LINQ 查询。 - LINQ(Language Integrated Query):...

    GKD-BasePL_SQL游标实现关键技术.pdf

    通过泛型编程,可以创建一个通用的数据结构来存储这些信息,简化符号表的实现。 3. **编译器实现**:游标编译器负责将游标相关的SQL语句解析成中间代码,这包括词法分析、语法分析和生成语法树。这个阶段确保了SQL...

    C#规范 2.0

    泛型方法与泛型类类似,但它们可以存在于非泛型类中。例如: ```csharp public class SomeClass { public void Swap(ref T x, ref T y) { T temp = x; x = y; y = temp; } } ``` ##### 2. 匿名方法 **...

    入门必知基础点,不知道就要挨两个巴掌的了;

    - 泛型:泛型提供了一种方式来创建可重用的代码,而无需为每种数据类型都编写单独的版本。 - 静态与实例成员:理解静态类和静态方法与实例对象的区别。 - Lambda表达式与LINQ:Lambda简化了匿名函数的书写,LINQ...

    .net相关试题集

    .NET框架是微软开发的一款软件开发平台,旨在提供一个统一、高效、安全的编程环境,支持多种编程语言。根据给定的文件信息,我们可以提炼出以下关键知识点: ### .NET框架的组成部分 - **框架类库(FCL)**:包含了...

    c# .net 面试题整理

    - BCL(Base Class Library):熟悉.NET提供的基础类库,如System.IO、System.Collections等命名空间中的类。 3. **泛型** - 泛型的概念:理解泛型可以提高代码的复用性和类型安全性。 - 泛型类、泛型接口和泛型...

    C#.NET学习课件(ppt)

    - 泛型类和泛型方法:学习如何使用泛型提高代码的复用性,减少类型转换。 - 泛型接口和泛型委托:理解其在设计模式中的应用。 4. **集合与LINQ** - 集合框架:如List、Dictionary,TValue&gt;等,学习如何操作和管理...

    AndroidBase

    它简化了组件间的通信,使得发送和接收事件变得轻而易举,减少了类之间的耦合。 `LitePal`是一个轻量级的数据库框架,基于SQLite,简化了数据库的操作。通过注解和泛型,开发者可以轻松地进行增删改查,而无需编写...

Global site tag (gtag.js) - Google Analytics