`
lyuno
  • 浏览: 15822 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

关于BaseDAO要注意的问题

阅读更多
、引用茶叶写的一个baseDAO

package com.juno.dao.service;

import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import org.hibernate.SessionFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Component;

/**
 * 所有Dao类的父类
 * 
 * @author macrotea 2011-2-31
 * @param <T>
 */

@Component("baseDao")
public class BaseDao<T, ID> extends HibernateDaoSupport {
	private static final Logger logger = LoggerFactory.getLogger(BaseDao.class);

	/**
	 * 设置Dao将操作的实体
	 */
	private Class<T> entityClazz;

	public Class<T> getEntityClazz() {
		return entityClazz;
	}

	public void setEntityClazz(Class<T> entityClazz) {
		this.entityClazz = entityClazz;
	}

	public BaseDao() {
		super();
	}

	public BaseDao(Class<T> entityClazz) {
		this.entityClazz = entityClazz;
	}

	/**
	 * 设置hibernateTemplate所需的SessionFactory
	 */
	@Resource
	public void setLocalSessionFactory(SessionFactory sessionFactory) {
		super.setSessionFactory(sessionFactory);
	}

	/**
	 * 获得所有实体记录
	 */
	@SuppressWarnings("unchecked")
	public List<T> findAll() throws Exception {
		return getHibernateTemplate().find("FROM " + entityClazz.getSimpleName());
	}

	/**
	 * 保存一个实体
	 */
	@SuppressWarnings("unchecked")
	public ID save(T obj) throws Exception {
		return (ID) getHibernateTemplate().save(obj);
	}

	/**
	 * 保存/更新一个实体
	 */
	public void saveOrUpdate(T obj) throws Exception {
		getHibernateTemplate().saveOrUpdate(obj);
	}

	/**
	 * 根据id获得一个实体
	 */
	@SuppressWarnings("unchecked")
	public T findById(int id) throws Exception {
		T retVal = (T) getHibernateTemplate().get(entityClazz, id);
		if (retVal == null) {
			logger.debug("get:该ID:" + id + " 的实体不存在!");
		}
		return retVal;
	}

	/**
	 * 根据id加载一个实体
	 */
	@SuppressWarnings("unchecked")
	public T loadById(int id) throws Exception {
		T retVal = (T) getHibernateTemplate().load(entityClazz, id);
		return retVal;
	}

	/**
	 * 根据id删除一个实体
	 */
	public void deleteById(int id) throws Exception {
		T entity = loadById(id);
		if (entity == null) {
			String msg = "delete:该ID:" + id + " 的实体不存在!";
			throw new Exception(msg);
		}
		getHibernateTemplate().delete(entity);
	}

	/**
	 * 获得所有实体记录总数
	 */
	@SuppressWarnings("unchecked")
	public Long countAll() throws Exception {
		List retVal = getHibernateTemplate().find("SELECT count(*) FROM " + entityClazz.getSimpleName());
		return (Long) retVal.get(0);
	}

	/**
	 * 根据属性和属性值查找
	 */
	@SuppressWarnings("unchecked")
	public List findByProperty(String propertyName, Object value) throws Exception {
		System.out.println("findByProperty value:" + value);
		List retVal = getHibernateTemplate().find("from " + entityClazz.getSimpleName() + " as model where model." + propertyName + "= ?", value);
		return retVal;
	}

	/**
	 * 根据多个id查找
	 */
	public List<T> findByIdArray(Integer[] idArray) throws Exception {
		List<T> retVal = new ArrayList<T>();
		T model = null;
		for (int i = 0; i < idArray.length; i++) {
			model = findById(idArray[i]);
			retVal.add(model);
		}
		return retVal;
	}
}


然后自己写一个dao类来继承basedao
package com.juno.dao.service.impl;

import org.springframework.stereotype.Component;

import com.juno.bean.Hello;
import com.juno.dao.service.BaseDao;
import com.juno.dao.service.HelloDAO;

/**
 * @author Juno
 * 
 */
@Component("helloDao")
public class HelloDAOImpl extends BaseDao<Hello, Integer> implements HelloDAO {
	// property constants
	public static final String USERNAME = "username";
	public static final String AGE = "age";

	/*
	 * 如下方式调用父类方法:super.XXX()
	 */
	public HelloDAOImpl() {
		super(Hello.class);
	}

	@Override
	public void update(Hello Hello) throws Exception {

	}
}
  这时候、一定要记住加上
	public HelloDAOImpl() {
		super(Hello.class);
	}
这个构造方法!要不无效!
分享到:
评论
2 楼 lyuno 2011-04-25  
macrotea 写道
是啊
这个是必须的!
正因为这个问题
我发了一个帖子问网上的人,如何从泛型中获得传入的类
这样就不用再在实现类中的构造中 super(Hello.class); 

http://topic.csdn.net/u/20110424/14/6ce56884-aa0c-4594-beed-26ecf5b8f8a5.html

我前几天、直接就用你的这个dao搞了我几个小时、说找不到连接、然后在想怎么传进去!终于搞掂了!!
1 楼 macrotea 2011-04-25  
是啊
这个是必须的!
正因为这个问题
我发了一个帖子问网上的人,如何从泛型中获得传入的类
这样就不用再在实现类中的构造中 super(Hello.class); 

http://topic.csdn.net/u/20110424/14/6ce56884-aa0c-4594-beed-26ecf5b8f8a5.html

相关推荐

Global site tag (gtag.js) - Google Analytics