我们要实现的效果:

 
 
进入到这个页面后,输入要查询的条件,查询出药品表的数据,然后按下导出按钮 ,就会在服务器的一个目录下生成一个药品表的excel表格。
 点击”导出”之后:
点击下载就能下载Excel表格,实现导出功能。
 
 
 
讲解如下:
 
还是分为三层:
1:Dao层
 
 
我们先看sql语句。
在PL/SQL写sql:
select
id,
bm,
mc,
jx,
gg,
zhxs,
scqymc,
spmc,jyzt,
zbjg,
(select info from dictinfo where dictinfo.typecode=''and dictinfo.dictcode=ypxx.jyzt )jyztmc//药品的使用状态
from ypxx
结果:

我们要查的药品的表格里面包含了药品的使用状态(使用,停用),所以不单单是对药品表的查询,也包含了别的表,所以。我们的po类是一个自定义的类:YpxxMaapaerCustom.java:这个类继承于Ypxx.java这个单表的po类。

package yycg.business.pojo.vo;
import yycg.business.pojo.po.Ypxx;
/**
*
* @ClassName: YpxxCustom
* @Description: 从数据库中查出来的数据放在这里。也就是自定义的pojo类
* @author A18ccms a18ccms_gmail_com
* @date 2016年11月23日 上午12:00:19
*
*/
public class YpxxCustom extends Ypxx{ private String jyztmc; public String getJyztmc() {
return jyztmc;
} public void setJyztmc(String jyztmc) {
this.jyztmc = jyztmc;
} }
 接下来我们写
 YpxxMapperCustom.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="yycg.business.dao.mapper.YpxxMapperCustom" >
<!-- 药品目录查询条件 -->
<sql id="query_ypxx_where">
<if test="ypxxCustom!=null">
<!-- 药品的流水号 -->
<if test="ypxxCustom.bm!=null and ypxxCustom.bm!=''">
and ypxx.bm = #{ypxxCustom.bm}
</if>
<!-- 药品的通用名 -->
<if test="ypxxCustom.mc!=null and ypxxCustom.mc!=''">
and ypxx.mc = #{ypxxCustom.mc}
</if>
<!-- 药品的剂型-->
<if test="ypxxCustom.jx!=null and ypxxCustom.jx!=''"> and ypxx.jx like '%${ypxxCustom.jx}%' </if>
<!-- 药品的类别-->
<if test="ypxxCustom.lb!=null and ypxxCustom.lb!=''"> and ypxx.lb = #{ypxxCustom.lb} </if>
<!-- 药品的启用停止-->
<if test="ypxxCustom.jyzt!=null and ypxxCustom.jyzt!=''"> and ypxx.jyzt = #{ypxxCustom.jyzt} </if> </if>
</sql>
<!-- 药品目录查询
这个yycg.business.pojo.vo.YpxxQueryVo是包装类,从Action传数据时用的。 -->
<select id="findYpxxList" parameterType="yycg.business.pojo.vo.YpxxQueryVo" resultType="yycg.business.pojo.vo.YpxxCustom">
select
id,
bm,
mc,
jx,
gg,
zhxs,
scqymc,
spmc,jyzt,
zbjg,
(select info from dictinfo where dictinfo.typecode='003'and dictinfo.dictcode=ypxx.jyzt )jyztmc
from ypxx
<where>
<include refid="query_ypxx_where"></include>
</where>
</select>
</mapper>

接下来写Mapper接口:

package yycg.business.dao.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import yycg.business.pojo.po.Ypxx;
import yycg.business.pojo.po.YpxxExample;
import yycg.business.pojo.vo.YpxxCustom;
import yycg.business.pojo.vo.YpxxQueryVo;
/*
* Dao层
*/
public interface YpxxMapperCustom {
/*
* 查找药品的数据
*/
public List<YpxxCustom> findYpxxList(YpxxQueryVo ypxxQueryVo); }

接下来写Service层:

我们直接看实现类:

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import yycg.business.dao.mapper.YpxxMapperCustom;
import yycg.business.pojo.vo.YpxxCustom;
import yycg.business.pojo.vo.YpxxQueryVo;
import yycg.business.service.YpxxService; public class YpxxServiceImpl implements YpxxService {
@Autowired
YpxxMapperCustom ypxxMapperCustom;
@Override
public List<YpxxCustom> findYpxxList(YpxxQueryVo ypxxQueryVo) {
return ypxxMapperCustom.findYpxxList(ypxxQueryVo); } }

我们看Action层:

package yycg.business.action;

