浏览 1406 次
锁定老帖子 主题:避免对象序列化存储时对数据库N+1操作
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-09-09
最后修改:2011-06-18
需求:对一批对象A进行db存储和读取操作,其中A有一个复杂对象B,表的设计有一个字段存储B的xml序列化形式。 Code: 读取时: public A[] readA(AKey[] aKeys){ //此时a中的对象不包含B. A[] a=db.read(akeys); for(A ta:a){ fillB(ta); } return a; } private void fillB(A a){ //从db拿到a中b的string表示。 String bString=db.read(a.key); //反序列化 B b=Xml.parseB(bString); a.setB(b); } 这明显是一个N+1操作。 解决办法之一,新建一个class AValue,用来映射A和数据库的存储。AValue中的属性除了B以外和A相同,另外多一个bString,来存储B的String表示。 public A[] readA(AKey[] aKeys){ //此时avalues中的对象包含b的string形式. AValue[] aValues=db.read(akeys); //对每一个aValue反序列化bString到B,构造一个A对象。 ...... } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |