DAO的实现


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);
}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值