`
robinsoncrusoe
  • 浏览: 745728 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

DAO的实现

    博客分类:
  • JAVA
阅读更多
DAO的实现 
 

DAO 模式对开发J2EE应用的人员来说都应该很熟悉的,但是模式的实现各不相同,在这里我将按下面的思路来实现:

1.系统中的所有数据库访问都通过 DAO 进行以实现封装。

2.每个 DAO 实例负责一个主要域对象或实体。

      3.DAO 负责域对象的创建、读取(按主键)、更新和删除(CRUD)。

4.DAO 可允许基于除主键之外的标准进行查询,返回值通常是DAO 负责的域对象集合。

  5.像上面说的,DAO 不负责处理事务、会话或连接,而把这交给一个工具类,这样做是为了实现灵活性。

     (一)泛型 DAO 接口

  泛型 DAO 的基础是其 CRUD 操作。下面的接口定义泛型 DAO 的方法:

  提供数据库操作接口给业务层使用

       清单1

public interface IMessageDAO
{

//对应留言信息Message这个实体对象的操作
public void saveMessage( Message message );
public void updateMessage( Message message );
public List getMessages( );
public void deleteMessage( String id, String userId );
public Message getMessage( String id );
}

     清单2

  public interface IUserDAO
       {
       public void saveUser( User user );
       public User getUser( String username );
      public User getUserById( String id );
      }

    (二)泛型DAO的实现

第一个泛型 DAO 的实现

DAO 的实现类,封装数据库逻辑,按<<Hibernate项目开发宝典>>书上所说的将那些持久化操作封装到一个DAO基础类,也相 当于是一个工具类,通过继承这个基础类,DAO的实现类可以在很大程度上简化持久化操作的步骤,减少代码的重复量。这个基础类命名为 HibernateDAO,具体的方法实现如清单2

清单 3.

/**
* 使用Hibernate实现DAO的基础类
* 包括了持久化操作的一些基础方法
*/
public class HibernateDAO
{
/**
* 保存对象信息到数据库
* @param obj 需要进行持久化操作的对象
*/
public void saveObject(Object obj)
{
   HibernateUtil.getCurrentSession().save(obj);
}

/**
* 更新持久化对象
* @param obj 需要更新的对象
*/
public void updateObject(Object obj)
{
   HibernateUtil.getCurrentSession().update(obj);
}

/**
* 使用HQL语句进行查询
* @param hsql 查询语句
* @return 符合条件的对象集合
*/
public List getObjects(String hsql)
{
   List result = HibernateUtil.getCurrentSession().createQuery(hsql).list();
   return result;
}

/**
* 使用HQL语句进行对象的查询
* @param hsql 查询语句
* @return 符合条件的对象
*/
public Object getObject(String hsql)
{
   Object result = HibernateUtil.getCurrentSession().createQuery(hsql).uniqueResult();
   return result;
}

/**
* 根据ID值得到持久化的对象
* @param cls 对象的类型
* @param id ID值
* @return 指定ID的对象
*/
public Object getObject(Class cls, String id)
{
   Object result = HibernateUtil.getCurrentSession().get(cls, id);
   return result;
}

/**
* 删除对象信息
* @param obj 被删除的对象
*/
public void deleteObject(Object obj)
{
   HibernateUtil.getCurrentSession().delete(obj);
}
}

清单 4. IMessageDAO接口的实现类

/**
* IMessageDAO接口的Hibernate实现
*/
public class MessageDAO extends HibernateDAO implements IMessageDAO
{

/**
* 保存留言信息
*
* @param message
*            被保存的留言对象
*/
public void saveMessage(Message message)
{
   super.saveObject(message);
}

/**
* 得到所有的留言信息
*
* @return 返回所有的留言信息
*/
public List getMessages()
{
   String hsql = "from Message";
   return super.getObjects(hsql);
}

/**
* 删除留言信息
*
* @param id
*            要删除的留言信息的ID值
* @param userId
*            执行删除操作的用户ID
*/
public void deleteMessage(String id, String userId)
{
   Message msg = getMessage(id);
   if (msg == null)
   {
    throw new MessageDAOException("找不到你所要删除的留言!");
   }

   if (!msg.getUser().getId().equals(userId))
   {
    throw new MessageDAOException("你不能删除别人的留言!");
   }

    deleteObject(msg);
}

/**
* 得到留言信息
*
* @param id
*            留言的ID值
* @return 指定ID值得留言对象
*/
public Message getMessage(String id)
{
   return (Message) getObject(Message.class, id);
}

/**
* 更新留言信息
*
* @param message
*            欲更新的留言对象
*/
public void updateMessage(Message message)
{
   updateObject(message);
}

} 
清单 5. IUserDAO接口的实现类

/**
* IUserDAO接口的Hibernate实现
*/
public class UserDAO extends HibernateDAO implements IUserDAO
{

/**
* 保存用户信息到数据库
* @param user 被保存的用户对象
*/
public void saveUser(User user)
{
   if (user == null)
    return;

   User u = getUser(user.getName());
   if (u != null)
    throw new MessageDAOException("用户名已经存在,请使用其它用户名!");

 saveObject(user);
}

/**
* 得到用户对象
* @param username 用户的登录名
* @return 指定登录名的用户对象
*/
public User getUser(String username)
{
   User u = (User) getObject("from User u where u.name = '" + username
     + "'");
   return u;
}

/**
* 得到用户对象的信息
* @param id 用户的ID值
* @return 指定的用户信息
*/
public User getUserById(String id)
{
   return (User) getObject(User.class, id);
}

}
分享到:
评论

相关推荐

    在VB中用DAO实现数据库编程.rar

    在这个"在VB中用DAO实现数据库编程"的压缩包中,我们可以学习如何利用DAO在VB环境中进行数据库操作。 首先,DAO提供了几个核心对象,包括Database、Recordset、TableDef、Field等,它们各自扮演着不同的角色: 1. ...

    自己用的DAO实现类

    DAO接口定义了对数据库进行操作的方法,而DAO实现类则具体实现了这些方法,执行SQL语句,处理结果集等。 在本压缩包中,只有一个名为"dao"的文件,可能是包含了一个或多个DAO实现类的Java源代码文件。这些类通常会...

    基于JSP+Servlet+Dao实现的贫困认定管理系统.zip

    基于JSP+Servlet+Dao实现的贫困认定管理系统 基于JSP+Servlet+Dao实现的贫困认定管理系统 基于JSP+Servlet+Dao实现的贫困认定管理系统 基于JSP+Servlet+Dao实现的贫困认定管理系统 基于JSP+Servlet+Dao实现的贫困...

    用DAO实现的用户登录系统

    在这个"用DAO实现的用户登录系统"中,我们可以看到以下几个关键知识点: 1. **DAO模式**:DAO模式的核心是提供一个接口或抽象类,定义了对数据库的基本操作,如增删查改。具体的数据库操作由实现了这个接口或继承了...

    Struts + DAO实现基本分页

    总的来说,Struts+DAO实现的分页方案能够有效组织代码结构,提高代码的可读性和可维护性。虽然这种方式可能会增加一定的开发复杂性,但其带来的好处是显而易见的,尤其是在大型项目中,这样的设计模式能够显著提高...

    JDBC+DAO实现简单部门管理

    JDBC+DAO实现简单部门管理 本文主要介绍了使用JDBC和DAO模式实现简单的部门管理系统,实现了基本的CRUD(Create, Read, Update, Delete)操作。同时也涉及到了JavaWeb中的过滤监听机制,包括Filter和Listener的概念...

    JdbcTemplate通用泛型Dao实现

    本文将深入探讨`JdbcTemplate`通用泛型Dao实现的相关知识点,帮助开发者更好地理解和应用这一技术。 首先,让我们了解什么是`JdbcTemplate`。它是Spring框架的一部分,用于处理SQL操作。`JdbcTemplate`提供了一组...

    MVC+DAO实现留言系统

    在" MVC+DAO实现留言系统 "这个项目中,我们将深入探讨这两种模式的应用。 **MVC模式** MVC模式是一种将应用程序分为三个主要组件的架构模式,以实现业务逻辑和用户界面的分离。 1. **模型(Model)**:负责管理...

    JSP+DAO实现登陆模块

    用DAO的方式处理登陆模块的数据库连接和数据的处理等部分,使得jsp页面中不再有复杂的用户名和密码等的验证代码,实现了视图(界面设计)与业务逻辑的分离,使程序清晰明朗,具有更高的可读性。

    源码 留言管理系统JDBC+DAO实现

    【标题】:“源码 留言管理系统JDBC+DAO实现” 这个标题表明这是一个关于使用Java JDBC(Java Database Connectivity)和DAO(Data Access Object)模式实现的留言管理系统。JDBC是Java语言中用来与数据库交互的一...

    采用Java Servlet +Service+DAO实现用户登陆注册

    采用Service+Service+DAO实现用户注册登陆 数据库:SQLite 代码:JSP 目的要求 (1)掌握Servlet使用技术; (2)掌握开发平台的分层技术; (3)掌握数据访问的封装技术。 实验内容 (1)建立项目,创建Servlet,并...

    JSP+DAO实现文件上传系统

    本项目“JSP+DAO实现文件上传系统”利用了这两种技术来实现一个文件上传功能,同时结合MVC(Model-View-Controller)设计模式,使得代码结构清晰,易于维护。下面将详细讲解这些知识点。 **1. JSP(JavaServer ...

    struts+dao实现的登录(连接数据库)

    在这个“struts+dao实现的登录(连接数据库)”项目中,我们将深入探讨这两个概念以及如何将它们应用于Oracle数据库的连接。 **Struts框架** Struts是一个开源的MVC(Model-View-Controller)框架,主要用于构建...

    mvc+dao实现登陆

    mvc+dao实现登陆

    使用DAO模式实现宠物数据更新

    DAO(Data Access Object)模式是一种常见...同时,如果需要更换数据库或调整数据库操作方式,只需要修改DAO实现类,不会影响到其他层的代码,降低了维护成本。此外,该模式还有利于多线程环境下的并发控制和事务管理。

    留言管理范例 —— JSP + DAO实现

    【JSP + DAO实现留言管理范例】 在Web开发中,留言管理系统是一个常见的功能模块,它允许用户在网站上留下评论或反馈。本范例主要介绍如何使用Java Server Pages(JSP)技术和Data Access Object(DAO)模式来实现...

    Struts_DAO 实现分页

    在本程序中,"Struts_DAO 实现分页"是为了提高用户体验,使得大量数据可以按页显示,而不是一次性全部加载,从而节省服务器资源并提高页面响应速度。以下将详细介绍Struts、DAO以及分页的相关知识点。 **Struts框架...

    案例-mvc+dao实现留言管理程序

    【标题】:“案例-mvc+dao实现留言管理程序” 【正文】: 在Java开发领域,MVC(Model-View-Controller)模式和DAO(Data Access Object)模式是两种广泛使用的设计模式,它们在构建Web应用程序时起着至关重要的...

    Java源代码一个简单的通用DAO实现(基于hibernate)

    Java源代码 一个简单的通用DAO实现 (基于hibernate)面向应用层按POJO类缓存hibernate的session对象.使用举例: DAO dao = DAOFactory.getDAO(POJO.class);//获得一个全局类单例的DAO实例 dao.save(pojo); 你也可以...

    网上书店系统的JSP+Servelt+DAO实现

    【网上书店系统的JSP+Servlet+DAO实现】 在IT领域,网上书店系统是常见的Web应用程序,它模拟了实体书店的功能,使用户能够在线浏览、选购书籍,并进行支付操作。本项目采用经典的MVC(Model-View-Controller)设计...

Global site tag (gtag.js) - Google Analytics