本文章主要讲了两个技巧,一是在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#中的...通过合理地设计泛型类和接口,可以创建出强大的、可复用的组件,简化代码维护,提升开发效率。
- 泛型提供了一种在编译时增强类型安全性的方法,可以创建适用于多种类型的类、接口和方法。 5. **集合与LINQ** - 集合(如ArrayList、LinkedList、HashSet等)用于存储和操作一组数据。 - LINQ(Language ...
综上所述,“ts-lerna-base”项目采用TypeScript和Lerna构建,旨在创建一个高效的后端与前端Monorepo开发环境,通过强类型语言和先进的项目管理工具,提升代码质量和团队协作效率。这样的项目结构对于大型、复杂的...
在实际开发中,`base`可能是指基础配置文件或者示例代码,包括Spring的bean配置文件(如`beans.xml`)、Struts2的配置文件(如`struts.xml`)、Hibernate的实体类以及相应的映射文件(如`.hbm.xml`)。这些配置文件...
- BCL(Base Class Library):提供大量预定义的类库,如集合、文件操作、网络通信等,简化开发工作。 - ADO.NET:用于数据库访问,支持SQL Server、Oracle等多种数据库。 3. **ASP.NET Web开发** - ASP.NET页面...
分布式系统原理与泛型是计算机科学中的重要概念,它们在现代软件开发,特别是大型互联网服务中扮演着核心角色。分布式系统是由多个独立的计算机节点通过网络进行通信和协作,共同完成一个任务或提供一个服务。而泛型...
### 内部类 #### 1. 静态内部类 静态内部类(Static Inner Class...通过以上对内部类、泛型、递归、IO和异常处理的详细解析,我们可以更深入地理解这些概念,并在实际开发中灵活运用它们来构建更健壮、更高效的程序。
4. **泛型支持**:为了提高代码的可复用性,MybatisBaseSqlProvider可能支持泛型,允许开发者在定义Mapper接口时使用类型参数,这样同一个Mapper接口就可以服务于多个实体类。 5. **自定义SqlProvider**:除了预定...
TypeScript是JavaScript的一个超集,由微软开发并维护,它引入了静态类型系统和面向对象的特性,如接口、类和泛型,使得在大型项目中编写更稳定、更易于调试的代码成为可能。在数据库项目中,TypeScript的应用能够...
- **泛型类型**:解释什么是泛型类型,如何在类、结构和方法中使用泛型。 - **泛型集合**:详细介绍.NET Framework中常用的泛型集合,如List、Dictionary, TValue>等。 #### 3. 并发与多线程 - **线程基础**:介绍...
- **Base Class Library (BCL)**:提供了大量预定义的类库,如System.IO(文件I/O)、System.Collections(集合)等,用于日常开发。 3. **Windows Forms开发** - **UI设计**:Visual Studio 2005提供直观的拖放...
- 泛型:理解泛型的概念,以及如何使用泛型类、泛型接口和泛型方法提高代码复用性。 - Lambda表达式与匿名方法:掌握这些简洁的代码表示形式,用于简化回调和 LINQ 查询。 - LINQ(Language Integrated Query):...
通过泛型编程,可以创建一个通用的数据结构来存储这些信息,简化符号表的实现。 3. **编译器实现**:游标编译器负责将游标相关的SQL语句解析成中间代码,这包括词法分析、语法分析和生成语法树。这个阶段确保了SQL...
泛型方法与泛型类类似,但它们可以存在于非泛型类中。例如: ```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框架的组成部分 - **框架类库(FCL)**:包含了...
- BCL(Base Class Library):熟悉.NET提供的基础类库,如System.IO、System.Collections等命名空间中的类。 3. **泛型** - 泛型的概念:理解泛型可以提高代码的复用性和类型安全性。 - 泛型类、泛型接口和泛型...
- 泛型类和泛型方法:学习如何使用泛型提高代码的复用性,减少类型转换。 - 泛型接口和泛型委托:理解其在设计模式中的应用。 4. **集合与LINQ** - 集合框架:如List、Dictionary,TValue>等,学习如何操作和管理...
它简化了组件间的通信,使得发送和接收事件变得轻而易举,减少了类之间的耦合。 `LitePal`是一个轻量级的数据库框架,基于SQLite,简化了数据库的操作。通过注解和泛型,开发者可以轻松地进行增删改查,而无需编写...