`
lyuno
  • 浏览: 16488 次
  • 性别: 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

相关推荐

    basedao_basedao数据库_

    在IT行业中,数据库操作是应用程序开发中的重要环节。"基于BaseDao的手动数据库操作"是一...在实际开发中,使用BaseDao可以大大提高开发效率,但同时也要注意避免过度抽象和通用性问题,确保代码的可维护性和可扩展性。

    BaseDao标准模板

    根据提供的文件信息,我们可以总结出以下关于`BaseDao`标准模板的重要知识点: ### 1. 概述 `BaseDao`(数据访问对象)是一种在Java应用中广泛使用的模式,用于封装对数据库的操作。该模式的主要目的是将业务逻辑...

    springboot+mybatis 多数据源 basedao +分页

    本项目涉及到的主题是“SpringBoot+MyBatis实现多数据源以及基于BaseDAO的分页功能”。 多数据源是指在一个应用中同时管理多个数据库。这在分布式系统或者需要隔离不同业务数据的场景中非常常见。SpringBoot可以...

    一个较好的BaseDao

    自己常用的的一个数据库操作类 注意修改private void setConn()方法为您的connection连接方式

    java BaseDao

    - 在实际应用中,应使用try-with-resources语句来自动关闭资源,以避免资源泄露问题。 - 对于敏感信息如数据库密码等,建议使用环境变量或配置文件进行管理,不要硬编码到代码中。 - 异常处理应该更加细致,可以根据...

    Java利用自定义注解、反射实现简单BaseDao实例

    Java利用自定义注解、反射实现简单BaseDao实例 Java作为一门强大的编程语言,在实际开发中经常需要与...但是,我们也需要注意到这种方法的局限性,例如,它不支持复杂的查询操作,需要根据实际情况进行修改和扩展。

    ssh注意事项

    然而,在实际应用中,特别是当SSH与Spring框架、Hibernate等技术整合时,开发者需注意多个关键点,以确保系统的安全性、稳定性和效率。本文将详细解析在整合SSH时需要注意的重要知识点,帮助开发人员避免常见陷阱,...

    JAVA代码生成器源码-基于SSM架构

    值得注意的是,这个代码生成器原生支持MySQL数据库,但可以根据需要修改以适应SQL Server或其他数据库系统。这通常涉及到更改数据源配置、SQL语法以及可能的驱动依赖。 全源码分享意味着用户可以自由地查看、学习和...

    Oracle,mysql,sqlserver等各种数据库的分页方法

    Oracle数据库提供了`ROWNUM`伪列来进行分页查询,但在使用时需要注意一些细节。 #### 3. 使用`ROWNUM`伪列 - **获取指定范围的数据**(例如第2至第3条记录): ```sql SELECT ID FROM ( SELECT ID, ROWNUM AS ...

    hibernate 事务管理注意事项

    public class AHBaseDaoImpl&lt;T&gt; implements BaseDao&lt;T&gt; { public void flushAndClearSession() { getHibernateTemplate().flush(); getHibernateTemplate().clear(); } } ``` 2. **解决方案**:设计一个基础...

    使用Java集合模拟JSTL包中的Result接口功能

    注意:在BaseDAO类有两个重载的方法:findAllTable方法,第一个是使用jstl包的Result接口对象;第二是本人使用集合模拟完成的。关键代码注释非常详细,反复体会之后,你会发现:Oh,手写代码真的很爽!!!^_^

    Java与SQL Server 2005(2000)数据库连接问题 (jdbc驱动)

    public class BaseDao { private Connection dbConn = null; private Statement stmt = null; private ResultSet rs = null; public void creatConnect() { String driverName = ...

    java常有代码

    在Java编程中,我们经常会遇到各种实用的代码片段,这些代码可以帮助我们处理日常开发中的常见问题。本篇文章将深入探讨标题“java常有代码”所涵盖的几个关键知识点:Excel的上传与下载、BaseDao接口的使用、日期...

    NC后台sql语句执行的方式

    BaseDAO baseDAO = new BaseDAO(); ``` 2. **构造SQL语句:** ```java String sql = "SELECT * FROM pm_pa_billinfo WHERE vbillinfono='" + e.getValue() + "'"; ``` 3. **执行SQL语句并获取结果集:** ```...

    图书馆管理系统数据库的连接与实现.pdf

    在实现过程中,需要注意数据库的异常处理。当出现SQLException时,系统会打印错误信息,并在适当的地方返回null或-1,以便调用者能够捕获并处理这些异常。 总的来说,图书馆管理系统数据库的连接与实现涉及以下关键...

    javaOOP内部测试机试题 - 副本

    该资源共有七个部分,分别是语言和环境、功能要求、类的设计、具体要求及推荐实现步骤、注意事项和图示。 语言和环境中,要求使用Java语言,JDK 6.0、MyEclipse 10.6和SQL Server 2008作为开发环境。 功能要求部分...

    在myeclipse(java)中如何连接Oracle数据库

    BaseDao basedao = new BaseDao(); Connection con = basedao.getConnection(); if (con == null) { System.out.println("与Oracle数据库连接失败!"); } else { System.out.println("与Oracle数据库连接成功...

    Hibernate中查询的法方

    要删除一个对象,可以调用`delete()`方法,传入要删除的实体实例,如`delete(TUser persistentInstance)`。Hibernate会自动执行相应的删除SQL语句。 4. **更新(AttachDirty)** `attachDirty()`方法用于更新已...

    数据库的连接

    ### 数据库连接在Java Web开发中的重要性及实现方法 #### 标题解析:数据库的连接 在现代软件开发特别是Web应用开发中,数据库作为数据持久化的基础工具扮演着极其重要的...同时也要注意防止SQL注入攻击等安全风险。

Global site tag (gtag.js) - Google Analytics