写得不好,仅为给一个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以及泛型的习作
分享到:
相关推荐
Ibatis 是一个流行的数据持久层框架,它在Java开发中被广泛应用,特别是在处理与数据库交互的任务上。这个压缩包包含了Ibatis的三个关键组件:common、dao和sqlmap,它们各自扮演着不同的角色,共同构成了Ibatis框架...
service接口 ... ... import com.xvxv.common.service.EntityService;...这样只需要向dao中注入pojo的完整包名,你就能拥有一个pojo的dao,并且在你的service接口和实现类里不用写一句代码. 轻松持久化你的entity pojo
CommonJDBCDAO组件则是由国人自主开发实现的基于JDBC API的数据访问组件,保留有O/R Mapping工具的简便性,也具有JDBCTemplate的灵活性,对JDBC API进行彻底的封装和简化,而且使用简单,目前的版本完全兼容于Oracle...
SQL Map是Ibatis的核心概念,它是一个XML文件或者注解,用来描述SQL语句及其关联的结果映射。通过SQL Map,开发者可以编写动态的SQL,使得SQL的编写更加灵活。此外,`ibatis-sqlmap-2.jar`还包含`SqlSession`和`...
在本文中,我们将深入探讨如何使用Microsoft Foundation Class (MFC)库和Data Access Objects (DAO)来构建一个CGI(Common Gateway Interface)扩展服务器。CGI服务器是一种在Web服务器上运行的程序,它能接收HTTP...
例如,在主程序中写:COMMON X,Y,I,Z(3),在子程序中写:COMMON A,B,J,T(3),于是,在无名公用区中变量X和A,Y和B,I和J分别分配在同一个存储单元中,数组Z和T同占三个存储单元。 COMMON语句的主要用途是使不同...
`currenty92`可能是一个特定项目或者库的命名约定,而`common`类则通常包含了一系列可以被多个类或模块复用的方法和功能。下面我们将深入探讨`common`类的作用以及它在Java编程中的常见应用。 1. **代码复用性**:`...
总之,"Google Common Jar包"是一个强大的工具集,包含了许多实用的Java工具类和方法,对于任何Java开发者来说都是一个宝贵的资源。它的使用不仅可以帮助编写更加健壮的代码,还可以提高开发效率,减少潜在的bug,...
"Common工具类"是C#编程中一个非常重要的概念,它涉及到代码的复用性和模块化设计,这对于提高开发效率和维护性至关重要。在本篇文章中,我们将深入探讨C#中的Common工具类及其在实际开发中的应用。 首先,工具类...
4. **版本不兼容**:如果你的应用程序依赖于特定版本的 `dao350.dll` 而实际安装的是另一个版本,可能会导致兼容性问题。 #### 三、解决方案 1. **重新安装 VB 或相关组件**:确保你已经安装了最新的 VB 版本以及...
标题和描述中提到的"action层,dao层,service层,entity层"是这种分层架构的典型组成部分,下面将详细解释每一层的功能和它们之间的交互。 1. **Action层(控制层)**: 这一层主要负责接收用户的请求,进行业务...
"Google Common Jar包1.0" 是一个广泛应用于Java开发中的工具库,主要由Google公司开发并维护。这个包集合了一系列实用的工具类和方法,极大地丰富了Java标准库的功能,提高了开发效率。其中,`...
本书一开始完整地介绍Common Lisp语言,让读者彻底了解这个语言,最后用超过三分之一的篇幅介绍各种实际应用。本书有相当多应用程序的范例,透过本书的各个范例,你会渐渐体会到,运用Common Lisp写程序是很酷的事。
guava-r07.jar包,Guava 中文是石榴的意思,该项目是 Google 的一个开源项目,包含许多 Google 核心的 Java 常用库。 目前主要包含: com.google.common.annotations com.google.common.base ...
`Maps.newConcurrentMap()`是一个这样的方法,它用于创建一个新的并发映射(Concurrent Map)实例。并发映射在多线程环境下非常有用,因为它们可以保证在并发读写时的数据一致性。 在Java中,标准的`java.util....
Common Lisp作为Lisp语言的一个标准化版本,旨在为开发者提供一个稳定且功能强大的编程平台。 ### Common Lisp的特点与优势 #### 1. 动态类型和垃圾回收机制 Common Lisp支持动态类型,这意味着变量可以在运行时...
在VB6.0编程环境中,`CommonDialog`控件是一个非常实用的工具,它允许用户与操作系统进行交互,比如打开或保存文件对话框。在这个场景中,我们将详细探讨如何利用`CommonDialog`控件实现多文件选择功能,并获取每个...
该资源为学习和使用 ANSI Common Lisp 语言提供了一个完善的指南,涵盖了从基础知识到高级主题的方方面面,对于 Lisp 编程语言的学习和应用具有重要的参考价值。 知识点: 1. ANSI Common Lisp 是一种功能强大且...