一个hibernate动态查询

本文介绍了一个基于Hibernate查询语言(HQL)实现的照片分类动态查询方法。该方法可根据展示状态、分类名称、用户ID、添加日期范围及相册类型等多个条件进行灵活筛选,并支持分页显示结果。此外,还涉及了日期格式化、缓存设置等实用技巧。
//@author lzj
//lzj:根据条件动态查询
  public List findPhotoAllDyn(String isshow,String classname,String userid,String start, String end,String phototypeid,String pagenum){
  StringBuffer hqlStr = new StringBuffer("select pt.STypename,pc.IPhotoclass,pc.SNames,pc.SUsername,pc.IStatus,pc.IShow ,pc.DAdddate ,pt.ITypeid,count(pr) from TPhototype pt right outer join pt.TPhotoclasses pc left join ");
    try{
     if(Integer.parseInt(isshow)==0)hqlStr.append("pc.TPicturescores pr Where pc.IShow=0 ");
     if(Integer.parseInt(isshow)==1)hqlStr.append("pc.TShowopuses pr Where pc.IShow=1 ");
     if(Integer.parseInt(isshow)==-1)hqlStr.append("pc.TPicturescores pr Where pc.IShow is not null ");
     }catch(Exception e){
      hqlStr.append("pc.TPicturescores pr Where pc.IShow=0 ");
     }
    if(classname!="")hqlStr.append("and pc.SNames=:sn "); 
    if(userid!="")hqlStr.append("and pc.SUsername =:SUsername ");
    if(start!="")hqlStr.append("and pc.DAdddate between :Start ");
    if(end!="")hqlStr.append("and :End ");
    if(phototypeid!="")hqlStr.append("and pt.ITypeid = :ITypeid ");
    hqlStr.append("group by pt.STypename,pc.IPhotoclass,pc.SNames,pc.SUsername,pc.IStatus,pc.IShow ,pc.DAdddate ,pt.ITypeid order by count(pr) desc ");
    Session session =this.getSession();
   Query query = session.createQuery(hqlStr.toString());
   if(classname!="")query.setString("sn",classname);
   if(userid!="")query.setString("SUsername",userid);
   if(phototypeid!="")query.setString("ITypeid",phototypeid);
   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
   if(start!="")
    try {
     query.setDate("Start",sdf.parse(start));
    } catch (ParseException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   if(end!="")
    try {
     query.setDate("End",sdf.parse(end));
    } catch (ParseException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   query.setCacheable(true);
   if (pagenum == null){
        /*如果pagenum是空,则数据从第一条开始*/
          query.setFirstResult(0);
        /*设置查询开始的第几条数据,这里是从第1条开始*/
          query.setMaxResults(PageSize);
        /*设置查询数据条数*/
          }else{
           try{
           Integer p = (Integer.valueOf(pagenum)-1) * PageSize;
           query.setFirstResult(p);
           query.setMaxResults(PageSize);
           }catch (Exception e){
            query.setFirstResult(0);
         query.setMaxResults(PageSize);  
           }
          }
   List result = query.list();
      List templist = new ArrayList();
      for (Iterator it = result.iterator();it.hasNext();){
       Map mm = new HashMap();
       Object[] row=(Object[])it.next();
        Query query2 =session.createQuery("from TPopularshow ps where ps.SUpid = :s");
        query2.setString("s", ((Long)row[1]).toString());
        query2.setCacheable(true);
        List result2 = query2.list();
        Iterator it2 = result.iterator();
         if (query2.list().size()>0){
          mm.put("ps", "yes");
         } else{
          mm.put("ps", "");
         }
       mm.put("STypename", (String)row[0]);
       mm.put("IPhotoclass", (Long)row[1]);
       mm.put("SNames", (String)row[2]);
       mm.put("SUsername", (String)row[3]);
       //mm.put("IStatus",(Long)row[4]);
       if((Long)row[4]==null){
        mm.put("IStatus2","");
       }else if((Long)row[4]==1){
        mm.put("IStatus","半开放");
        mm.put("IStatus2",(Long)row[4]);
       }else if((Long)row[4]==2){
       mm.put("IStatus","开放");
       mm.put("IStatus2",(Long)row[4]);
       }else if((Long)row[4]==0){
        mm.put("IStatus","不开放");
        mm.put("IStatus2",(Long)row[4]);
       }
       if((Long)row[5]==0){
        mm.put("IShow", "普通相册");
        mm.put("ptype", 1);
        mm.put("IShowb", 3);
       }else if((Long)row[5]==1){
        mm.put("IShow", "特殊相册");
        mm.put("ptype", 2);
        mm.put("IShowb", 4);
       }
       //mm.put("IShow", (Long)row[5]);
       mm.put("DAdddate", (Date)row[6]);
       mm.put("Count", (Long)row[8]);
       templist.add(mm);
      }
      session.close();
      return templist;
     }
基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)内容概要:本文围绕“基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究”,介绍了利用Matlab代码实现配电网可靠性的仿真分析方法。重点采用序贯蒙特卡洛模拟法对配电网进行长时间段的状态抽样与统计,通过模拟系统元件的故障与修复过程,评估配电网的关键可靠性指标,如系统停电频率、停电持续时间、负荷点可靠性等。该方法能够有效处理复杂网络结构与设备时序特性,提升评估精度,适用于含分布式电源、电动汽车等新型负荷接入的现代配电网。文中提供了完整的Matlab实现代码与案例分析,便于复现和扩展应用。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及电力行业技术人员,尤其适合从事配电网规划、运行与可靠性分析相关工作的人员; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在电力系统可靠性评估中的基本原理与实现流程;②学习如何通过Matlab构建配电网仿真模型并进行状态转移模拟;③应用于含新能源接入的复杂配电网可靠性定量评估与优化设计; 阅读建议:建议结合文中提供的Matlab代码逐段调试运行,理解状态抽样、故障判断、修复逻辑及指标统计的具体实现方式,同时可扩展至不同网络结构或加入更多不确定性因素进行深化研究。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值