日期:2014-05-17  浏览次数:20762 次

jsp+servlet+javabean多表联合查询实现?
因为模型层的对象的属性都是与表字段相对应,  

如果用面向对象的方法将查询出来的记录保存到对象中然后在jsp中显示,  

问题是查询出来的记录是多表字段合成的,模型层的对象没有对应的属性用来保存记录,怎么办?  

还有如果查询出来的一条记录中(几个表字段合成的记录)某个表中对应主表的记录有多条记录要显示,又要怎么封装及在页面显示??

------解决方案--------------------
第一个问题,你可以这样解决:方法1:查询结果是多表的字段,你可以在创建模型层的时候根据查询的结果来创建,而不必要根据每个表的字段来创建。
方法2:如果你模型层已经固定了,不想再修改或者重新创建模型层,可以这样做,假如查询的结果 A表和B表的字段组成。你保存数据的时候,同时用创建A表和B表的对象,依次存放相对应的记录。然后将这两个对象封装到一个hashmap或者另外一个对象中作为返回值。
方法3:干脆不用模型层的对象来存数据。直接用数据或者队列来存(不建议用这个方法)
第二个问题:如果你第一个问题解决的话,那么第二个问题也应该解决了,说到底,你查询的结果无非还是多表字段的组成而已。
------解决方案--------------------
类的关系对应你的数据库表的关系

面向对象就是这样的
一切都是对象
然后将他进行封装
如何多条记录就进list 或者 map 用泛型规定这个里面是什么东西

------解决方案--------------------
你在数据库中是一个一个表的,但是你在建立对象类的时候不能只是照搬表与表之间的主外键,而是要把那个关联表对象当做另一个表的属性,这样查询的时候保存的就是那个对象了,里面的值就可以随意取了
怕你不明白举个简单的例子:
表dept:
主键       部门名称   部门地址
deptid      dname      daddress
表emp:
主键       员工名称     所属部门     年龄
empid       ename         deptid      age

建立模型层类:
class dept{
     private int deptid;
     private String dname;
     private String daddress;

     //set和get方法
}

class emp {
   private int empid;
   private String ename;
   private Dept  dept; //这里就不是数据库中int型的deptid,而是将整个dept对象作为职工表中的属性                              来看待
   private int  age;

   //set和get方法
}

希望你能明白~~~~