import java.util.ArrayList;
import java.util.List; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import yycg.base.pojo.po.Dictinfo;
import yycg.base.process.context.Config;
import yycg.base.process.result.ResultUtil;
import yycg.base.process.result.SubmitResultInfo;
import yycg.base.service.SystemConfigService;
import yycg.business.pojo.vo.YpxxCustom;
import yycg.business.pojo.vo.YpxxQueryVo;
import yycg.business.service.YpxxService;
import yycg.util.ExcelExportSXXSSF;
import yycg.util.Ypxx; @Controller
@RequestMapping("/ypml")
public class YpxxAction { @Autowired
YpxxService ypxxService;
@Autowired
private SystemConfigService systemConfigService; //导出页面的展示 @RequestMapping("/exportYpxx")
public String exPortYpxx(Model model) throws Exception
{
/**
* 这些数据查出来后填充到查询页面上。
*/
List<Dictinfo> yplblist=systemConfigService.findDictinfoByType("001");
model.addAttribute("yplblist", yplblist); List<Dictinfo> jyztlist=systemConfigService.findDictinfoByType("003");
model.addAttribute("jyztlist", jyztlist); return "/business/ypml/exportYpxx";
} //导出提交
@RequestMapping("/exportYpxxSubmit")
public @ResponseBody SubmitResultInfo exPortYpxxsubmit(YpxxQueryVo ypxxQueryVo)throws Exception
{
//查询到数据
List<YpxxCustom> list=ypxxService.findYpxxList(ypxxQueryVo); /** 导出文件存放物理路径
* @param fileWebPath
* 导出文件web下载路径
* @param filePrefix
* 导出文件名的前缀
* @param flushRows
* 存放在内存的数据量
* @param fieldNames
* 导出文件列标题
* @param fieldCodes
* 导出数据对象的字段名称
* @param flushRows*/
//导出文件存放的路径,并且是虚拟目录指向的路径
String filePath = "d:/upload/linshi/";
//导出文件的前缀
String filePrefix="ypxx";
//-1表示关闭自动刷新,手动控制写磁盘的时机,其它数据表示多少数据在内存保存,超过的则写入磁盘
int flushRows=100; //指导导出数据的title
List<String> fieldNames=new ArrayList<String>();
fieldNames.add("流水号");
fieldNames.add("通用名");
fieldNames.add("剂型");
fieldNames.add("规格");
fieldNames.add("转换系数 ");
fieldNames.add("生产企业");
fieldNames.add("商品名称");
fieldNames.add("中标价");
fieldNames.add("交易状态"); //告诉导出类数据list中对象的属性,让ExcelExportSXXSSF通过反射获取对象的值
List<String> fieldCodes=new ArrayList<String>();
fieldCodes.add("bm");//药品流水号
fieldCodes.add("mc");//通用名
fieldCodes.add("jx");
fieldCodes.add("gg");
fieldCodes.add("zhxs");
fieldCodes.add("scqymc");
fieldCodes.add("spmc");
fieldCodes.add("zbjg");
fieldCodes.add("jyztmc"); //注意:fieldCodes和fieldNames个数必须相同且属性和title顺序一一对应,这样title和内容才一一对应 //开始导出,执行一些workbook及sheet等对象的初始创建,以及表格建在哪里
//"/upload/"本来是服务器的磁盘目录,但是我们是一台机器做开发,所以见建立一个虚拟目录。
ExcelExportSXXSSF excelExportSXXSSF = ExcelExportSXXSSF.start(filePath, "/upload/", filePrefix, fieldNames, fieldCodes, flushRows); //准备导出的数据,将数据存入list,且list中对象的字段名称必须是刚才传入ExcelExportSXXSSF的名称 //执行导出,把数据导入到excel表
excelExportSXXSSF.writeDatasByObject(list); /*
* new Object[]{list.size(),excelExportSXXSSF.exportFile()}参数:一共导出的数据数量,.exportFile()导出文件。
*/
return ResultUtil.createSubmitResult(ResultUtil.createSuccess(Config.MESSAGE, 313, new Object[]{list.size(),excelExportSXXSSF.exportFile()})); } }

写页面调试:

修改menu.json:

{
"menus" : [{"icon" : "icon-sys","menuid" : "1","menuname" : "系统管理","url" : "","menus" : [
{"icon" : "icon-log","menuid" : "1_1","menuname" : "用户管理","url" : "/yycgproject/user/queryuser.action"
}]
},
{"icon" : "icon-sys","menuid" : "1","menuname" : "药品目录 ","url" : "","menus" : [
{"icon" : "icon-log","menuid" : "1_1","menuname" : "药品目录导出","url" : "/yycgproject/ypml/exportYpxx.action"
}]
}
]
}

