请教一个问题:
1.现在数据库有个超过10个字段的用户表userInfo,Java里也有个对应的UserEntity,现在我要显示一个用户列表页,但列表页只显示部分字段,点击其中一个查询才显示当前用户全部信息,在一本关于重构的书中看到这样的查询最好使用轻量级查询,就是只从数据库返回当前需要字段
比如这样,列表页只需要显示姓名,性别,年龄,住址,邮编,sql语句可以写成这样:
select name,sex,age,address,zipcode form userinfo
但是用JavaBean接收时,假设查出来10000条数据,我还是要new 10000个UserEntity来封装信息,书上说只查询部分信息却要完整实例化一个重量级Bean是不好的,而且我也觉得这样Bean这样设计也是有问题的,但是他给的解决方案我也没看得懂,所以在这里请教下前辈,你们对这样的情况怎么设计(假设数据库表设计是没问题的,就是10个字段,而要在前台用户部分信息列表),书上提到的JDO(Java Data Object)我也不知道干嘛用的, 和这个有关系吗?
如果我的描述不清晰的话,请前辈加我QQ:78533664或者留下您的QQ,我很好学,希望能得到前辈们的教导,谢谢
你的问题包含两部分担心
1、大数据量时的查询结果是否占用很多内存
2、需要查询的结果对象和数据库字段不完全吻合时的设计
回答
1、真正项目里,肯定不会把10000条结果一次性都读取出来,而是分批读取。即使你程序里想一次性读取也不是那么容易的,因为数据库本身也有单批读取的默认限制,大概是1000条。显示的时候也不可能是把10000条同时显示在界面上。所以你这个担心没必要。。
2、实际开发中,很多时候,要用的对象和数据表字段不是一一对应的,甚至一个对象的字段会跨几个表。就你举得例子而言,一般情况下不会这样设计,不会让一个对象所需的字段比数据表的字段还少,而是尽量让对象的字段多,才方便业务的使用。不用担心内存占用。如果对象的字段没有值,只会占用几个到几十字节空间。
那就是一般又会新建一个VO类或叫DTO类,就是实现你要显示到前台的值的类,
比如:
class UserEntityVO
{
String name,sex,age,address,zipcode;
....
}
把这个类的对象传到前台做为展示
囧rz 一个系统不是只用Hibernate的
通常一个大的系统都是 JDBC + ORM 同时使用的.
推荐使用 JDBCTemplate ~
写一个通用的JdbcDao就可以用了。
VO类或叫DTO类,这种方式就是最早采用来解决这种问题的形式,现在基本上都不会去再搞这样一个类,现在就直接用UserEntity这个类的,
你不会显示10000条记录,都会分页的,全部放内存不科学,也没必要!