<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>
(未完待续......)