就会出现:

然后点击“药品目录导出”进入到YpxxAction.java中的@RequestMapping("/exportYpxx")public String exPortYpxx(Model model) throws Exception然后

进入到exportYpxx.jsp页面:

exportYpxx.jsp这个页面:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ include file="/WEB-INF/jsp/base/tag.jsp"%>
<html>
<head>
<title>药品目录导出</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> <%@ include file="/WEB-INF/jsp/base/common_css.jsp"%>
<%@ include file="/WEB-INF/jsp/base/common_js.jsp"%> <script type="text/javascript">
//药品信息导出
function ypxxexport(){
//调用ajax Form提交
jquerySubByFId('ypxxlistFrom',ypxxExprot_callback,null,"json"); }
function ypxxExprot_callback(data){ //在这里提示信息中有文件下载链接
message_alert(data); }
</script> </head>
<body>
<!-- 导出条件 --> <form id="ypxxlistFrom" name="ypxxlistFrom" action="${baseurl}ypml/exportYpxxSubmit.action" method="post">
<TABLE class="table_search">
<TBODY>
<TR>
<TD class="left">流水号:</TD>
<td ><INPUT type="text" name="ypxxCustom.bm" /></td>
<TD class="left">通用名:</td>
<td><INPUT type="text" name="ypxxCustom.mc" /></TD> <TD class="left">药品类别:</TD>
<td >
<select id="ypxxCustom.lb" name="ypxxCustom.lb" style="width:150px">
<option value="">全部</option>
<c:forEach items="${yplblist}" var="value">
<option value="${value.id}">${value.info}</option>
</c:forEach>
</select>
</td>
<TD class="left">交易状态:</TD>
<td >
<select id="ypxxCustom.jyzt" name="ypxxCustom.jyzt" style="width:150px">
<option value="">全部</option>
<c:forEach items="${jyztlist}" var="value">
<option value="${value.dictcode}">${value.info}</option>
</c:forEach>
</select> </td>
</TR>
<tr>
<td colspan="12" style="text-align:center"><a id="btn" href="#" onclick="ypxxexport()" class="easyui-linkbutton" iconCls='icon-search'>导出</a></td>
</tr>
</TBODY>
</TABLE> </form> </body>
</html>
 点击导出进入到YpxxAction.java中的
 @RequestMapping("/exportYpxxSubmit")
    public @ResponseBody SubmitResultInfo exPortYpxxsubmit。
解释一下这个函数中的 //"/upload/"本来是服务器的磁盘目录,但是我们是一台机器做开发,所以见建立一个虚拟目录。 ExcelExportSXXSSF excelExportSXXSSF = ExcelExportSXXSSF.start(filePath, "/upload/", filePrefix, fieldNames, fieldCodes, flushRows);
 
就是说我们用eclipse建立一个虚拟的目录,生成的Excel表格就放在那里,在实现

点击“点击下载”之后,下载excel表格。

 
我们讲一下怎么建立虚拟目录:
双击两次:

进入到:

这样就可以了。

调试:成功。

这样,我们的导出功能就做好了。

 
 

