您的位置:首页 > 编程语言 > Java开发

Java web 程序优化例子

2017-02-09 08:56 381 查看
标题:Java POI 批量导入功能 双重循环读取数据:

文章地址:http://blog.csdn.net/u014266877/article/details/54378381

示例代码:

Controller:

//循环读取每行所有列数据
for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
XSSFRow hssfRow = hssfSheet.getRow(rowNum);
if(hssfRow != null){
List<String> list = new ArrayList<String>();
//将表格自每行数据添加到 list中 (list 集合的数据是有序号的 方便数据对应)
for (int i = 0; i < 28; i++) {// 28 代表导入 excel 模板中的列数
XSSFCell xssfCell = hssfRow.getCell(i);
//初始化列值(不建议导入数据库对应表添加过多非空校验, 导入数据可能为空)
String date = null;
//预防空指针
if(xssfCell != null){
//17 列 18 列(下标从0开始 16就是17列)是时间类型, 默认用 String 类型接收
if(i == 16 || i == 17){
date = Common.fromDateY(xssfCell.getDateCellValue());
}else{
date = String.valueOf(xssfCell);
}
}
list.add(date);
}
//这些数据不是表格中的 保存 登陆用户, 添加时间, 状态, 显示
list.add(1 + "");
list.add(loginAccount);
list.add(Common.fromDateH());
list.add(1 + "");
dataMap.put(numSheet, list);
}
}

service:
Map<String, Map<Integer, List<String>>> leadingInData = new HashMap<String, Map<Integer, List<String>>>();
@Override
public int circleInsertInterface(Map<String, Map<Integer, List<String>>> data) {
return interfaceConcludeSignMapper.circleInsertInterface(data);
}


dao mapper:

<!-- 批量添加已签接口 -->
<insert id="circleInsertInterface" parameterType="map">
INSERT INTO interface_conclude_sign(
interface_name,
parent_interface_name,
son_interface_name,
interface_remark,
catalog_name
) VALUES
<foreach collection="leadingInData" item="map_item" index="i" separator=",">
(
<foreach collection="map_item" item="list_item" index="j" separator=",">
#{list_item}
</foreach>
)
</foreach>
excel 表格列(mapper excel 一对一):

接口名 父接口名 子接口名 接口备注 接口分类

标题: Java 实现导出Excel功能

文章地址:http://blog.csdn.net/u014266877/article/details/53691381

示例代码:
/**
* @Description 会员资质审核数据导出
* @author            <p style="color:#8e8e8e;font-family:微软雅黑;font-size=16px;font-weight:bold;">Cloud</p>
* @date            <p style="color:#000;font-family:微软雅黑;font-size=16px;">2017-1-5上午10:16:59</p>
* @param response        请求头信息
* @param accountName        帐号
* @param type            审核类型
* @param userName        用户名
* @param auditCode        审核状态
* @param auditUser        审核帐号
* @param realName        个人认证名称
* @param companyName        企业认证名称
* @param stDate        开始时间
* @param enDate        结束时间
* @throws Exception
*/
@RequestMapping(value = "/memberQualification")
@ResponseBody
public void memberQualification(HttpServletResponse response, String accountName, Integer type, String userName,
Integer auditCode, String auditUser, String realName, String companyName, String stDate, String enDate) throws Exception{
Map<String, String> paramMap = new HashMap<String, String>();
// 导出条件
if (accountName != null) {
accountName = new String(accountName.getBytes("ISO-8859-1"), "utf-8");
paramMap.put("accountName", accountName);
}
// 根据条件查询数据 默认为匹配数据前 5 万条 防止数据量超出大小 影响性能
List<Membership> list = membershipQualificationServiceImpl.queryMembershipQualification(paramMap, 50000, 1);
if(!list.isEmpty()){// 非空核验
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("memberQualificaList", list);
//导出数据
exportDate(response, "会员资质审核", dataMap, 8);
}else {
logger.info("导出会员资质审核信息:导出数据为空");
}
}

/**
* @Description 导出数据公用方法
* @author        <p style="color:#8e8e8e;font-family:微软雅黑;font-size=16px;font-weight:bold;">Cloud</p>
* @date        <p style="color:#000;font-family:微软雅黑;font-size=16px;">2017-1-4下午1:56:57</p>
* @param response    请求头信息
* @param exportName    导出数据名称
* @param dataMap        导出数据
* @param exportType    导出类型
* @throws Exception    异常信息
*/
protected void exportDate(HttpServletResponse response, String exportName, Map<String, Object> dataMap, Integer exportType) throws Exception{
// 第一步,创建一个webbook,对应一个Excel文件
HSSFWorkbook wb = new HSSFWorkbook();
// 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
HSSFSheet sheet = wb.createSheet(exportName);
// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
HSSFRow row = sheet.createRow((int) 0);
// 第四步,设置样式
HSSFCellStyle style = setHeadStyle(row, wb, 500, 10, HSSFFont.BOLDWEIGHT_BOLD);
// 第五步,设置导出数据
setExportDate(dataMap, sheet, row, style, exportType);
// 第六步,弹出下载框
popDownload(response, wb, exportName + "-" + Common.generateFileName(".csv"));
}
//详细代码参考我的博客;


标题: 添加修改方法集成, 严格分层 service dao mapper controller
/**
* @Description        添加/修改岗位
* @author        <p style="color:#8e8e8e;font-family:微软雅黑;font-size=16px;font-weight:bold;">Cloud</p>
* @date        <p style="color:#000;font-family:微软雅黑;font-size=16px;">2016-12-20下午5:14:42</p>
* @param request    请求头信息
* @param quar        岗位信息
* @return        成功/失败信息
*/
@RequestMapping(value = "saveQuarters")
@ResponseBody
public JSONObject saveQuarters(HttpServletRequest request, Quarters quar) {
Integer res = 0;
try {
if (quar.getPost_id() != 0) {// 修改
res = menuServiceImpl.updateQuarters(quar);
res = (res > 0 ? 2 : 0);
} else {// 添加
User user = (User) request.getSession().getAttribute("USER");
quar.setAdd_user(user.getUserId());
res = menuServiceImpl.insertQuarters(quar);
}
} catch (Exception e) {
e.printStackTrace();
}
String returnCode = Common.getReturnCode(res, res);
return JSONObject.fromObject(returnCode);
}


标题: 以写的更少, 做的更多的Jquery思想, 简化分页查询

简单写下SQL思路:

<!-- 查询支付宝充值记录 -->
<select id="queryAlipayRecharge" parameterType="map" resultType="com.chinadatapay.entity.PayMent">
SELECT
<if test="param.start == null and param.end == null">
<!-- 分页 一个方法多用,既能统计数据,又能实现分页查询总数 -->
SUM(money) money, COUNT(*) id
</if>
<if test="(param.start != null or param.start == 0) and (param.end != null or param.end == 0) ">
*
</if>
FROM table
<if test="(param.start != null or param.start == 0) and (param.end != null or param.end == 0)">
ORDER BY memb.createTime DESC
LIMIT #{param.start}, #{param.end}
</if>
</select>
mapper dao service 各减少一个方法 在controller中对service进行再次调用:
/**
* @Description    数据宝接口属性统计
* @param    page    页码
* @param    rows    页数
* @param    account    帐户
* @return
*/
@RequestMapping(value = "/interfaceAttrCount")
@ResponseBody
public Map<String, Object> interfaceAttrCount(Integer page, Integer rows,
MembershipAccount account) {
List<FinanceCount> incomeCount = new ArrayList<FinanceCount>();
List<FinanceCount> incomeList = new ArrayList<FinanceCount>();
Map<String, Object> map = new HashMap<String, Object>();
try {
//查询条件
String interfaceName = account.getInterfaceName();
if (Common.isNoEmpty(interfaceName)) {
interfaceName = java.net.URLDecoder.decode(interfaceName,"utf-8");
account.setInterfaceName(interfaceName);
}
//第一次调用 查询总条数 开始、结束 null 不会有 limit 分页
account.setStart(null);
account.setEnd(null);
incomeCount = archiveCatalogServiceImpl.interfaceAttrCount(account);// 查询总条数
if (page != null && rows != null) {
account.setStart((page - 1) * rows);
account.setEnd(rows);
} else {// 默认分页参数
account.setStart(0);
account.setEnd(20);
}
//第二次调用 分页查询匹配记录 开始、结束 为传入值 limit 分页
incomeList = archiveCatalogServiceImpl.interfaceAttrCount(account);
} catch (Exception e) {
e.printStackTrace();
}
map.put("total",(incomeCount != null && incomeCount.size() > 0) ? incomeCount.get(0).getInterfaceId() : 0);
map.put("rows", incomeList);
return map;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息