`
graying
  • 浏览: 27317 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

05年写的一个Common DAO

    博客分类:
  • Java
阅读更多

写得不好,仅为给一个fightman 童鞋用。

 

fightman

 

就贴了DAO的接口和实现,及一个使用例子,留个你的mail,发给你所有代码

 

Common DAO 接口

/*
 * Created on 2004-11-19
 *
 */
package net.yigoware.jbbs.dao;

import java.io.Serializable;
import java.util.List;

import net.yigoware.jbbs.service.exception.ObjectNotFoundException;

/**
 * 
 * @author Yigo
 * @createdate 2005-11-04
 * @param <T>
 */
// import org.springframework.dao.DataAccessException;

public interface DAO<T> {
    /**
     * @return
     */
    public List<T> readAll();

    // CRUD
    /**
     * @param object
     */
    public void create(T object);// throws DataAccessException;

    /**
     * @param id
     * @return
     * @throws ObjectNotFoundException
     */
    public T read(Serializable id) throws ObjectNotFoundException;

    /**
     * update方法:对于dao来说,只要取得那个id的对象,就可以更新,所以他只需要抛出ObjectNotFoundException。
     * 而是否存在唯一键的验证,应当放在业务层处理,所以不需要抛出ObjectAlreadyExistException异常。
     * 
     * @param id
     * @param object
     * @throws ObjectNotFoundException
     */
    public void update(Serializable id, T object)
            throws ObjectNotFoundException;

    /**
     * @param id
     * @throws ObjectNotFoundException
     */
    public void delete(Serializable id) throws ObjectNotFoundException;

}

 

Hibernate的实现

 

/*
 * Created on 2004-11-19
 *
 */
package net.yigoware.jbbs.dao.impl.hibernate;

import java.io.Serializable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import net.yigoware.jbbs.dao.DAO;
import net.yigoware.jbbs.service.exception.ObjectNotFoundException;
// import org.springframework.dao.DataAccessException;
// import org.apache.commons.beanutils.BeanUtils;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
// 这个不能算是渗透哦,没办法,common beanutils没法解决
import com.opensymphony.util.BeanUtils;

/**
 * 
 * @author Yigo
 * @createdate 2005-11-04
 * @param <T>
 */
abstract public class DAOImplHibernate<T> extends HibernateDaoSupport implements
        DAO<T> {

    private Class objectClass;

    private DAOImplHibernate() {

    }

    /**
     * @param objectClass
     */
    public DAOImplHibernate(Class objectClass) {
        this.objectClass = objectClass;
    }

    public List<T> readAll() {
        return this.getHibernateTemplate().loadAll(this.objectClass);
    }

    public void create(T object) {
        // System.out.println("basic..........create............");
        this.getHibernateTemplate().save(object);
        // System.out.println("basic..........create............end.......");
    }

    public T read(Serializable id) throws ObjectNotFoundException {
        T object = (T) this.getHibernateTemplate().get(this.objectClass, id);
        if (null == object) {
            throw new ObjectNotFoundException(this.objectClass, id);
        }
        return object;
    }

    public void update(Serializable id, T object)
            throws ObjectNotFoundException {
        T cacheObject = this.read(id);
        // 虽说这里的BeanUtils有点渗透,但是opensymphony的BeanUtils,SO GREAT!
        // 比起commons的BeanUtils,第一,可以读取每个value的object对象,第二,一点异常都没有。
        Map map = BeanUtils.getValues(object, BeanUtils
                .getPropertyNames(object));
        for (Iterator iter = map.keySet().iterator(); iter.hasNext();) {
            String key = iter.next().toString();
            Object value = map.get(key);
            if (value != null && !value.toString().equals("")) {
                BeanUtils.setValue(cacheObject, key, value);
            }
        }
        this.getHibernateTemplate().update(cacheObject);
    }

    public void delete(Serializable id) throws ObjectNotFoundException {
        this.getHibernateTemplate().delete(this.read(id));

    }
}

 

以及一个使用了改DAO的例子:

package net.yigoware.jbbs.dao.impl.hibernate;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import net.yigoware.jbbs.dao.BoardDAO;
import net.yigoware.jbbs.model.Board;
import net.yigoware.jbbs.service.exception.ObjectNotFoundException;

/**
 * 
 * @author Yigo
 * @createdate 2005-11-04
 */
public class BoardDAOImplHibernate extends DAOImplHibernate<Board> implements
        BoardDAO {

    /**
     * 
     */
    public BoardDAOImplHibernate() {
        super(Board.class);
    }

    @Override
    public void update(Serializable id, Board board)
            throws ObjectNotFoundException {
        board.setModifyTime(new Date());
        super.update(id, board);
    }

    @Override
    public void create(Board board) {
        board.setCreateTime(new Date());
        super.create(board);
    }

    public void createChildrenBoard(Board parent, Board child) {
        // TODO Auto-generated method stub

    }

    public Board getBoardByName(String name) throws ObjectNotFoundException {
        Board board = null;
        List list = this.getHibernateTemplate().find(
                "from Board where name = '" + name + "'");
        if (list.size() > 0) {
            board = (Board) list.get(0);
        } else {
            // System.out.println("没有找到坛子哦");
            throw new ObjectNotFoundException(Board.class, name);
        }
        return board;
    }

}

 

 

 

写得不好,请大家勿拍砖,现在自己看来,很多用泛型的地方也蛮可笑的,尤其是那个private Class objectClass;,毕竟是05年的习作了

 

改项目为非公司项目,自己学习hibernate和spring以及泛型的习作

0
0
分享到:
评论

相关推荐

    ibatis相关的common,dao,sqlmap包

    Ibatis 是一个流行的数据持久层框架,它在Java开发中被广泛应用,特别是在处理与数据库交互的任务上。这个压缩包包含了Ibatis的三个关键组件:common、dao和sqlmap,它们各自扮演着不同的角色,共同构成了Ibatis框架...

    一个通用的dao和service包

    service接口 ... ... import com.xvxv.common.service.EntityService;...这样只需要向dao中注入pojo的完整包名,你就能拥有一个pojo的dao,并且在你的service接口和实现类里不用写一句代码. 轻松持久化你的entity pojo

    Common JDBC DAO组件系统库及帮助手册

    CommonJDBCDAO组件则是由国人自主开发实现的基于JDBC API的数据访问组件,保留有O/R Mapping工具的简便性,也具有JDBCTemplate的灵活性,对JDBC API进行彻底的封装和简化,而且使用简单,目前的版本完全兼容于Oracle...

    ibatis开发包(common+sqlmap+dao)

    SQL Map是Ibatis的核心概念,它是一个XML文件或者注解,用来描述SQL语句及其关联的结果映射。通过SQL Map,开发者可以编写动态的SQL,使得SQL的编写更加灵活。此外,`ibatis-sqlmap-2.jar`还包含`SqlSession`和`...

    演示如何用MFC和DAO(数据访问对象)写一个CGI扩展服务器,程序动

    在本文中,我们将深入探讨如何使用Microsoft Foundation Class (MFC)库和Data Access Objects (DAO)来构建一个CGI(Common Gateway Interface)扩展服务器。CGI服务器是一种在Web服务器上运行的程序,它能接收HTTP...

    Fortran之COMMON语句[文].pdf

    例如,在主程序中写:COMMON X,Y,I,Z(3),在子程序中写:COMMON A,B,J,T(3),于是,在无名公用区中变量X和A,Y和B,I和J分别分配在同一个存储单元中,数组Z和T同占三个存储单元。 COMMON语句的主要用途是使不同...

    Common_currenty92_common_common类的作用_

    `currenty92`可能是一个特定项目或者库的命名约定,而`common`类则通常包含了一系列可以被多个类或模块复用的方法和功能。下面我们将深入探讨`common`类的作用以及它在Java编程中的常见应用。 1. **代码复用性**:`...

    google common jar包

    总之,"Google Common Jar包"是一个强大的工具集,包含了许多实用的Java工具类和方法,对于任何Java开发者来说都是一个宝贵的资源。它的使用不仅可以帮助编写更加健壮的代码,还可以提高开发效率,减少潜在的bug,...

    C#之Common工具类

    "Common工具类"是C#编程中一个非常重要的概念,它涉及到代码的复用性和模块化设计,这对于提高开发效率和维护性至关重要。在本篇文章中,我们将深入探讨C#中的Common工具类及其在实际开发中的应用。 首先,工具类...

    vb启动显示不能加载dao350.dll错误

    4. **版本不兼容**:如果你的应用程序依赖于特定版本的 `dao350.dll` 而实际安装的是另一个版本,可能会导致兼容性问题。 #### 三、解决方案 1. **重新安装 VB 或相关组件**:确保你已经安装了最新的 VB 版本以及...

    action层,dao层 ,service层,entity层1

    标题和描述中提到的"action层,dao层,service层,entity层"是这种分层架构的典型组成部分,下面将详细解释每一层的功能和它们之间的交互。 1. **Action层(控制层)**: 这一层主要负责接收用户的请求,进行业务...

    google common jar包1.0

    "Google Common Jar包1.0" 是一个广泛应用于Java开发中的工具库,主要由Google公司开发并维护。这个包集合了一系列实用的工具类和方法,极大地丰富了Java标准库的功能,提高了开发效率。其中,`...

    实用Common.Lisp编程

    本书一开始完整地介绍Common Lisp语言,让读者彻底了解这个语言,最后用超过三分之一的篇幅介绍各种实际应用。本书有相当多应用程序的范例,透过本书的各个范例,你会渐渐体会到,运用Common Lisp写程序是很酷的事。

    com.google.common.jar

    guava-r07.jar包,Guava 中文是石榴的意思,该项目是 Google 的一个开源项目,包含许多 Google 核心的 Java 常用库。 目前主要包含: com.google.common.annotations com.google.common.base ...

    实用Common.Lisp编程.pdf

    Common Lisp作为Lisp语言的一个标准化版本,旨在为开发者提供一个稳定且功能强大的编程平台。 ### Common Lisp的特点与优势 #### 1. 动态类型和垃圾回收机制 Common Lisp支持动态类型,这意味着变量可以在运行时...

    利用Commondialog选择多个文件并获取各文件路径的方法(VB6.0)

    在VB6.0编程环境中,`CommonDialog`控件是一个非常实用的工具,它允许用户与操作系统进行交互,比如打开或保存文件对话框。在这个场景中,我们将详细探讨如何利用`CommonDialog`控件实现多文件选择功能,并获取每个...

    ANSI Common Lisp 中文翻译版.pdf

    该资源为学习和使用 ANSI Common Lisp 语言提供了一个完善的指南,涵盖了从基础知识到高级主题的方方面面,对于 Lisp 编程语言的学习和应用具有重要的参考价值。 知识点: 1. ANSI Common Lisp 是一种功能强大且...

    com.google.common.collect

    `Maps.newConcurrentMap()`是一个这样的方法,它用于创建一个新的并发映射(Concurrent Map)实例。并发映射在多线程环境下非常有用,因为它们可以保证在并发读写时的数据一致性。 在Java中,标准的`java.util....

Global site tag (gtag.js) - Google Analytics