Spring整合Hibernate的DAO模式的通用接口和适配器

通用的DAO接口:
package org.dave.base.dao;

import java.util.List;

public interface BaseDAO {

	public void save(Object entity);

	public void delete(Object entity);

	public Object findById(String id);

	public List findAll();

	public List findByExample(Object exampleEntity);

	public List findByProperty(String field, Object value);

	public List findByProperty(String field, Object minValue, Object maxValue);

	public List findByLinkProperty(String field, Object value);

	public Object merge(Object entity);

	public void attachDirty(Object entity);

	public void attachClean(Object entity);

}


公共的DAO适配器:
package org.dave.base.dao.adapter;

import java.util.List;

import org.dave.base.dao.BaseDAO;
import org.hibernate.LockMode;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public abstract class BaseDAOAdapter extends HibernateDaoSupport implements BaseDAO {

	protected BaseDAOAdapter() {

	}

	public void save(Object entity) {
		getHibernateTemplate().saveOrUpdate(entity);
	}

	public void delete(Object entity) {
		getHibernateTemplate().delete(entity);
	}

	public List findAll(String entityName) {
		String queryString = "from " + entityName;
		return getHibernateTemplate().find(queryString);
	}

	public Object findById(String entityName, String id) {
		return getHibernateTemplate().get(entityName, id);
	}

	public List findByProperty(String entityName, String field, Object value) {
		String queryString = "from " + entityName + " as model where model." + field + "= ?";
		return getHibernateTemplate().find(queryString, value);
	}

	public List findByProperty(String entityName, String field, Object minValue, Object maxValue) {
		String queryString = "from " + entityName + " as model where model." + field + ">? and model." + field + "<?";
		String[] values = { minValue, maxValue };
		return getHibernateTemplate().find(queryString, values);
	}

	public List findByProperty(String entityName, String field, String value) {
		String queryString = "from " + entityName + " as model where model." + field + "link '%" + value + "%'";
		return getHibernateTemplate().find(queryString);
	}

	public List findByExample(Object exampleEntity) {
		return getHibernateTemplate().findByExample(exampleEntity);
	}

	public Object merge(Object entity) {
		return getHibernateTemplate().merge(entity);
	}

	public void attachDirty(Object entity) {
		getHibernateTemplate().saveOrUpdate(entity);
	}

	public void attachClean(Object entity) {
		getHibernateTemplate().lock(entity, LockMode.NONE);
	}

}


例子:
2.DAO接口:
package org.dave.user.dao;

import java.util.List;

import org.dave.base.dao.BaseDAO;

public interface UserDAO extends BaseDAO {
	
	public List findByUsername(String username);
	
	public List findByUserpass(String userpass);
	
}


3.DAO类:
package org.dave.user.dao.impl;

import java.util.List;

import org.dave.base.dao.adapter.BaseDAOAdapter;
import org.dave.user.dao.UserDAO;

public class UserDAOImpl extends BaseDAOAdapter implements UserDAO {

	public static final String USER = "org.dave.user.model.User";
	public static final String USERNAME = "username";
	public static final String USERPASS = "userpass";

	public List findAll() {
		return super.findAll(USER);
	}

	public Object findById(String id) {
		return super.findById(USER, id);
	}

	public List findByProperty(String field, Object value) {
		return super.findByProperty(USER, field, value);
	}

	public List findByProperty(String field, Object minValue, Object maxValue) {
		return super.findByProperty(USER, field, minValue, maxValue);
	}

	public List findByLinkProperty(String field, String value) {
		return super.findByProperty(USER, field, value);
	}

	public List findByUsername(String username) {
		return this.findByProperty(USERNAME, username);
	}

	public List findByUserpass(String userpass) {
		return this.findByProperty(USERPASS, userpass);
	}

}

你可能感兴趣的:(java,DAO,spring,Hibernate,orm)