1.0          其他语言
 
 

4.3 写你自己的 DAO 类

 
 

在大多数情况下,都需要写自己的 DAO 函数,因为自动生成的 DAO 函数太简单,无法应付复杂场合。

许多项目都需要从多个表中查询,在这种情况下,我们需要写一些 VO(value object) 类。新的 VO 类可以是一个全新的 Java bean 类,或者是自动生成的数据库 model 类的子类

比如,表 A 有如下字段(column):
XX
YY
ZZ
并且表 B 有如下字段(column):
SS
TT

我们可以写一个新的 VO 类来应付新的查询需求:

public class MyVO{
    String xx;
String ss;
public String getXx(){ return xx;
} public void setXx(String xx){ this.xx = xx;
} public String getSs(){ return ss;
} public void setSs(String ss){ this.ss = ss;
}
} ... String sql = "select A.XX,B.SS from A,B "; // sql += " where ...";
return this.queryBeanList(sql, null, MyVO.class);//each element is a MyVO object
...

这里的 mapping 是基于数据库字段(column) 名称和 Java bean 属性名称,这里不需要额外的配置文件。

对于其他的更新/删除操作,可以使用 ANSI SQL 写 DAO 函数:

    public void decreaseInventory(String productItemId, long qty) {
        StringBuffer sql = new StringBuffer();
        sql.append("update inventory i set qty = qty - ?");
        sql.append(" where itemid = ?");
        List paraList = new LinkedList();
        paraList.add(new Long(qty));
        paraList.add(productItemId);
        int updateCount = this.update(sql.toString(), paraList.toArray());
        log.debug("udpate count:" + updateCount);

    }

相比较直接用 JDBC 编程,优势在于我们不再需要注意资源的释放了,不再需要使用 JDBC Connection/Statement/ResultSet 了,也不需要写 try catch 了.