1、来看一下需要的视图效果(view.png)
2、视图所涉及的对象以及数据量:
data info 1来自CObject
data info 2来自BObject
data info 3来自AObject
data info 4来自BObject
就目前的数据情况来看:BObject对应的b表和AObject对应的a表数据量都非常的大(百万行以上,预计会达到1000万行左右)
3、AObject所映射的表是一个关联表:AObject<id:bid:cid:did:rid:data>
4、以前系统对视图的处理方式为:
DAO层:
java 代码
- List<viewdata> getViewData(String dId,int start,int count){
- //do associate sql query
- return query.list();
- }
处理的时候直接使用HQL实现,语句为:
- select c.datainfo1,b.datainfo2,b.datainfo4,a.datainfo3,a.bId from CObject c,
- BObject b,AObject a where a.dId =? and a.bId = b.id and a.cId = c.id;
service层:
java 代码
- Page genViewData(String dId,int start,int count){
- Iterator itr = dao.getViewData(dId,start,count+start).iterator();
- long totalCount = dao.getViewDataCounts(dId);
- return PageUtil.getPage(itr, start, count, totalCount, log);
- }
DAO层:添加getAObjectById方法,去掉getViewData方法,如下
public List<aobject> getAObjectByDId(String dId,int start,int count){ //do query by id select a from AObject a where a.dId =? return query.list(); }
service层:
java 代码
- Page getViewData(String dId,int start,int count){
- List<aobject> a= dao.getAObjectByDId(dId,start,count+start);
- Iterator it = a.iterator();
- List<viewdata> res = new ArrayList<viewdata>();
- while(it.hasNext()){
- ViewData vo = new ViewData();
- AObject ao = (AObject)it.next();
- BObject bo = dao1.getBObjectById(ao.getBId());
- CObject co = dao.getCObjectById(ao.getCId());
- //vo.setXXX
- res.add(vo)
- }
- Iterator itr = res.iterator();
- long totalCount = dao.getViewDataCounts(dId);
- return PageUtil.getPage(itr, start, count, totalCount, log);
- }