关于list

最近开发一项目,是用的struts做的web层,有一个从数据库A读取的list到jsp页面显示,但是需要显示的某一些值,需要数据库B中对应数据库A条件的其他数据。也可以这样类似的理解,数据库A为大类,在显示的时候需要显示它的小类在数据库B中的个数。这个问题用sql语句是比较好解决的,但是能不能通过修改list来解决,即先逐条取出list的值,后判断数据库B中的数据个数,后将这个数据加入list后到jsp页面显示。可能这样有点复杂,但是这个纯属个人想法,希望大家能提宝贵意见,谢谢!

6个回答

你是想这样:
A1(2)
A2(12)
A3(24)
A4(7)

那么。最面向对象的方式自然是:
假设你的类名为:A
A a = .....;
a.subs().size();
但是你这个时候又不需要B的数据。
那么可以改为
a.subSize();

类似这种。你可以先测试一下。
那么可能你的subSize()方法里做的就是用SQL的count查询数据了。
那么也就是,你现在的代码不用怎么改:
class A{
public int subSize(){
//your query code
}
}

如果发现多次查询影响了速度。那么考虑性能优化:
这个地方主要是SQL优化。。。
你装了MYSQL的话可以尝试下这个语句:
SELECT c.help_category_id,c.name,(select count(t.help_topic_id) from mysql.help_topic t where t.help_category_id=c.help_category_id) category_cout FROM mysql.help_category c;
以上语句在MYSQL 5.0测试通过。

那么这样的话。就是你查询A的时候用上述类似语句去替换你的。这里我说明一下:
mysql.help_category:分类
mysql.help_topic:具体的文章

这个跟你的需求很类似。
一个分类下有多篇文章。对吧?
那么你如果选上面的SQL优化方案。大概你的代码是这样:

public List queryA(){
List ret = new ArrayList();
sql = "...这里我就不写了,照上面的改..";
ResultSet rs = DB.query(sql);
for(R r : rs){
A a = new A();
//....你的set语句
a.setSubSize(r.get("category_count"));
ret.add(a);
}
return ret;
}

页面上用:
a.getSubSize();

没必要.除非已经是两个独立的数据库;

如果非要这么做;最好把数据的处理放到单独的DAO层处理; 在WEB层做,不太好.

1,再添加个list,跟原有的list对称

2,不要使用list,使用自己写的dao
[code="java"]
class A {
// 原有list的数据
private String name;
// 需要扩充的list
private List mylist;
//get
//set
}
[/code]

[code="java"]

class A {

//稍微改一下POJO类

private int size;

// 需要扩充的list

private List mylist;

public int getSize(){ //前台直接获取就行了
return this.size;
}

public List getMylist(){
return this.mylist;
}
public List setMyList(List list){
this.mylist = list ;
if( list!=null )
this.size = list.size(); //size 在后台自动处理
}

}

[/code]

用hibernate的一对多。
model:

[code="java"]
class A{
private String name;
private Set lb;

//get,set

}
然后做个1对多映射
[/code]

可以用hibernate 设置映射关系,
如果用没有JDBC的话,直接在DAO层里定义好,
例如 findById 或者 findByName的。迭代到哪里就去那个表的数据信息,基本都是这样的。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问