困扰已久的效率问题.看过jive熟悉模式的老大们进..

foolfish 2004-07-13 09:19:47
就拿我们的论坛做例子

在列贴子主题列表处显示格式为
---------------------------------
贴名 发贴者
xxxxxxx xxxx
---------------------------------


贴子主题 数据库结构为
---------------------------------
贴名(threadName) 发贴者(userID)
varchar(255) int(9)
---------------------------------
注意,这里为了程序检索效率,我使用的不是发贴者用户名保存的,而是使用发贴用户ID保存(int型)

同时我做了User类,该类在例化后调用.getName()方法返回用户名
这个User类必定在调用getName()方法的时候会执行一次select句子来取得返回结果
比如
User my = new User(userID);
String name=my.getName();
那么这时肯定有个 select * from user where id=userID
然后把User类的变量赋值,比如用户名,用户性别,注册时间等等

那么,问题来了

我在列主题贴的时候,一页显示50条主题
比如就是
thread.列主题(50);
User author;
while(thread.Next()){
out.print("贴名:"+thread.getThreadName());
out.print("用户ID:"+thread.userID());
//问题从这里开始出现
author=new User(thread.userID());
out.print("用户名:"+author.getName());
}

当然,这个程序是可以执行的,但我在列主题的时候,为了取得用户名,不得不一次一次的new User(thread.userID())然后用getName()方法来取得用户名,这样肯定要一次一次的执行select * from user..这样的句子,也就是说我列一次显示50条主题就要执行51条sql句子...

不知道我这样说大家是否明白,不知道这个问题应该如何解决?

谢谢各位!
...全文
117 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tyrone98 2004-07-18
  • 打赏
  • 举报
回复
把User用缓冲

public class CacheUser {
private static Map dt = new Map() ;

public static User getUser( int userid ) {
User findedUser = null ;
finedUser = dt.get( userid ) ;

if ( findUser == null ) {
findedUser = new User( userid ) ;
dt.Add( userid , findedUser ) ;
}

return findedUser ;
}

}

把你的author=new User(thread.userID());
改为author = CacheUser.getUser( thread.userID() ) ;

foolfish 2004-07-17
  • 打赏
  • 举报
回复
up
foolfish 2004-07-15
  • 打赏
  • 举报
回复
up
ecaol 2004-07-14
  • 打赏
  • 举报
回复
UP
foolfish 2004-07-14
  • 打赏
  • 举报
回复
具体如何做?能不能给个简单的程序片段?
谢谢!
  • 打赏
  • 举报
回复
用缓存,但不是一两句话能说清楚的。
我参照jive做的用户权限管理,数据读进缓存后,数据库断开,只要没有增加和删除操作,系统一样能跑。

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