1.JasperReport與Hibernate的整合
更改JRXML文件
queryString標籤裏面加一個屬性language="hql",然後裏面就不用SQL語句了,寫HQL
- <queryString language="hql">
- <![CDATA[from Aircraft aircraft where country = $P{countryCode}
- order by aircraft.id]]>
- </queryString>
JRXML文件裏面的field是HQL語言查出來的字段
Hibernate配置文件和DOJO類配置文件都一樣,不做更改,而在業務LOGIC上有小的改動
- //輸出流
- ServletOutputStream servletOutputStream =
- response.getOutputStream();
- //輸入流
- InputStream reportStream = getServlet().getServletConfig()
- .getServletContext().getResourceAsStream("xxxx/xxxx.jasper");
- //設格式爲PDF文件
- response.setContentType("application/pdf");
- //Session的創建不變
- SessionFactory sessionFactory = new Configuration().configure().
- buildSessionFactory();
- Session session = sessionFactory.openSession();
- //要在Map裏面放入Session
- Map parameterMap = new HashMap();
- parameterMap.put(JRHibernateQueryExecuterFactory.PARAMETER_
- HIBERNATE_SESSION, session);
- //使用JasperFileManager的這個方法,生成jprint文件,如果在WEB裏面,可以不生成
- //JasperFillManager.fillReportToFile("/xxx/xxxx.jasper","/xxx/xxx.jprint",session);
- //輸出PDF流到WEB頁
- JasperRunManager.runReportToPdfStream(reportStream,
- servletOutputStream, parameterMap);
- session.close();
- servletOutputStream.flush();
- servletOutputStream.close();
- return mapping.getInputForward();
就是在生成jprint文件或JasperPrint對象的時候,把JRHibernateQueryExecuterFactory.PARAMETER_
HIBERNATE_SESSION裏面的值設爲session