DAO模型应用总结

本文详细介绍了DAO(Data Access Object)模型的三个组成部分:实体层、DAO层及其实现类。通过实例展示了如何定义实体类,创建DAO接口以及实现数据的增删改查等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<pre class="java" name="code">


                                                                                     DAO    模型

一.实体层

    在实体层定义相应的实体类,可对应数据库中单个表的字段集或者多个表中的字段集(即对应数据库中的持久层)。

1.对应单个表的字段集:

<span style="font-size:18px;">public class SystemEnity {
int systemId;
 public int getSystemId() {
 return systemId;
}
public void setSystemId(int systemId) {
 this.systemId = systemId;
}
 String userName;
 String password;
 public String getUserName() {
  return userName;
 }
 public void setUserName(String userName) {
  this.userName = userName;
 }
 public String getPassword() {
  return password;
 }
 public void setPassword(String password) {
  this.password = password;
 }
}
</span>

2.对应多个 表中的字段

<p><span style="font-size:18px;">public class Acc_membEnity {
 int accountId;
 String accName;
 double currAmount;
 double initAmount;
 java.sql.Date createTime;
 java.sql.Date updateTime;
 int memberId;
 String note;
 String owner;
 public String getOwner() {
  return owner;
 }
 public void setOwner(String owner) {
  this.owner = owner;
 }
 public int getAccountId() {
  return accountId;
 }
 public void setAccountId(int accountId) {
  this.accountId = accountId;
 }
 public String getAccName() {
  return accName;
 }
 public void setAccName(String accName) {
  this.accName = accName;
 }
 public double getCurrAmount() {
  return currAmount;
 }
 public void setCurrAmount(double currAmount) {
  this.currAmount = currAmount;
 }
 public double getInitAmount() {
  return initAmount;
 }
 public void setInitAmount(double initAmount) {
  this.initAmount = initAmount;
 }
 public java.sql.Date getCreateTime() {
  return createTime;
 }
 public void setCreateTime(java.sql.Date createTime) {
  this.createTime = createTime;
 }
 public java.sql.Date getUpdateTime() {
  return updateTime;
 }
 public void setUpdateTime(java.sql.Date updateTime) {
  this.updateTime = updateTime;
 }
 public int getMemberId() {
  return memberId;
 }
 public void setMemberId(int memberId) {
  this.memberId = memberId;
 }
 public String getNote() {
  return note;
 }
 public void setNote(String note) {
  this.note = note;
 }</span></p><p><span style="font-size:18px;">}
</span></p>

这些实体类中使用getter和setter方法对其成员变量进行封装,在业务逻辑层使用时可直接创建其对象(可以这样理解这个对象——即对数据库表或虚表中的一条记录,数据库中的一条记录也叫PO)。
二.DAO层(接口层)

    接口层中通过接口定义各种方法(主要涉及对数据库中数据的查询、修改、更新和删除操作),从而连接实体层和业务逻辑层。

一个简单的例子如下:

<p>import java.util.List;</p><p>import Enity.AccEnity;</p><p>public interface AccEnityDao {
 List<AccEnity> query(AccEnity ae);
 List<AccEnity> query();
 boolean update(AccEnity ae);
 List<AccEnity> queryid(AccEnity ae);
 boolean updateAll(AccEnity ae);</p><p>}
</p>

下面介绍相应接口的实现类。

 

三.接口实现类

   主要用来实现接口中定义的方法。
1.对增删该方法的实现:

     通常情况下,增删改的方法的返回类型为boolean型,为带参数型方法,参数可以为常用型参数也可以为实体型参数(即将相应的实体的对象作为该方法的参数),在业务逻辑层的具体实现中,可设置参数的值传递给参数(或用实体中的setter方法对对象赋值)。

<p>@Override
 public boolean insert(MemberEnity mem) {
  // TODO Auto-generated method stub
  boolean state = true;
  String sql = "insert into member set owner=?";
  try {
   PreparedStatement pst = conn.prepareStatement(sql);
   pst.setString(1, mem.getOwner());
   int i = pst.executeUpdate();
   if (i == 0) {
    state = false;
   }
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } finally {
   SqlDao.closeAll(null, pst, rs);
  }
  return state;
 }</p><p> @Override
 public boolean update(MemberEnity mem) {
  // TODO Auto-generated method stub
  String sql = "update member set owner=? where memberId=?";
  boolean flag = true;
  try {
   PreparedStatement pst = conn.prepareStatement(sql);
   pst.setString(1, mem.getOwner());
   pst.setInt(2, mem.getMemberId());
   int i = pst.executeUpdate();
   if (i == 0) {
    flag = false;
   }
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }</p><p>  return flag;
 }</p><p> @Override
 public boolean delete(MemberEnity mem) {
  // TODO Auto-generated method stub
  boolean flag = true;
  String sql = "delete from member where memberId=?";
  try {
   PreparedStatement pst = conn.prepareStatement(sql);
   pst.setInt(1, mem.getMemberId());
   int i = pst.executeUpdate();
   if (i == 0) {
    flag = false;
   }
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } finally {
   SqlDao.closeAll(null, pst, rs);
  }
  return flag;
 }</p>

2.对查询方法的实现

     查询方法的实现相对比较灵活,就具体要实现的功能而定。通常其返回类型可为:boolean型、基本类型和List<E>泛型集合(若使用泛型集合,E一般为相应的实体类类型)。比如,如果要实现判断业务逻辑层中的数据和数据中的数据是否匹配,则可返回boolean型,用返回的布尔值来判断是否一致;如果要实现安一定的条件对数据库中的数据进行查询,则可返回List<E>泛型集合。

<p>@Override
 public List<MemberEnity> queryAll() {
  // TODO Auto-generated method stub
  String sql = "select * from member";
  List<MemberEnity> list = new ArrayList<MemberEnity>();
  try {</p><p>   PreparedStatement pst = conn.prepareStatement(sql);
   rs = pst.executeQuery();
   while (rs.next()) {
    MemberEnity me = new MemberEnity();
    me.setMemberId(rs.getInt(1));
    me.setOwner(rs.getString(2));
    list.add(me);
   }</p><p>  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } finally {
   SqlDao.closeAll(null, pst, rs);
   
  }
  return list;
 }</p>

(未完待续......)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值