023医疗项目-模块二:药品目录的导入导出-从数据库中查出数据用XSSF导出excel并存放在虚拟目录最后下载(包括调试)的更多相关文章

  1. 027医疗项目-模块二:药品目录的导入导出-导入功能的Action的编写

    前一篇文章我们写了Service层,这篇文章我们写一下Action层. 实现的功能: 1:我们先下载模板:然后按照模板里面的规则,插入数据.比如存在d盘. 2:然后浏览找到那个文件,上传上去. 然后把 ...

  2. 022医疗项目-模块二:药品目录的导入导出-对XSSF导出excel类进行封装

    资源全部来源于传智播客. 好的架构师写的程序,就算给刚入门的新手看,新手一看就知道怎么去用.所以我们要对XSSF导出excel类进行封装.这是架构师的工作,但我们也要知道. 我们写一个封装类: 这个类 ...

  3. 021医疗项目-模块二:药品目录的导入导出-介绍poi类

    我们使用的是.10版本 Apache POI - the Java API for Microsoft Documents,Apache POI 是用Java编写的免费开源的跨平台的 Java API ...

  4. 026医疗项目-模块二:药品目录的导入导出-导入功能的Service的编写

    这个导入功能要实现的效果是: 思路是: 因为我们最后是在Action层中调用的HxlsRead工具,这个工具传入的就是我们要实现的上一篇文章说到的实现了HxlsOptRowsInterface接口的类 ...

  5. 025医疗项目-模块二:药品目录的导入导出-HSSF导入类的封装

    上一篇文章提过,HSSF的用户模式会导致读取海量数据时很慢,所以我们采用的是事件驱动模式.这个模式类似于xml的sax解析.需要实现一个接口,HSSFListener接口. 原理:根据excel底层存 ...

  6. 024医疗项目-模块二:药品目录的导入导出-HSSF导入类的学习

    我们之前学习了怎么把数据的数据导出来保存到Excle中,这篇文章我们学习怎么Excel数据导出然后插入到数据库中. 我们先学习HSSF怎么用来导出数据. 看官方教程步骤如下: 第一步: 创建一个wor ...

  7. 044医疗项目-模块四:采购单模块—采购单保存(Dao,Service,Action三层)

    我们上上一篇文章(042医疗项目-模块四:采购单模块-采购单明细添加查询,并且把数据添加到数据库中)做的工作是把数据插入到了数据库,我们这篇文章做的是042医疗项目-模块四:采购单模块-采购单明细添加 ...

  8. SpringMVC第五篇【方法返回值、数据回显、idea下配置虚拟目录、文件上传】

    Controller方法返回值 Controller方法的返回值其实就几种类型,我们来总结一下-. void String ModelAndView redirect重定向 forward转发 数据回 ...

  9. 035医疗项目-模块三:药品供应商目录模块——供货商药品目录(批量)添加药品的功能---------Service

    这篇文章我们重点介绍Service层.因为Dao层就是用Gysypml逆向生成的Mapper就可以了.所以这里重点讲解Service层. 业务逻辑如下: 1:我们从前端页面传入有两个值:1:userg ...

随机推荐

  1. SAPScript、Smartforms动态打印图像或者背景图片

    在利用 SMARTFORMS 进行打印的时候有时候要求输出的图片可能是随着打印内容的不同而不同了,也就是动态输出图片,SMARTFORMS的提供了相关的支持技术,下面是实现截图 1.创建要显示的图片 ...

  2. android内存泄露调试,Heap,MAT

    三.内存监测工具 DDMS --> Heap 无论怎么小心,想完全避免bad code是不可能的,此时就需要一些工具来帮助我们检查代码中是否存在会造成内存泄漏的地方.Android tools中 ...

  3. 蓝牙Ibeacon室内定位和微信摇一摇周边原理分析

    苹果推出Ibeacon室内定位技术是为了弥补GPS无法覆盖室内定位这种场景.苹果意味着创新,在其推动下,蓝牙Ibeacon得到了极大的应用.而腾讯则是利用蓝牙Ibeacon在场景体验方面进行了创新,实 ...

  4. .NET下Excel报表的打印

    说明:这是一个实验的小例子,在实际项目中使用时,一般Object[,] 对象的数据来源于数据库. 1. 实验环境 开发平台:Visual Studio 2010 测试模板:JBtest Excel:O ...

  5. iOS之UI--主流框架的搭建--仿制QQ的UI框架

    使用XCode搭建多个控制器界面,一般在实际开发中建议超过四个控制器界面使用纯代码. 下面的实例其实已经超过了四个,总结详细步骤的目的,主要是更熟悉XCode的StoryBoard使用细节. 先直接上 ...

  6. 每日Scrum--No.6

    Yesterday:组内各种乱八七糟的问题,还有自己的效率问题 Today:进行小范围的测试实验 Problem:在显示各景点构成的邻接矩阵的时候,第一次编译未出现任何错误的提示,但是在程序运行时,无 ...

  7. Memcache笔记05-Memcache安全性

    Memcache服务器端都是直接通过客户端连接后直接操作,没有任何的验证过程,这样如果服务器是直接暴露在互联网上的话是比较危险,轻则数据泄露被其他无关人员查看,重则服务器被入侵,因为Mecache是以 ...

  8. Effective Java 02 Consider a builder when faced with many constructor parameters

    Advantage It simulates named optional parameters which is easily used to client API. Detect the inva ...

  9. Effective Java 66 Synchronize access to shared mutable data

    synchronized - Only a single thread can execute a method or block at one time. Not only does synchro ...

  10. poj 2195 KM算法

    题目链接:http://poj.org/problem?id=2195 KM算法模板~ 代码如下: #include "stdio.h" #include "string ...