1.概述
SpringSide的DAO层两个特点:
1.DAO层与Business层合并,且省略DAO接口,用cglib方式实现AOP事务控制。
2.基于范型的强基类,普通DAO类只要用声明所要管理的Entity类型即拥有完整的CRUD操作。
结果就是,普通的Manager类只有一个文件,数行代码。
同时,当逻辑比较复杂,Manager类比较庞大时,可以内部重构拆分为Dao与Manager,但这个重构行为是内部的,不造成影响的。因为其他类调用的始终是Manager。
2. HibernateGenericDao
SpringSide 在Spring HibernateDaoSupport基础上封装的DAO,功能如下:
1.应用范型,使得find(), get() 这些函数不再返回Object,不再需要强制类型转换。
2.提供各种finder的简便函数
应用了JDK5可变参数的hsql查询函数:List find(String hql, Object... s)
简单查询的简化函数:findBy(Class entityClass,String name,Object ) ,findUniqueBy(Class entityClass,String name, Object ),findByLike(Class entityClass,String name,Object )
3.分页函数:Page pagedQuery(Criteria criteria, int pageNo, int pageSize) /Page pagedQuery(String hql, int pageNo, int pageSize, Object... args) 。
4.判别对象属性在数据库中唯一的函数:isNotUnique(entityClass, Object entity, String names)。
3. HibernateEntityDao
所有UserManager, ProductManager之类只管理一类对象的Manager类的基类,只需要在类定义处声明Entity类型即可
public class BookManager extends HibernateEntityDao<Book> {}
4. IBatisGenericDao
SpringSide 在Spring SqlMapClientDaoSupport基础上封装的DAO,功能如下:
1.应用范型,使得find(), get() 这些函数不再返回Object,不再需要强制类型转换。
2.提供各种finder的简便函数
应用了JDK5可变参数的hsql查询函数:List find(String hql, Object... s)
简单查询的简化函数:findBy(Class entityClass,String name,Object ) ,findUniqueBy(Class entityClass,String name, Object ),findByLike(Class entityClass,String name,Object )
3.分页函数:Page pagedQuery(Criteria criteria, int pageNo, int pageSize) /Page pagedQuery(String hql, int pageNo, int pageSize, Object... args) 。
4.由于IBatis本身的特性,因此有少数方法的使用和HiberGenericDAO不太一样,如save传入的必须是一个指定操作方式的map(参看helloworld下面的UserManagerIBatisTest)
5. IBatisEntityDao
所有UserManager, ProductManager之类只管理一类对象的Manager类的基类,只需要在类定义处声明Entity类型即可
public class BookManager extends IBatisEntityDao<Book> {}