在本月我们学习了redis的缓存,数据导入,导出 ,图片的上传,MQ以及柱状图和饼状图,这里总结了开发中一些常用的功能,以及处理异常的方法,若本文对你有所收获,请一键三连,就是对我最大的支持。
redis 的缓存:
首先我们需要导入redis 的jar包:
<!--jedis整合jar包-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.0.1</version>
</dependency>
applicationContext.xml 需要配置:
<!-- =======================jedis配置=========================== -->
<bean id="jedisPollConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxTotal" value="50" />
<property name="maxIdle" value="20" />
<property name="testOnBorrow" value="true" />
</bean>
<bean id="jedisPool" class="redis.clients.jedis.JedisPool">
<constructor-arg name="poolConfig" ref="jedisPollConfig" />
<constructor-arg name="host" value="localhost" />
<constructor-arg name="port" value="6379" />
<constructor-arg name="timeout" value="10000" />
<constructor-arg name="password" value="root" />
</bean>
在Controller中注意:要加注解
@Autowired
private JedisPool jedisPool;
在实体类中要加@GeneratedValue(generator = "JDBC")
增加的时候:
String json = JSONObject.toJSONString(actore); // String 类型的 jedisPool.getResource().set(actore.getId()+"",json); // 使用Hash类型 jedisPool.getResource().hset("actore",actore.getId()+"",json);
删除的时候:
jedisPool.getResource().del(id);
导入的前端代码:
<%--导入--%>
<div class="modal fade" id="modal_actor_import" role="dialog" aria-labelledby="modal_actor_import" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-body">
<form id="form_import" method="post" action="import1.htm" enctype="multipart/form-data">
<input type="file" name="impfile"/>
<div class="modal-footer">
<button type="submit" class="btn btn-primary">保存</button>
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
</div>
</form>
</div>
</div>
</div>
</div>
隐藏显示:
var validator = $("#form_import").validate({
submitHandler: function (form) {
$(form).ajaxSubmit({
dataType: "json",
success: function (data) {
if (data.success && !data.errorMsg) {
validator.resetForm();
$('#modal_actor_import').modal('hide');
$("#btn_search").click();
} else {
$("#select_message").text(data.errorMsg);
$("#alertmod_table_actor_mod").show();
}
}
});
}
});
Controller中:
@RequestMapping("/import1")
public void import1 (MultipartFile impfile,HttpServletResponse response) throws Exception {
// 创建空的工作薄
HSSFWorkbook workbook = new HSSFWorkbook(impfile.getInputStream());
// 获取表
HSSFSheet sheetAt = workbook.getSheetAt(0);
// 获取最后一个交表
int lastRowNum = sheetAt.getLastRowNum();
for (int i = 1; i <=lastRowNum; i++) {
HSSFRow row = sheetAt.getRow(i);
String name = row.getCell(0).getStringCellValue();
int filmLength = (int)row.getCell(1).getNumericCellValue();
String spec = row.getCell(2).getStringCellValue();
String bir = row.getCell(3).getStringCellValue();
String state = row.getCell(4).getStringCellValue();
String img = row.getCell(5).getStringCellValue();
String cname = row.getCell(6).getStringCellValue();
int cid;
Complees b = new Complees();
b.setName(cname);
List<Complees> list=compleesMapper.select(b);
if(list==null||list.size()==0){
compleesMapper.insertSelective(b);
cid=b.getCid();
}else {
cid=list.get(0).getCid();
}
//
// 1姓名为黑海,部门为随时约---导入数据库 if(name.equals("黑海")&&cid==1){
//
// }
// 2导入状态为是的信息,导入数据库
// if(state.equals("是")){
//
// }
//大于2012年的导入数据库
Date d2 = new SimpleDateFormat("yyyy-MM-dd").parse("2012-10-10");
Date d1 = new SimpleDateFormat("yyyy-MM-dd").parse(bir);
// if(d1.compareTo(d2)>0){
//
// }
Actore a = new Actore();
a.setName(name);
a.setState(state.equals("是")?1:0);
a.setImg(img);
a.setFilmLength(filmLength);
a.setBir(d1);
a.setCid(cid);
a.setSpec(spec);
actoreService.addActore(a);
}
//8.给前端返回结果
JSONObject result=new JSONObject();
result.put("success", true);
WriterUtil.write(response, result.toString());
}
导出前端:
导出
$("#btn_export").click(function () {
location.href = "export1.htm";
});
//导入
$("#btn_import").click(function () {
$('#modal_actor_import').modal('show');
});
后台:
@RequestMapping("/export1")
public void export1(HttpServletResponse response) throws Exception {
//创建空的工作薄
HSSFWorkbook workbook = new HSSFWorkbook();
// 创建空的表
HSSFSheet sheet = workbook.createSheet();
//创建一个数组
String[] tital = {"姓名", "个数", "爱好", "时间", "是否上架", "图片", "所属公司"};
HSSFRow row = sheet.createRow(0);
for (int i = 0; i < tital.length; i++) {
row.createCell(i).setCellValue(tital[i]);
}
// 查询数据库
List<Actor> list = actorService.fan3();
for (int i = 0; i < list.size(); i++) {
row = sheet.createRow(i + 1);
row.createCell(0).setCellValue(list.get(i).getName());
row.createCell(1).setCellValue(list.get(i).getFilmLength());
row.createCell(2).setCellValue(list.get(i).getSpec());
row.createCell(3).setCellValue(new SimpleDateFormat("yyyy-MM-dd").format(list.get(i).getBir()));
row.createCell(4).setCellValue(list.get(i).getState()==1?"是":"否");
row.createCell(5).setCellValue(list.get(i).getImg());
row.createCell(6).setCellValue(list.get(i).getCname());
}
//7.把工作簿对象返回给前端浏览
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("艺人列表.xls", "UTF-8"));
response.setHeader("Connection", "close");
response.setHeader("Content-Type", "application/octet-stream");
workbook.write(response.getOutputStream());
workbook.close();
}
MQ的配置:
导入两个xml文件:注意在web.xml一定要修改*.否则报错
<param-value>classpath:applicationContext*.xml</param-value>
Controller:
@Autowired
private JmsTemplate jmsTemplate;
@Autowired
private Destination destination;
jmsTemplate.send(destination, new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
String json = JSONObject.toJSONString(actore);
TextMessage textMessage = session.createTextMessage();
return textMessage;
}
});
异常总结:
package com.xiaoshu.listener;
import com.alibaba.fastjson.JSONObject;
import com.xiaoshu.entity.Actor;
import com.xiaoshu.entity.Actore;
import org.springframework.beans.factory.annotation.Autowired;
import redis.clients.jedis.JedisPool;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
public class MQMessageListener implements MessageListener {
@Autowired
private JedisPool jedisPool;
@Override
public void onMessage(Message message) {
TextMessage textMessage=(TextMessage) message;
String json = null;
try {
json = textMessage.getText();
} catch (JMSException e) {
e.printStackTrace();
}
Actore actor = JSONObject.parseObject(json, Actore.class);
jedisPool.getResource().set(actor.getId()+"",json);
}
}
前端代码:
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<title>用户主页</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<%@ include file="/WEB-INF/common.jsp" %>
<link
href="${path }/resources/css/plugins/bootstrap-table/bootstrap-table.min.css"
rel="stylesheet">
<link href="${path }/resources/css/animate.css" rel="stylesheet">
<link href="${path }/resources/css/style.css?v=4.1.0" rel="stylesheet">
</head>
<body class="gray-bg">
<div class="panel-body">
<div id="toolbar" class="btn-group">
<c:forEach items="${operationList}" var="oper">
<privilege:operation operationId="${oper.operationid }" id="${oper.operationcode }"
name="${oper.operationname }" clazz="${oper.iconcls }"
color="#093F4D"></privilege:operation>
</c:forEach>
</div>
<div class="row">
<div class="col-lg-2">
<div class="input-group">
<span class="input-group-addon">用戶名 </span>
<input type="text" name="actorname" class="form-control" id="txt_search_actorname">
</div>
</div>
<div class="col-lg-2">
<div class="input-group">
<span class="input-group-addon">角色</span>
<select class="form-control" name="txt_search_roleid" id="txt_search_roleid">
<option value="">---请选择---</option>
<c:forEach items="${roleList }" var="r">
<option value="${r.cid }">${r.name}</option>
</c:forEach>
</select>
</div>
</div>
<div class="form-horizontal m-t">
<div class="form-group col-lg-7">
<label class="col-sm-2 control-label">操作时间</label>
<div class="col-sm-8">
<input placeholder="开始时间" id="txt_search_start" name="start"
class="laydate-icon form-control layer-date"/>
<input placeholder="结束时间" id="txt_search_end" name="end"
class="laydate-icon form-control layer-date"/>
</div>
</div>
</div>
<button id="btn_search" type="button" class="btn btn-default">
<span class="glyphicon glyphicon-search" aria-hidden="true"></span>查询
</button>
</div>
<table id="table_actor"></table>
</div>
<!-- 新增和修改对话框 -->
<div class="modal fade" id="modal_actor_edit" role="dialog" aria-labelledby="modal_actor_edit" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-body">
<form id="form_actor" method="post" action="reserveActor.htm" enctype="multipart/form-data">
<input type="hidden" name="id" id="hidden_txt_actorid" value=""/>
<table style="border-collapse:separate; border-spacing:0px 10px;">
<tr>
<td>姓名:</td>
<td><input type="text" id="name" name="name"
class="form-control" aria-required="true" required/></td>
</tr>
<tr>
<td>个数:</td>
<td><input type="text" id="filmLength" name="filmLength"
class="form-control" aria-required="true" required/></td>
</tr>
<tr>
<td>爱好:</td>
<td>
<input type="checkbox" name="spec" value="学习">学习
<input type="checkbox" name="spec" value="看书">看书
<input type="checkbox" name="spec" value="看电视">看电视
</td>
</tr>
<tr>
<td>时间:</td>
<td>
<input placeholder="开始时间" id="bir" name="bir"
class="laydate-icon form-control layer-date"/>
</td>
</tr>
<tr>
<td>状态:</td>
<td>
<input type="radio" name="state" value="0">否
<input type="radio" name="state" value="1">是
</td>
</tr>
<tr>
<td>照片 :</td>
<td>
<input type="file" name="poto">
<img src="" alt="" width="50px" id="img">
</td>
</tr>
<tr>
<td>所属部门:</td>
<td colspan="4">
<select class="form-control" name="cid" id="cid" aria-required="true" required>
<option value="">---请选择---</option>
<c:forEach items="${roleList }" var="r">
<option value="${r.cid }">${r.name }</option>
</c:forEach>
</select>
</td>
</tr>
</table>
<div class="modal-footer">
<button type="button" class="btn btn-primary" id="submit_form_actor_btn">保存</button>
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
</div>
</form>
</div>
</div>
</div>
</div>
<%--导入--%>
<div class="modal fade" id="modal_actor_import" role="dialog" aria-labelledby="modal_actor_import" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-body">
<form id="form_import" method="post" action="import1.htm" enctype="multipart/form-data">
<input type="file" name="impfile"/>
<div class="modal-footer">
<button type="submit" class="btn btn-primary">保存</button>
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
</div>
</form>
</div>
</div>
</div>
</div>
<%--柱状图--%>
<div class="modal fade" id="modal_actor_zzt" role="dialog" aria-labelledby="modal_actor_zzt" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-body">
<!-- 为 ECharts 准备一个定义了宽高的 DOM -->
<div id="main" style="width: 600px;height:400px;"></div>
</div>
</div>
</div>
</div>
<!--删除对话框 -->
<div class="modal fade" id="modal_actor_del" role="dialog" aria-labelledby="modal_actor_del" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title" id="modal_actor_del_head"> 刪除 </h4>
</div>
<div class="modal-body">
删除所选记录?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger" id="del_actor_btn">刪除</button>
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
</div>
</div>
</div>
</div>
<div class="ui-jqdialog modal-content" id="alertmod_table_actor_mod"
dir="ltr" role="dialog"
aria-labelledby="alerthd_table_actor" aria-hidden="true"
style="width: 200px; height: auto; z-index: 2222; overflow: hidden;top: 274px; left: 534px; display: none;position: absolute;">
<div class="ui-jqdialog-titlebar modal-header" id="alerthd_table_actor"
style="cursor: move;">
<span class="ui-jqdialog-title" style="float: left;">注意</span> <a id="alertmod_table_actor_mod_a"
class="ui-jqdialog-titlebar-close"
style="right: 0.3em;"> <span
class="glyphicon glyphicon-remove-circle"></span></a>
</div>
<div class="ui-jqdialog-content modal-body" id="alertcnt_table_actor">
<div id="select_message"></div>
<span tabindex="0"> <span tabindex="-1" id="jqg_alrt"></span></span>
</div>
<div
class="jqResize ui-resizable-handle ui-resizable-se glyphicon glyphicon-import"></div>
</div>
<!-- Peity-->
<script src="${path }/resources/js/plugins/peity/jquery.peity.min.js"></script>
<!-- Bootstrap table-->
<script src="${path }/resources/js/plugins/bootstrap-table/bootstrap-table.min.js"></script>
<script src="${path }/resources/js/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
<!-- 自定义js-->
<script src="${path }/resources/js/content.js?v=1.0.0"></script>
<script src="${path }/resources/js/echarts.js"></script>
<!-- jQuery Validation plugin javascript-->
<script src="${path }/resources/js/plugins/validate/jquery.validate.min.js"></script>
<script src="${path }/resources/js/plugins/validate/messages_zh.min.js"></script>
<!-- jQuery form -->
<script src="${path }/resources/js/jquery.form.min.js"></script>
<!-- layerDate plugin javascript -->
<script src="${path }/resources/js/plugins/layer/laydate/laydate.js"></script>
<script type="text/javascript">
Date.prototype.Format = function (fmt) {
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"H+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
};
//外部js调用
laydate({
elem: '#bir', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
event: 'focus', //响应事件。如果没有传入event,则按照默认的click
format: 'YYYY-MM-DD'// 日期格式
});
//外部js调用
laydate({
elem: '#txt_search_start', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
event: 'focus', //响应事件。如果没有传入event,则按照默认的click
format: 'YYYY-MM-DD'// 日期格式
});
laydate({
elem: '#txt_search_end',
event: 'focus',
format: 'YYYY-MM-DD'
});
$(function () {
init();
$("#btn_search").bind("click", function () {
//先销毁表格
$('#table_actor').bootstrapTable('destroy');
init();
});
var validator = $("#form_actor").validate({
submitHandler: function (form) {
$(form).ajaxSubmit({
dataType: "json",
success: function (data) {
if (data.success && !data.errorMsg) {
validator.resetForm();
$('#modal_actor_edit').modal('hide');
$("#btn_search").click();
} else {
$("#select_message").text(data.errorMsg);
$("#alertmod_table_actor_mod").show();
}
}
});
}
});
var validator = $("#form_import").validate({
submitHandler: function (form) {
$(form).ajaxSubmit({
dataType: "json",
success: function (data) {
if (data.success && !data.errorMsg) {
validator.resetForm();
$('#modal_actor_import').modal('hide');
$("#btn_search").click();
} else {
$("#select_message").text(data.errorMsg);
$("#alertmod_table_actor_mod").show();
}
}
});
}
});
$("#submit_form_actor_btn").click(function () {
$("#form_actor").submit();
});
});
var init = function () {
//1.初始化Table
var oTable = new TableInit();
oTable.Init();
//2.初始化Button的点击事件
var oButtonInit = new ButtonInit();
oButtonInit.Init();
};
var TableInit = function () {
var oTableInit = new Object();
//初始化Table
oTableInit.Init = function () {
$('#table_actor').bootstrapTable({
url: 'actorList.htm', //请求后台的URL(*)
method: 'post', //请求方式(*)
contentType: "application/x-www-form-urlencoded",
toolbar: '#toolbar', //工具按钮用哪个容器
striped: true, //是否显示行间隔色
cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
pagination: true, //是否显示分页(*)
sortable: true, //是否启用排序
sortName: "id",
sortOrder: "asc", //排序方式
queryParams: oTableInit.queryParams,//传递参数(*)
sidePagination: "server", //分页方式:client客户端分页,server服务端分页(*)
pageNumber: 1, //初始化加载第一页,默认第一页
pageSize: 10, //每页的记录行数(*)
pageList: [10, 25, 50, 75, 100], //可供选择的每页的行数(*)
search: false, //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大
strictSearch: true,
showColumns: true, //是否显示所有的列
showRefresh: false, //是否显示刷新按钮
minimumCountColumns: 2, //最少允许的列数
clickToSelect: true, //是否启用点击选中行
// height: 500, //行高,如果没有设置height属性,表格自动根据记录条数觉得表格高度
uniqueId: "actorid", //每一行的唯一标识,一般为主键列
showToggle: true, //是否显示详细视图和列表视图的切换按钮
cardView: false, //是否显示详细视图
detailView: false, //是否显示父子表
columns: [{
checkbox: true
},
{
field: 'id',
title: '编号',
sortable: true
},
{
field: 'name',
title: '姓名',
sortable: true
}, {
field: 'filmLength',
title: '个数',
sortable: true
}, {
field: 'spec',
title: '爱好',
sortable: true
}, {
field: 'bir',
title: '时间',
sortable: true,
formatter: function (value, row, index) {
return new Date(value).Format('yyyy-MM-dd');
}
}, {
field: 'state',
title: '是否上架',
sortable: true,
formatter: function (value, row, index) {
return value == 0 ? "否" : "是";
}
}, {
field: 'img',
title: '图片',
sortable: true,
formatter: function (value, row, index) {
return "<img src='/resources/img/" + value + "' width='50px'>";
}
}, {
field: 'cname',
title: '所属公司',
sortable: true
}],
onClickRow: function (row) {
$("#alertmod_table_actor_mod").hide();
}
});
};
//得到查询的参数
oTableInit.queryParams = function (params) {
var temp = {//这里的键的名字和控制器的变量名必须一致,这边改动,控制器也需要改成一样的
limit: params.limit, //页面大小
offset: params.offset, //页码
name: $("#txt_search_actorname").val(),
cid: $("#txt_search_roleid").val(),
start: $("#txt_search_start").val(),
end: $("#txt_search_end").val(),
actortype: $("#txt_search_actortype").val(),
search: params.search,
order: params.order,
ordername: params.sort
};
return temp;
};
return oTableInit;
};
var ButtonInit = function () {
var oInit = new Object();
var postdata = {};
oInit.Init = function () {
//初始化页面上面的按钮事件
$("#btn_add").click(function () {
$('#password').attr("readOnly", false).val(getSelection.password);
$("#form_actor").resetForm();
document.getElementById("hidden_txt_actorid").value = '';
$('#modal_actor_edit').modal({backdrop: 'static', keyboard: false});
$('#modal_actor_edit').modal('show');
});
$("#btn_edit").click(function () {
var getSelections = $('#table_actor').bootstrapTable('getSelections');
if (getSelections && getSelections.length == 1) {
initEditActor(getSelections[0]);
$('#modal_actor_edit').modal({backdrop: 'static', keyboard: false});
$('#modal_actor_edit').modal('show');
} else {
$("#select_message").text("请选择其中一条数据");
$("#alertmod_table_actor_mod").show();
}
});
//柱状图
$("#btn_zzt").click(function () {
$.ajax({
url: "findCount.htm",
dataType: "json",
type: "post",
success: function (res) {
var xdate = new Array();
var ydate = new Array();
for (var i = 0; i < res.length; i++) {
xdate.push(res[i].cname == 1 ? "是" : "否");
ydate.push(res[i].num)
}
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('main'));
// 指定图表的配置项和数据
var option = {
title: {
text: '每个公司人数'
},
tooltip: {},
legend: {
data: ['人数']
},
xAxis: {
data: xdate
},
yAxis: {},
series: [
{
name: '人数',
type: 'bar',
data: ydate
}
]
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
$('#modal_actor_zzt').modal('show');
}
});
});
// 饼图;
$("#btn_bt").click(function () {
$.ajax({
url: "findCount.htm",
dataType: "json",
type: "post",
success: function (res) {
var xdate = new Array();
for (var i = 0; i < res.length; i++) {
xdate.push({value: res[i].num, name: res[i].pname})
}
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('main1'));
// 指定图表的配置项和数据
option = {
title: {
text: '每个公司人数',
subtext: '数据来源网络',
left: 'center'
},
tooltip: {
trigger: 'item'
},
legend: {
orient: 'vertical',
left: 'left',
},
series: [
{
name: '访问来源',
type: 'pie',
radius: '50%',
data: xdate,
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
$('#modal_tbbook_bt').modal('show');
}
});
});
$("#btn_delete").click(function () {
var getSelections = $('#table_actor').bootstrapTable('getSelections');
if (getSelections && getSelections.length > 0) {
$('#modal_actor_del').modal({backdrop: 'static', keyboard: false});
$("#modal_actor_del").show();
} else {
$("#select_message").text("请选择数据");
$("#alertmod_table_actor_mod").show();
}
});
$("#btn_export").click(function () {
location.href = "export1.htm";
});
//
$("#btn_import").click(function () {
$('#modal_actor_import').modal('show');
});
};
return oInit;
};
$("#alertmod_table_actor_mod_a").click(function () {
$("#alertmod_table_actor_mod").hide();
});
function initEditActor(getSelection) {
$('#hidden_txt_actorid').val(getSelection.id);
$('#cid').val(getSelection.cid);
$('#name').val(getSelection.name);
$('#filmLength').val(getSelection.filmLength);
$("input[name=state][type=radio][value=" + getSelection.state + "]").prop("checked", true);
$('#bir').val(new Date(getSelection.bir).Format('yyyy-MM-dd'));
$("#img").prop("src", "/resources/img/" + getSelection.img);
var arr = getSelection.spec.split(",")
$("input[name=spec]").prop("checked", false);
for (var i = 0; i < arr.length; i++) {
$("input[name=spec][type=checkbox][value=" + arr[i] + "]").prop("checked", true);
}
}
$("#del_actor_btn").click(function () {
var getSelections = $('#table_actor').bootstrapTable('getSelections');
var idArr = new Array();
var ids;
getSelections.forEach(function (item) {
idArr.push(item.id);
});
ids = idArr.join(",");
$.ajax({
url: "deleteActor.htm",
dataType: "json",
data: {"ids": ids},
type: "post",
success: function (res) {
if (res.success) {
$('#modal_actor_del').modal('hide');
$("#btn_search").click();
} else {
$("#select_message").text(res.errorMsg);
$("#alertmod_table_actor_mod").show();
}
}
});
});
</script>
</body>
</html>
后台所有代码:
package com.xiaoshu.controller;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import com.xiaoshu.config.util.ConfigUtil;
import com.xiaoshu.dao.CompleeMapper;
import com.xiaoshu.entity.Complee;
import com.xiaoshu.entity.Operation;
import com.xiaoshu.entity.Role;
import com.xiaoshu.entity.Actor;
import com.xiaoshu.service.OperationService;
import com.xiaoshu.service.RoleService;
import com.xiaoshu.service.ActorService;
import com.xiaoshu.util.StringUtil;
import com.xiaoshu.util.WriterUtil;
import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;
import redis.clients.jedis.JedisPool;
import javax.jms.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.List;
@Controller
@RequestMapping("actor")
public class ActorController extends LogController {
static Logger logger = Logger.getLogger(ActorController.class);
@Autowired
private ActorService actorService;
@Autowired
private RoleService roleService;
@Autowired
private OperationService operationService;
@Autowired
private CompleeMapper compleeMapper;
@Autowired
private JedisPool jedisPool;
@Autowired
private JmsTemplate jmsTemplate;
@Autowired
private Destination destination;
@RequestMapping("actorIndex")
public String index(HttpServletRequest request, Integer menuid) throws Exception {
// List<Role> roleList = roleService.findRole(new Role());
List<Complee> roleList = compleeMapper.selectAll();
List<Operation> operationList = operationService.findOperationIdsByMenuid(menuid);
request.setAttribute("operationList", operationList);
request.setAttribute("roleList", roleList);
return "actor";
}
@RequestMapping(value = "actorList", method = RequestMethod.POST)
public void actorList(Actor actor, HttpServletRequest request, HttpServletResponse response, String offset, String limit) throws Exception {
try {
String order = request.getParameter("order");
String ordername = request.getParameter("ordername");
Integer pageSize = StringUtil.isEmpty(limit) ? ConfigUtil.getPageSize() : Integer.parseInt(limit);
Integer pageNum = (Integer.parseInt(offset) / pageSize) + 1;
PageInfo<Actor> actorList = actorService.findActorPage(actor, pageNum, pageSize, ordername, order);
JSONObject jsonObj = new JSONObject();
jsonObj.put("total", actorList.getTotal());
jsonObj.put("rows", actorList.getList());
WriterUtil.write(response, jsonObj.toString());
} catch (Exception e) {
e.printStackTrace();
logger.error("用户展示错误", e);
throw e;
}
}
// 新增或修改
@RequestMapping("reserveActor")
public void reserveActor(MultipartFile poto, HttpServletRequest request, final Actor actor, HttpServletResponse response) {
Integer actorId = actor.getId();
JSONObject result = new JSONObject();
try {
if (poto.getSize() > 0) {
String fname = poto.getOriginalFilename();
String realPath = request.getSession().getServletContext().getRealPath("/resources/img");
poto.transferTo(new File(realPath, fname));
actor.setImg(fname);
}
if (actorId != null) { // actorId不为空 说明是修改
Actor actorName = actorService.existActorWithActorName(actor.getName());
if (actorName == null || actorName.getId().compareTo(actorId) == 0) {
actor.setId(actorId);
String json = JSONObject.toJSONString(actor);
jedisPool.getResource().set(actor.getId() + "", json);
actorService.updateActor(actor);
result.put("success", true);
} else {
result.put("success", true);
result.put("errorMsg", "该用户名被使用");
}
} else { // 添加
if (actorService.existActorWithActorName(actor.getName()) == null) { // 没有重复可以添加
actorService.addActor(actor);
String json = JSONObject.toJSONString(actor);
jedisPool.getResource().set(actor.getId() + "", json);
jmsTemplate.send(destination, new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
String json = JSONObject.toJSONString(actor);
TextMessage textMessage = session.createTextMessage();
return textMessage;
}
});
result.put("success", true);
} else {
result.put("success", true);
result.put("errorMsg", "该用户名被使用");
}
}
} catch (Exception e) {
e.printStackTrace();
logger.error("保存用户信息错误", e);
result.put("success", true);
result.put("errorMsg", "对不起,操作失败");
}
WriterUtil.write(response, result.toString());
}
@RequestMapping("/import1")
public void import1(MultipartFile impfile, HttpServletResponse response) throws Exception {
// 创建空的工作薄
HSSFWorkbook workbook = new HSSFWorkbook(impfile.getInputStream());
// 获取表
HSSFSheet sheetAt = workbook.getSheetAt(0);
// 获取最后一个交表
int lastRowNum = sheetAt.getLastRowNum();
for (int i = 1; i <= lastRowNum; i++) {
HSSFRow row = sheetAt.getRow(i);
String name = row.getCell(0).getStringCellValue();
int filmLength = (int) row.getCell(1).getNumericCellValue();
String spec = row.getCell(2).getStringCellValue();
String bir = row.getCell(3).getStringCellValue();
String state = row.getCell(4).getStringCellValue();
String img = row.getCell(5).getStringCellValue();
String cname = row.getCell(6).getStringCellValue();
int cid;
Complee b = new Complee();
b.setName(cname);
// 查询数据库
List<Complee> list = compleeMapper.select(b);
if (list == null || list.size() == 0) {
compleeMapper.insertSelective(b);
cid = b.getCid();
} else {
cid = list.get(0).getCid();
}
//创建对象,存进去
Actor a = new Actor();
a.setName(name);
a.setImg(img);
a.setFilmLength(filmLength);
a.setBir(new SimpleDateFormat("yyyy-MM-dd").parse(bir));
a.setCid(cid);
a.setSpec(spec);
a.setState(Integer.parseInt(state.equals("是") ? "1" : "0"));
actorService.addActor(a);
}
//8.给前端返回结果
JSONObject result = new JSONObject();
result.put("success", true);
WriterUtil.write(response, result.toString());
}
@RequestMapping("/export1")
public void export1(HttpServletResponse response) throws Exception {
//创建空的工作薄
HSSFWorkbook workbook = new HSSFWorkbook();
// 创建空的表
HSSFSheet sheet = workbook.createSheet();
//创建一个数组
String[] tital = {"姓名", "个数", "爱好", "时间", "是否上架", "图片", "所属公司"};
HSSFRow row = sheet.createRow(0);
for (int i = 0; i < tital.length; i++) {
row.createCell(i).setCellValue(tital[i]);
}
// 查询数据库
List<Actor> list = actorService.fan3();
for (int i = 0; i < list.size(); i++) {
row = sheet.createRow(i + 1);
row.createCell(0).setCellValue(list.get(i).getName());
row.createCell(1).setCellValue(list.get(i).getFilmLength());
row.createCell(2).setCellValue(list.get(i).getSpec());
row.createCell(3).setCellValue(new SimpleDateFormat("yyyy-MM-dd").format(list.get(i).getBir()));
row.createCell(4).setCellValue(list.get(i).getState()==1?"是":"否");
row.createCell(5).setCellValue(list.get(i).getImg());
row.createCell(6).setCellValue(list.get(i).getCname());
}
//7.把工作簿对象返回给前端浏览
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("艺人列表.xls", "UTF-8"));
response.setHeader("Connection", "close");
response.setHeader("Content-Type", "application/octet-stream");
workbook.write(response.getOutputStream());
workbook.close();
}
@RequestMapping("findCount")
public void findCount(HttpServletResponse response) {
List<Actor> list = actorService.asda();
String result = JSONObject.toJSONString(list);
WriterUtil.write(response, result.toString());
}
@RequestMapping("deleteActor")
public void delActor(HttpServletRequest request, HttpServletResponse response) {
JSONObject result = new JSONObject();
try {
String[] ids = request.getParameter("ids").split(",");
for (String id : ids) {
actorService.deleteActor(Integer.parseInt(id));
}
result.put("success", true);
result.put("delNums", ids.length);
} catch (Exception e) {
e.printStackTrace();
logger.error("删除用户信息错误", e);
result.put("errorMsg", "对不起,删除失败");
}
WriterUtil.write(response, result.toString());
}
}
异常总结:
Mapper里面的代码:
<?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="com.xiaoshu.dao.ActoreMapper">
<!--全文搜索,开始时间以及结束时间,部门下拉框-->
<select id="famlisy" resultType="Actore" parameterType="Actore">
select a.*,c.name cname from actore a ,complees c where a.cid=c.cid
<if test="name!=null and name.trim()!=''">
and (
a.name like '%${name}%' or c.name like '%${name}%' or spec like '%${name}%'
)
</if>
<if test="start!=null">
and bir >=#{start}
</if>
<if test="end!=null">
and bir <=#{end}
</if>
<if test="cid!=null and cid!=0">
and a.cid;=#{cid}
</if>
<if test="filmLength!=null and filmLength==1">
and a.film_length <=30
</if>
<if test="filmLength!=null and filmLength==2">
and a.film_length between 31 and 90
</if>
<if test="filmLength!=null and filmLength==3">
and a.film_length >=91
</if>
</select>
<!--统计部门的个数-->
<select id="famlisy2" resultType="Actore">
select c.name cname, count(a.id) num from actore a ,complees c where a.cid=c.cid GROUP BY c.cid
</select>
<!--统计是否上架的个数-->
<select id="famlisy3" resultType="Actore">
select state cname, count(state) num from actore a ,complees c where a.cid=c.cid GROUP BY state
</select>
</mapper>
异常总结:
展示效果:
修改的回显:
导出:
柱状图:
饼图