- 浏览: 4190 次
- 性别:
- 来自: 深圳
文章分类
最新评论
接口
到现在为止,Hibernate通用DAO已经建立完成,作为一个通用的工具类,我们希望每个实体DAO都能继承这个DAO。继续发扬接口编程,每一个持久化实体类我们都建立一个接口,并且让这些接口都继承IBaseDAO。
ParticipantDAO的写法:
public interface ParticipantDAO extends IBaseDAO<TWfParticipants, Integer>{
//自定义该实体的接口
}
ParticipantDAO实现类的写法:
public class ParticipantDAOImpl extends
BaseHibernateDAO<TWfParticipants, Integer> implements
ParticipantDAO {
public ParticipantDAOImpl() {
super(TWfParticipants.class);
}
//实现自定义的方法
}
注:在BaseHibernateDAO的无参数构造函数中
public BaseHibernateDAO() {
//下面这种方式一直有错误,不能得到真正的T.class,迌是Object.class
// this.persistentClass=GenericsUtils.getSuperClassGenricType(getClass());
}
这种方式的写法在springside中使用过,但是自己调试始终有错误,始终无法得到T.class,得到的只是Oject.class,不知道怎么解决,还请高人指点。
以下是我的替代方法,可能不是太好。构建一个带有Class参数的构造函数,让每个DAO硬性传入class。
public BaseHibernateDAO(Class clazz) {
this.persistentClass = clazz;
}
然后在子类DAO的构造参数中向父类传递一个class,因为一个DAO对应着一个实体,所以传入一个实体的class也是没有什么不可以的。
public ParticipantDAOImpl() {
super(TWfParticipants.class);
}
补充GenericsUtils.java:
public class GenericsUtils {
private static final Log log = LogFactory.getLog(GenericsUtils.class);
private GenericsUtils() {
}
/**
* 通过反射,获得定义Class时声明的父类的范型参数的类型. 如public BookManager extends GenricManager<Book>
*
* @param clazz
* The class to introspect
* @return the first generic declaration, or <code>Object.class</code> if
* cannot be determined
*/
public static Class getSuperClassGenricType(Class clazz) {
return getSuperClassGenricType(clazz, 0);
}
/**
* 通过反射,获得定义Class时声明的父类的范型参数的类型. 如public BookManager extends GenricManager<Book>
*
* @param clazz
* clazz The class to introspect
* @param index
* the Index of the generic ddeclaration,start from 0.
*/
public static Class getSuperClassGenricType(Class clazz, int index)
throws IndexOutOfBoundsException {
Type genType = clazz.getGenericSuperclass();
// Type genType = clazz;
if (!(genType instanceof ParameterizedType)) {
log.warn(clazz.getSimpleName()
+ "'s superclass not ParameterizedType");
return clazz;
}
Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
if (index >= params.length || index < 0) {
log.warn("Index: " + index + ", Size of " + clazz.getSimpleName()
+ "'s Parameterized Type: " + params.length);
return Object.class;
}
if (!(params[index] instanceof Class)) {
log
.warn(clazz.getSimpleName()
+ " not set the actual class on superclass generic parameter");
return Object.class;
}
return (Class) params[index];
}
}
import java.io.Serializable; import java.util.Collection; import java.util.Iterator; import java.util.List; import org.hibernate.Criteria; import org.hibernate.LockMode; import org.hibernate.criterion.Criterion; import org.hibernate.criterion.DetachedCriteria; /** * 承有业务数据的基础访问接口 * <p> * 承有CRUD (创建,读取,修改和删陿)基本数据的操作在这个接口中都是独立的_ 并且承有的DAO都可以使用这些基本实玿 * * @author yongtree * * @date:2008-03-04 */ public interface IBaseDAO<T, ID extends Serializable> { /*************************************************************************** * -------------------基本棿索㿁增加㿁修改㿁删除操使---------------------------- * **************************************************************************/ // --------findById()方法是鿚过get(ID id)得到实体对象----------------------- /** * 通过ID来得到实体对豿 * * @param id * 实体对象的标识符 * @param lock * 使用的锁模式 * @return 该主键忼对应的实体对象 */ public T findById(ID id, LockMode lock); /** * 通过ID来得到实体对豿 * * @param id * @return T */ public T findById(ID id); /** * 通过ID来得到实体对豿(为兼容其他开发成员的原有程序,保留使甿) * * @param c * @param id * @return T */ public T findById(Class c, ID id); // -------------loadById()是调用hibernate的load方法------------ public T loadById(ID id); /** * 通过id load对象 * * @param id * @param lock * @return */ public T loadById(ID id, LockMode lock); /** * 获取全部的实使 * * @return */ public List<T> loadAll(); /** * 保存丿个实体对豿 * * @param entity */ public T saveEntity(T entity); /** * 更新丿个实体对豿 * * @param entity */ public void updateEntity(T entity); public void updateEntity(T entity, LockMode lock); /** * 增加或更新集合中的全部实使 * * @param entities */ public void saveOrUpdateAll(Collection<T> entities); /** * 删除丿个实使 * * @param entity * @throws Exception */ public void deleteEntity(T entity); public void deleteEntity(T entity, LockMode lock); /** * 根据主键删除指定实体 * * @param id */ public void deleteEntityById(ID id); public void deleteEntityById(ID id, LockMode lock); /** * 批量删除 * * @param entities */ public void deleteAll(Collection<T> entities); /** * 通过合并的方式更新对豿 * * @param entity * void */ public void merge(T entity); /*************************************************************************** * ------------------------------使用HQL语句-------------------------------- * **************************************************************************/ /** * 使用HQL语句进行对象的查诿 * * @param hsql * 查询语句 * @return 符合条件的对豿 */ public T getEntity(String hsql); /** * 使用HQL语句进行查询 * * @param hsql * 查询语句 * @return 符合条件的对象集吿 */ public List<T> getEntities(String hsql); /** * 使用带参数的HQL语句进行查询 * * @param hsql * @param obj * @return */ public List<T> getEntities(String hsql, Object[] values); public List<T> getEntities(String hql, int start, int number); public List<T> getEntities(String hql, int start, int number, Object[] values); /** * 使用命名的HQL语句棿索数捿 * * @param queryName * @return */ public List<T> findByNamedQuery(String queryName); /** * 使用带参数的命名HSQL语句棿索数捿 * * @param queryName * @param values * @return */ public List<T> findByNamedQuery(String queryName, Object[] values); /** * 使用带命名参数的命名HSQL语句棿索数捿 * * @param queryName * @param paramNames * @param values * @return */ public List<T> findByNamedQuery(String queryName, String[] paramNames, Object[] values); /** * 使用HQL语句棿索数据,返回 Iterator * * @param queryString * @return */ public Iterator<T> iterate(String queryString); /** * 使用带参数HSQL语句棿索数据,返回 Iterator * * @param queryString * @param values * @return */ public Iterator<T> iterate(String queryString, Object[] values); /*************************************************************************** * -----------------------------Criteria动濁查诿---------------------------- * **************************************************************************/ /** * 创建与会话无关的棿索标准对豿 */ public DetachedCriteria createDetachedCriteria(); /** * 创建与会话绑定的棿索标准对豿 * * @return */ public Criteria createCriteria(); /** * 使用指定的检索标准检索数捿 * * @param criteria * @return */ public List<T> findByCriteria(DetachedCriteria criteria); /** * 使用指定的检索标准检索数据,返回部分记录 * * @param criteria * @param firstResult * @param maxResults * @return */ public List<T> findByCriteria(DetachedCriteria criteria, int firstResult, int maxResults); /** * 通过动濁查询条件进行查诿 * * @param criterion * @return List<T> */ @SuppressWarnings("unchecked") public List<T> findByCriteria(Criterion criterion); /** * 使用指定的检索标准检索数据,返回指定范围的记彿 * * @param criteria * @return */ public Integer getRowCount(DetachedCriteria criteria); /** * 使用指定的检索标准检索数据,返回指定统计倿 * * @param criteria * @param propertyName * @param StatName * (max,min,avg,sum) * @return */ public Object getStatValue(DetachedCriteria criteria, String propertyName, String StatName); /** * 通过给定的一个对象,查找与其匹配的对象,表关联比较多时,用户可以自己根据霿要扩展㿿 * * @param entity * @return List<T> */ public List<T> findByExample(T entity); /*************************************************************************** * -------------------------Others ----------------------------------------* **************************************************************************/ /** * 加锁指定的实使 * * @param entity * @param lockMode */ public void lock(T entity, LockMode lockMode); /** * 强制立即更新缓冲数据到数据库(否则仅在事务提交时才更新) */ public void flush(); /** * 清空缓存 * * void */ public void clear(); /*************************************************************************** * --------------------------------相关知识炿--------------------------------* * * 1、Session的load方法和get方法都是通过给定的ID从数据库中加载一个持久化的对象㿂但两个斿* * 法的区别在于:当数据库不存在于ID对应的记录时,load()方法抛出异常,迌get()方法返回null* ***************************************************************************/ }
/** * @filename:BaseHibernateDAO.java */ import java.io.Serializable; import java.util.Collection; import java.util.Iterator; import java.util.List; import org.hibernate.Criteria; import org.hibernate.LockMode; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.criterion.Criterion; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Example; import org.hibernate.criterion.MatchMode; import org.hibernate.criterion.Projections; import com.baiyyy.workflow.pojo.TWfPackage; /** * 用Hibernate实现通用DAO接口 * * @author yongtree * @date 2008-3-10 * @param <T> * @param <ID> */ public class BaseHibernateDAO<T, ID extends Serializable> implements IBaseDAO<T, ID> { // 保持实体对象类的类型 private Class<T> persistentClass; private Session session; /** * 构鿠方泿 */ @SuppressWarnings("unchecked") public BaseHibernateDAO() { //下面这种方式丿直有错误,不能得到真正的T.class,迌是Object.class // this.persistentClass=GenericsUtils.getSuperClassGenricType(getClass()); // System.out.println(obj.getClass().getName()); } @SuppressWarnings("unchecked") public BaseHibernateDAO(Class clazz) { this.persistentClass = clazz; } /** * @param session * the session to set */ public void setSession(Session session) { this.session = session; } /** * 得到当前线程的Session对象的实便 * * @return */ protected Session getSession() { System.out.println("get session"); return HibernateUtil.getCurrentSession(); } /** * 得到持久化对象的类型 * * @return 持久化类的类垿 */ protected Class<T> getPersistentClass() { return persistentClass; } @SuppressWarnings("unchecked") public T findById(ID id, LockMode lock) { // TODO Auto-generated method stub T entity = (T) getSession().get(getPersistentClass(), id, lock); if (entity != null) { this.flush(); } return entity; } @SuppressWarnings("unchecked") public T findById(Class c, ID id) { // TODO Auto-generated method stub T entity; entity = (T) getSession().get(c, id); return entity; } @SuppressWarnings("unchecked") public T findById(ID id) { // TODO Auto-generated method stub T entity = (T) getSession().get(getPersistentClass(), id); return entity; } @SuppressWarnings("unchecked") public T loadById(ID id) { // TODO Auto-generated method stub T entity = (T) getSession().load(getPersistentClass(), id); return entity; } @SuppressWarnings("unchecked") public T loadById(Class c, ID id) { // TODO Auto-generated method stub T entity = (T) getSession().load(c, id); return entity; } @SuppressWarnings("unchecked") public T loadById(ID id, LockMode lock) { // TODO Auto-generated method stub T entity = (T) getSession().load(getPersistentClass(), id, lock); return entity; } @SuppressWarnings("unchecked") public List<T> loadAll() { List<T> list = getSession().createQuery( "from " + getPersistentClass().getName()).list(); return list; } public T saveEntity(T entity) { // TODO Auto-generated method stub getSession().save(entity); this.flush(); return entity; } public void updateEntity(T entity) { // TODO Auto-generated method stub getSession().saveOrUpdate(entity); this.flush(); } /** * 该实现类暂时没有实现更新加锁的操使 */ public void updateEntity(T entity, LockMode lock) { // TODO Auto-generated method stub getSession().saveOrUpdate(entity); this.flush(); } public void saveOrUpdateAll(Collection<T> entities) { getSession().saveOrUpdate(entities); this.flush(); } public void deleteEntity(T entity) { // TODO Auto-generated method stub getSession().delete(entity); this.flush(); } /** * 该实现没有实现加锁删除对象的操作,在spring的DAO实现中已经实玿 */ public void deleteEntity(T entity, LockMode lock) { // TODO Auto-generated method stub getSession().delete(entity); this.flush(); } public void deleteEntityById(ID id) { this.deleteEntity(this.loadById(id)); this.flush(); } // 该实现没有实现加锁的删除,在spring的dao中已经实现了 public void deleteEntityById(ID id, LockMode lock) { this.deleteEntity(this.loadById(id)); this.flush(); } public void deleteAll(Collection<T> entities) { this.flush(); getSession().delete(entities); } public void merge(T entity){ getSession().merge(entity); this.flush(); } @SuppressWarnings("unchecked") public T getEntity(String hsql) { T uniqueResult = (T) getSession().createQuery(hsql).uniqueResult(); // TODO Auto-generated method stub return uniqueResult; } @SuppressWarnings("unchecked") public List<T> getEntities(String hsql) { // TODO Auto-generated method stub List list = getSession().createQuery(hsql).list(); return list; } @SuppressWarnings("unchecked") public List<T> getEntities(String hql, int start, int number, Object[] values) { // TODO Auto-generated method stub Query query = getSession().createQuery(hql); for (int i = 0; i < values.length; i++) { query.setParameter(i, values[i]); } query.setFirstResult(start); query.setMaxResults(number); List list = query.list(); return list; } @SuppressWarnings("unchecked") public List<T> getEntities(String hql, int start, int number) { // TODO Auto-generated method stub Query query = getSession().createQuery(hql); query.setFirstResult(start); query.setMaxResults(number); List list = query.list(); return list; } @SuppressWarnings("unchecked") public List<T> getEntities(String hql, Object[] values) { // TODO Auto-generated method stub Query query = getSession().createQuery(hql); for (int i = 0; i < values.length; i++) { query.setParameter(i, values[i]); } return query.list(); } @SuppressWarnings("unchecked") public List<T> findByNamedQuery(String queryName) { // TODO Auto-generated method stub return getSession().getNamedQuery(queryName).list(); } @SuppressWarnings("unchecked") public List<T> findByNamedQuery(String queryName, Object[] values) { // TODO Auto-generated method stub Query query = getSession().getNamedQuery(queryName); for (int i = 0; i < values.length; i++) { query.setParameter(i, values); } return query.list(); } /** * 注意:该方法是鿚过设置参数来进行命名查询,承以在传参数时,一定要注意paramNames和values的长度,位置要一丿对应〿 */ @SuppressWarnings("unchecked") public List<T> findByNamedQuery(String queryName, String[] paramNames, Object[] values) { // TODO Auto-generated method stub Query query = getSession().getNamedQuery(queryName); for (int i = 0; i < paramNames.length; i++) { query.setParameter(paramNames[i], values[i]); } return query.list(); } @SuppressWarnings("unchecked") public Iterator<T> iterate(String hql) { // TODO Auto-generated method stub return getSession().createQuery(hql).iterate(); } @SuppressWarnings("unchecked") public Iterator<T> iterate(String hql, Object[] values) { // TODO Auto-generated method stub Query query = getSession().createQuery(hql); for (int i = 0; i < values.length; i++) { query.setParameter(i, values[i]); } return query.iterate(); } public DetachedCriteria createDetachedCriteria() { // TODO Auto-generated method stub return DetachedCriteria.forClass(this.persistentClass); } public Criteria createCriteria() { // TODO Auto-generated method stub return this.createDetachedCriteria().getExecutableCriteria( this.getSession()); } /** * 该方法没有经过验证,不能保证正确,在spring的实现中已经实现亿 */ @SuppressWarnings("unchecked") public List<T> findByCriteria(DetachedCriteria criteria) { // TODO Auto-generated method stub return criteria.getExecutableCriteria(this.getSession()).list(); } @SuppressWarnings("unchecked") public List<T> findByCriteria(DetachedCriteria criteria, int firstResult, int maxResults) { // TODO Auto-generated method stub return criteria.getExecutableCriteria(this.getSession()) .setFirstResult(firstResult).setMaxResults(maxResults).list(); } /** * 动濁查诿 * * @param criterion * @return */ public @SuppressWarnings("unchecked") List<T> findByCriteria(Criterion criterion) { Criteria crit = getSession().createCriteria(getPersistentClass()); for (Criterion c : criterion) { if (c != null) { crit.add(c); } } List list = crit.list(); return list; } @SuppressWarnings("unchecked") public Integer getRowCount(DetachedCriteria criteria) { // TODO Auto-generated method stub criteria.setProjection(Projections.rowCount()); List list = this.findByCriteria(criteria, 0, 1); return (Integer) list.get(0); } @SuppressWarnings("unchecked") public Object getStatValue(DetachedCriteria criteria, String propertyName, String StatName) { // TODO Auto-generated method stub if (StatName.toLowerCase().equals("max")) criteria.setProjection(Projections.max(propertyName)); else if (StatName.toLowerCase().equals("min")) criteria.setProjection(Projections.min(propertyName)); else if (StatName.toLowerCase().equals("avg")) criteria.setProjection(Projections.avg(propertyName)); else if (StatName.toLowerCase().equals("sum")) criteria.setProjection(Projections.sum(propertyName)); else return null; List list = this.findByCriteria(criteria, 0, 1); return list.get(0); } @SuppressWarnings("unchecked") public List<T> findByExample(T exampleInstance) { // TODO Auto-generated method stub Criteria crit = getSession().createCriteria(getPersistentClass()); Example example = Example.create(exampleInstance); example.ignoreCase().enableLike(MatchMode.ANYWHERE);// 忽略大小写,并进行模糊比辿 example.excludeZeroes();// 对于属濧中有数字类型的,如果exampleInstance的属性忼为0,就把它添加到查询中 crit.add(example); return crit.list(); } public void lock(T entity, LockMode lockMode) { // TODO Auto-generated method stub getSession().lock(entity, lockMode); } public void flush() { // TODO Auto-generated method stub getSession().flush(); } public void clear() { // TODO Auto-generated method stub getSession().clear(); } }
到现在为止,Hibernate通用DAO已经建立完成,作为一个通用的工具类,我们希望每个实体DAO都能继承这个DAO。继续发扬接口编程,每一个持久化实体类我们都建立一个接口,并且让这些接口都继承IBaseDAO。
ParticipantDAO的写法:
public interface ParticipantDAO extends IBaseDAO<TWfParticipants, Integer>{
//自定义该实体的接口
}
ParticipantDAO实现类的写法:
public class ParticipantDAOImpl extends
BaseHibernateDAO<TWfParticipants, Integer> implements
ParticipantDAO {
public ParticipantDAOImpl() {
super(TWfParticipants.class);
}
//实现自定义的方法
}
注:在BaseHibernateDAO的无参数构造函数中
public BaseHibernateDAO() {
//下面这种方式一直有错误,不能得到真正的T.class,迌是Object.class
// this.persistentClass=GenericsUtils.getSuperClassGenricType(getClass());
}
这种方式的写法在springside中使用过,但是自己调试始终有错误,始终无法得到T.class,得到的只是Oject.class,不知道怎么解决,还请高人指点。
以下是我的替代方法,可能不是太好。构建一个带有Class参数的构造函数,让每个DAO硬性传入class。
public BaseHibernateDAO(Class clazz) {
this.persistentClass = clazz;
}
然后在子类DAO的构造参数中向父类传递一个class,因为一个DAO对应着一个实体,所以传入一个实体的class也是没有什么不可以的。
public ParticipantDAOImpl() {
super(TWfParticipants.class);
}
补充GenericsUtils.java:
public class GenericsUtils {
private static final Log log = LogFactory.getLog(GenericsUtils.class);
private GenericsUtils() {
}
/**
* 通过反射,获得定义Class时声明的父类的范型参数的类型. 如public BookManager extends GenricManager<Book>
*
* @param clazz
* The class to introspect
* @return the first generic declaration, or <code>Object.class</code> if
* cannot be determined
*/
public static Class getSuperClassGenricType(Class clazz) {
return getSuperClassGenricType(clazz, 0);
}
/**
* 通过反射,获得定义Class时声明的父类的范型参数的类型. 如public BookManager extends GenricManager<Book>
*
* @param clazz
* clazz The class to introspect
* @param index
* the Index of the generic ddeclaration,start from 0.
*/
public static Class getSuperClassGenricType(Class clazz, int index)
throws IndexOutOfBoundsException {
Type genType = clazz.getGenericSuperclass();
// Type genType = clazz;
if (!(genType instanceof ParameterizedType)) {
log.warn(clazz.getSimpleName()
+ "'s superclass not ParameterizedType");
return clazz;
}
Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
if (index >= params.length || index < 0) {
log.warn("Index: " + index + ", Size of " + clazz.getSimpleName()
+ "'s Parameterized Type: " + params.length);
return Object.class;
}
if (!(params[index] instanceof Class)) {
log
.warn(clazz.getSimpleName()
+ " not set the actual class on superclass generic parameter");
return Object.class;
}
return (Class) params[index];
}
}
相关推荐
在实现通用DAO时,反射通常用于动态调用数据库操作的方法,比如SQL查询。例如,在`UsersDAO.java`中,可能有以下代码: ```java public class UsersDAO extends BaseDao<Users> { @Override public void save...
在C#编程中,"通用Dao层"是一个常见的设计模式,用于封装数据库操作,使得业务逻辑层能够专注于处理业务规则,而无需关心底层数据访问的细节。本篇将重点探讨如何利用C#的特性(Attribute)标签来实现这一目标,同时...
泛型通用DAO是这种模式的一种优化,它利用了Java 5.0引入的泛型和反射机制,大大简化了DAO层的编码工作,提高了代码的可复用性和可维护性。 泛型是Java中的一种类型系统扩展,它允许在编译时声明参数化的类型,从而...
在这个"JDBCTemplate+JavaPOJO实现通用DAO"的项目中,我们将探讨如何利用这两者构建一个通用的DAO层。 首先,Java POJO(Plain Old Java Object)是指那些没有特殊约束的简单Java对象,通常用于表示数据库中的实体...
本示例将探讨一个通用DAO的另类实现方法,旨在提高代码复用性和简化开发过程。 首先,理解SSH框架中的DAO设计模式至关重要。DAO是一种设计模式,它为应用程序提供了一种抽象的接口,以便与数据库进行交互,同时避免...
标题中的“hibernate4 通用dao,service”指的是在Java开发中使用Hibernate框架实现的通用数据访问对象(DAO)和业务服务层(Service)。Hibernate是一个流行的对象关系映射(ORM)工具,它允许开发者使用面向对象的...
本篇文章将深入探讨Hibernate的通用Dao设计,帮助开发者理解如何利用Hibernate提高代码复用性和可维护性。 在传统的Java应用程序中,DAO(Data Access Object)层是用于封装数据库访问逻辑的地方,它隔离了业务逻辑...
SSM(Spring-SpringMVC-Mybatis)通用Dao框架是一个常见的Java Web开发架构,它整合了Spring、SpringMVC和Mybatis三个强大的开源框架,为开发者提供了便捷的数据访问和业务逻辑处理能力。这个框架的使用可以显著提高...
自定义通用DAO实现基本的CRUD,比如: public interface BaseDao<T> { int insert(T obj) throws Exception; int update(T obj) throws Exception; int deleteByPrimaryKey(Object key) throws Exception; int ...
Java源代码 一个简单的通用DAO实现 (基于hibernate)面向应用层按POJO类缓存hibernate的session对象.使用举例: DAO dao = DAOFactory.getDAO(POJO.class);//获得一个全局类单例的DAO实例 dao.save(pojo); 你也可以...
本资源“Hibernate_通用DAO模式”提供了一种适用于不同类型表单的DAO实现,基于SSH(Struts2、Spring、Hibernate)框架,特别强调简洁、易懂和高可移植性。 首先,SSH框架是Java Web开发中的经典组合,Struts2负责...
**Hibernate原生通用DAO**是基于Hibernate框架设计的一种简化数据访问操作的方式,它模仿了Spring框架中的`HibernateTemplate`类,旨在提供一个简单易用的DAO(Data Access Object)层,方便开发人员进行数据库操作...
MyBatis 通用DAO(Data Access Object)是一种设计模式,旨在提供一种标准的方式来访问数据库,减少重复代码,提高开发效率。在Java Web开发中,MyBatis作为一个优秀的持久层框架,它支持定制化SQL、存储过程以及...
**标题:“Hibernate的通用DAO”** 在Java编程领域,Hibernate是一个强大的对象关系映射(ORM)框架,它允许开发者以面向对象的方式处理数据库操作,从而减少了对SQL的直接依赖。通用DAO(Data Access Object)是一...
在这个场景中,"SSH中通用DAO类"指的是在SSH框架下设计和实现的可以应用于多种业务场景的数据访问对象(Data Access Object)类。 DAO层是三层架构或MVC架构中的一个重要部分,主要负责与数据库进行交互,将业务...
通用dao,简单全面,所有dao都可以继承这个dao.
通用数据库访问模块(通常称为 DAO,Data Access Object)是一种软件设计模式,用于在应用程序和数据库之间提供一个抽象层。DAO 类的主要目标是隔离业务逻辑层与数据存储层,使得应用程序可以独立于特定的数据库实现...
然而,为了提高代码的复用性和可维护性,通常会设计一个通用DAO(Data Access Object)层来处理基本的数据操作。"hibernate不是泛型的通用DAo1"这个标题暗示了我们讨论的是一种非泛型化的DAO实现,可能是因为开发者...
本文将深入探讨如何将MyBatis与通用Dao(Data Access Object)和通用Mapper进行整合,以提高开发效率和代码复用性。我们将以"Mybatis整合通用Dao,Mybatis整合通用Mapper,MyBatis3.x整合通用Mapper3.5.x"为主题,...