有2张表 一张仓库表 一张物料表 仓库表中materielid 关联物料表ID 代码如下HttpServletRequest req= ServletActionContext.getRequest();
HibDao hd=new HibDao();
String hql="from Cangku";
List<Cangku> cangku=(List<Cangku>)hd.query(hql);
List<Materiel> mt=new ArrayList<Materiel>();
for (Cangku c:cangku){
String hql_b = "from Materiel where id ='"+c.getMaterielid()+"'";
List<Materiel> m=(List<Materiel>)hd.query(hql_b);
mt.add(m.get(0));
System.out.println(mt.size());
}
req.setAttribute("cangku",cangku);
req.setAttribute("mt",mt);
前面平均1秒输出个10来次 越到后面越慢 大概输出到2000+的时候就是1秒输出2-3次了 再到后面基本不动了
考虑到的确不科学 每次循环都要进行次数据连接
然后
String hql="from Cangku c , Materiel m where c.materielid = m.id";
List l=hd.query(hql);
System.out.println(l.size());
req.setAttribute("l",l);
return "success";考虑到这样写 由于数据太多 也考虑不到这样写会不会有隐患 SIZE输出数量是没错的 但是不知道每一条是否是对应的然后前台JSP
<% List l= (List)request.getAttribute("l");
for(int i=0;i<l.size();i++)
{
然后这里不会取了。。
}
%>在线等啊 新手求指点
HibDao hd=new HibDao();
String hql="from Cangku";
List<Cangku> cangku=(List<Cangku>)hd.query(hql);
List<Materiel> mt=new ArrayList<Materiel>();
for (Cangku c:cangku){
String hql_b = "from Materiel where id ='"+c.getMaterielid()+"'";
List<Materiel> m=(List<Materiel>)hd.query(hql_b);
mt.add(m.get(0));
System.out.println(mt.size());
}
req.setAttribute("cangku",cangku);
req.setAttribute("mt",mt);
前面平均1秒输出个10来次 越到后面越慢 大概输出到2000+的时候就是1秒输出2-3次了 再到后面基本不动了
考虑到的确不科学 每次循环都要进行次数据连接
然后
String hql="from Cangku c , Materiel m where c.materielid = m.id";
List l=hd.query(hql);
System.out.println(l.size());
req.setAttribute("l",l);
return "success";考虑到这样写 由于数据太多 也考虑不到这样写会不会有隐患 SIZE输出数量是没错的 但是不知道每一条是否是对应的然后前台JSP
<% List l= (List)request.getAttribute("l");
for(int i=0;i<l.size();i++)
{
然后这里不会取了。。
}
%>在线等啊 新手求指点
Session session = creatsession();
Query q=session.createQuery(hql);
session.getTransaction().commit();
return q.list();
}也贴出来
System.out.print(l.size());
Object obj = (Object)l.get(0);
System.out.println(obj[0]);
%>里面应该是Object 但是这样输出报错
如果不需要手动关闭。。可以使用
/**
* 读取发件箱短消息列表数据
*/
@SuppressWarnings("unchecked")
public List<SmsResp> getSmsResps(final String hsql,
final int start, final int size) {
return (List<SmsResp>) this.getHibernateTemplate().execute(
new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(hsql);
query.setFirstResult(start);
query.setMaxResults(size);
List<SmsResp> list = query.list();
return list;
}
});
}
这种方式,通过spring事务配置来自动关闭。
Session session = creatsession();
Query q=session.createQuery(hql);
session.getTransaction().commit();
return q.list();
}
这句是手动创建session
HibDao hd=new HibDao();
String hql="from Cangku";
List<Cangku> cangku=(List<Cangku>)hd.query(hql);
List<Materiel> mt=new ArrayList<Materiel>();
for (Cangku c:cangku){
String hql_b = "from Materiel where id ='"+c.getMaterielid()+"'";
List<Materiel> m=(List<Materiel>)hd.query(hql_b);
mt.add(m.get(0));
System.out.println(mt.size());
}
req.setAttribute("cangku",cangku);
req.setAttribute("mt",mt);
这个查询 首先连接数据库的次数过多,,,用连接查询减少连数据库次数,加个分页,,最好,,,不知道你有没有加索引实在数据太大!!!没有分页,怎么搞性能都起不来
问题是怎么取LIST里的东西啊
Query query = session.createQuery(hsql);
query.setFirstResult(start);
query.setMaxResults(size);
List<SmsResp> list = query.list();
return list;
设置一下下标和记录数,就好了。。分页在数据库进行,,效率肯定高。拿出来的list数据量也不大啊。。就算你一页分500条, 那list也不过500条数据,每次
不知道有没有理解对你的意思、?
<script type="text/javascript">
Ext.onReady(function(){
<%List<Buys> buys = (List<Buys>)request.getAttribute("buys");
List<Client> cl = (List<Client>)request.getAttribute("cl");
List sum=(List)request.getAttribute("sum");
String s="";
for (int i=0;i<buys.size();i++){
s=s+"['"+(i+1)+"',";
s=s+"'"+((Buys)buys.get(i)).getBuycoding().toString()+"',";
s=s+"'"+((Client)cl.get(i)).getCoding().toString()+"',";
s=s+"'"+((Client)cl.get(i)).getShortname().toString()+"',";
s=s+"'"+((Buys)buys.get(i)).getBuytime().toString()+"',";
s=s+"'"+sum.get(i)+"',";
s=s+"'"+((Buys)buys.get(i)).getBuytype().toString()+"',";
s=s+"'"+((Buys)buys.get(i)).getSaleman().toString()+"',";
String dis=((Buys)buys.get(i)).getDis().toString();
s=s+"'"+((Buys)buys.get(i)).getId().toString()+"',";
if(dis.equals("0")||dis=="0"){
if((i+1)==buys.size())
s=s+"'不生效']";
else
s=s+"'不生效'],";
}else{
if((i+1)==buys.size())
s=s+"'生效']";
else
s=s+"'生效'],";
}
}
%>
var myData = [ <%= s%>
];
<% s=null;
System.gc();
%>
// example of custom renderer function
function change(val){
if(val > 0){
return '<span style="color:green;">' + val + '</span>';
}else if(val < 0){
return '<span style="color:red;">' + val + '</span>';
}
return val;
}
// example of custom renderer function
function pctChange(val){
if(val > 0){
return '<span style="color:green;">' + val + '%</span>';
}else if(val < 0){
return '<span style="color:red;">' + val + '%</span>';
}
return val;
} // create the data store
var store = new Ext.data.Store({
proxy: new Ext.ux.data.PagingMemoryProxy(myData),
remoteSort:true,
sortInfo: {field:'price', direction:'ASC'},
reader: new Ext.data.ArrayReader({
fields: [
{name: '序号'},
{name: '采购单号'},
{name: '供应商代码'},
{name: '供应商名称'},
{name: '订单日期'},
{name: '金额'},
{name: '付款方式'},
{name: '制单人'},
{name: 'id'},
{name: '是否生效'}
]
})
});
// create the Grid
var grid = new Ext.grid.GridPanel({
store: store,
columns: [
{id:'序号',header: "序号", width: 20, sortable: true, dataIndex: '序号'},
{header: "采购单号", width: 125 , sortable: true, dataIndex: '采购单号'},
{header: "供应商代码", width: 125, sortable: true, dataIndex: '供应商代码'},
{header: "供应商名称", width: 75, sortable: true, dataIndex: '供应商名称'},
{header: "订单日期", width: 75, sortable: true, dataIndex: '订单日期'},
{header: "金额", width: 65, sortable: true, dataIndex: '金额'},
{header: "付款方式", width: 85, sortable: true, dataIndex: '付款方式'},
{header: "制单人", width: 85, sortable: true, dataIndex: '制单人'},
{header: "id",hidden:true, width: 105, sortable: true, dataIndex: 'id'},
{header: "是否生效", width: 85, sortable: true, dataIndex: '是否生效'}
],
stripeRows: true,
autoExpandColumn: '序号',
height:Ext.get("grid-example").getHeight(),
width:Ext.get("grid-example").getWidth(),
frame:true,
title:'采购单信息',
viewConfig:
{
columnsText:'列',
sortAscText:'升序',
sortDescText:'降序',
getRowClass : function(record,rowIndex,rowParams,store){
if(record.data.是否生效=="不生效"){
return 'x-grid-record-red';
}else{
return '';
} } },
plugins: new Ext.ux.PanelResizer({
minHeight: 100
}), bbar: new Ext.PagingToolbar({
pageSize: 24,
store: store,
displayInfo: true, plugins: new Ext.ux.ProgressBarPager()
})
});
grid.render('grid-example');
function rowdblclickFn(grid, rowIndex, e){//双击事件
var row = grid.store.getById(grid.store.data.items[rowIndex].id);
var url; //转向网页的地址;
var name; //网页名称,可为空;
var iWidth=900; //弹出窗口的宽度;
var iHeight=668; //弹出窗口的高度;
var iTop = (window.screen.availHeight-30-iHeight)/2; //获得窗口的垂直位置;
var iLeft = (window.screen.availWidth-10-iWidth)/2; //获得窗口的水平位置;
// window.open("/erp/buy/queryonestock?id='"+row.get("id")+"'","re",'height='+iHeight+',,innerHeight='+iHeight+',width='+iWidth+',innerWidth='+iWidth+',top='+iTop+',left='+iLeft+',toolbar=no,menubar=no,scrollbars=yes,resizeable=no,location=no,status=no');
window.location.href="/erp/buy/queryonestock?id='"+row.get("id")+"'";
}
grid.addListener('rowdblclick', rowdblclickFn);
store.load({params:{start:0, limit:25}});
});
</script>这样用GridPanel分。
List<Object[]> list = query.list();
for(Object[] objs : list){
for(Object obj : objs){
if(obj instanceof Cangku ){
Cangku simp = (Cangku )obj;
System.out.println(simp.getName());
}
if(obj instanceof Materiel ){
Materiel us = (Materiel )obj;
System.out.println(us.getAge());
}
}
}