SSM框架之批量增加示例(同步请求jsp视图解析)
准备环境:SSM框架+JDK8/JDK7+MySQL5.7+MAVEN3以上+Tomcat8/7应用服务器
示例说明:
分发给用户优惠券,通过checkbox选中批量分发,对应也就是批量增加。
对于公司使用freemarket或者jsp或者volocity,有一定的启示意思。
不论视图用的是jsp或者非jsp,都可以参考这个示例。
下面采用的是MVC模式。
简单说下MVC模式吧
MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。
- Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。
- View(视图) - 视图代表模型包含的数据的可视化。
- Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。
下面的示例足以验证MVC,可供参考:
jsp代码如下所示:
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>发放优惠券</title> <link href="${APP_PATH}/css/main.css" type="text/css" rel="stylesheet"> <link rel="stylesheet" href="${APP_PATH}/layui/css/layui.css" media="all"> <script src="${APP_PATH}/js/easyui/jquery-1.8.0.min.js"type="text/javascript"></script></head> <body><div class="layui-container"><div class="layui-row"><h2>发放优惠券</h2><script>function checkAll() { var all=document.getElementById('all');//获取到点击全选的那个复选框的id var one=document.getElementsByName('memberId');//获取到复选框的名称 if(all.checked==true){//因为获得的是数组,所以要循环 为每一个checked赋值 for(var i=0;i<one.length;i++){ one[i].checked=true; } }else{ for(var j=0;j<one.length;j++){ one[j].checked=false; } } } $(function(){$("#tishi").click(function(){alert("分发成功");});});</script><div style="margin: 20px 0;"></div><div class="easyui-layout" style="width: 700px; height: 350px;"><divdata-options="region:'center',title:'Main Title',iconCls:'icon-ok'"><form action="${pageContext.request.contextPath}/json" method="post"id="checkform"><table class="easyui-datagrid"data-options="url:'datagrid_data1.json',method:'get',border:false,singleSelect:true,fit:true,fitColumns:true"><thead><tr><th data-options="field:'itemid'" width="80">昵称</th><th data-options="field:'productid'" width="100">手机号</th><th data-options="field:'listprice',align:'right'" width="80">操作</th></tr></thead><c:if test="${list!=null}"><c:forEach items="${list}" var="app"><tr><td>${app.nickName}</td><td>${app.account}</td><td><input type="checkbox" name="memberId"value="${app.memberId}" /></td></tr></c:forEach></c:if></table><input type="hidden" name="hotelNo" id="hotelNo" value="${hotelNo}"/><input type="hidden" name="couponId" id="couponId_to" readonly="readonly" value="${couponId }" /> <input id="all"onclick="checkAll()" type="checkbox" />全选 <br /> <inputtype="submit" id="tishi" onclick="checkAll()" value="提交" /></form></div></div></div></div><!-- js --><script src="${APP_PATH}/layui/layui.js" charset="utf-8"></script> <script src="${APP_PATH}/js/layer/layer-v3.1.1/layer/mobile/layer.js"type="text/javascript"></script></body> </html>
Controller代码:
/*** 优惠券批量分发给用户* @param qv* @return*/@RequestMapping(value = "json", method = {RequestMethod.POST })public Object save(QueryVo qv,HttpServletRequest request,Model model){String hotelNo = request.getParameter("hotelNo");Hotel hotel = hotelService.queryHotelNoInfo(hotelNo);logger.info("优惠券Id:"+qv.getCouponId());logger.info("所有数组:"+qv.getMemberId());//判断是否为空if (qv.getMemberId()!=null){ int size=java.lang.reflect.Array.getLength(qv.getMemberId()); //获取传过来的数组长度 System.out.println(size);String memberId[]=qv.getMemberId();//获取数组中的值 String couponId=qv.getCouponId();//获取优惠券IDfor (int i = 0; i < memberId.length; i++) {AccountCoupon ac = new AccountCoupon();ac.setMemberId(memberId[i]);ac.setCouponId(couponId);ac.setFrom(null);SimpleDateFormat sdf = new SimpleDateFormat("yy-MM-dd HH:mm:ss");String date = sdf.format(new Date());ac.setReceiveDate(date);ac.setStatus(new Consts().COUPON_UNUSED);//默认状态 "待使用"ac.setUsedDate(null);List<AccountCoupon> list = new ArrayList<AccountCoupon>();list.add(ac);//添加到集合中logger.info("批量分发优惠券成功");accountCouponService.insertAccountCouponInfo(list);//批量插入数据 }} model.addAttribute("hotel", hotel);return "/Set/transit4";}
对应的DAO和Service及其实现类和xml如下:
DAO和Service代码相同不变
//批量插入数据public void insertAccountCouponInfo(@Param("acs")List<AccountCoupon> acs);
Service实现类如下:
@Overridepublic void insertAccountCouponInfo(List<AccountCoupon> acs) {accountCouponMapper.insertAccountCouponInfo(acs);}
xml:
<!-- 批量發放优惠券 --><insert id="insertAccountCouponInfo">INSERT INTO `account_coupon` (`member_id`, `coupon_id`, `status`, `receive_date`, `from`, `used_date`)VALUES<foreach collection="acs" item="ac" index="index" separator=",">(#{ac.memberId,jdbcType=VARCHAR}, #{ac.couponId,jdbcType=VARCHAR}, #{ac.status,jdbcType=VARCHAR}, #{ac.receiveDate,jdbcType=VARCHAR}, #{ac.from,jdbcType=VARCHAR} , #{ac.usedDate})</foreach></insert>
对应的实体如下:
public class AccountCoupon {/** 自增主键*/private String id;/** 用户id*/private String memberId;/** 优惠券id*/private String couponId;/** 状态 未领取0 待使用1 已使用2 已过期3 冻结4 已核销5*/private String status;/** 领取优惠券日期*/private String receiveDate;/** 优惠券来源发放或主动领取*/private String from;/** 使用日期*/private String usedDate;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getMemberId() {return memberId;}public void setMemberId(String memberId) {this.memberId = memberId;}public String getCouponId() {return couponId;}public void setCouponId(String couponId) {this.couponId = couponId;}public String getStatus() {return status;}public void setStatus(String status) {this.status = status;}public String getReceiveDate() {return receiveDate;}public void setReceiveDate(String receiveDate) {this.receiveDate = receiveDate;}public String getFrom() {return from;}public void setFrom(String from) {this.from = from;}public String getUsedDate() {return usedDate;}public void setUsedDate(String usedDate) {this.usedDate = usedDate;}}
相关文章:

四大指标超现有模型!少样本的无监督图像翻译效果逆天| 技术头条
作者 | Ming-yu Liu, Xun Huang, Arun Mallya, Tero Karras, Timo Aila, Jaakko Lehtinen译者 | linstancy编辑 | Rachel出品 | AI 科技大本营(ID:rgznai100)【导读】在已有的图像翻译研究中,模型需要使用大量的多类别图像数据,在…

【摄像头】镜头焦距
【摄像头】低照度和光圈 1、简介 在镜头上有两个非常重要的参数,一个是光圈、一个是焦距。 如果在镜头上只标注有一个数字的就是定焦头,比如:50mm,就表示这是一只焦距为50mm的定焦头。 如果在镜头上标注有两个数字的就是变焦头,比如:18-55mm,就表示这只镜头焦距覆盖…

(转)C语言字节对齐
图片可以在下面的博客中看到. 转自:http://blog.csdn.net/bigloomy/article/details/6633008 可能有不少读者会问,字节对齐有必要拿出来单独写一篇博客嘛?我觉得是很有必要,但是它却是被很多人所忽视的一个重点。那么我们使用字节对齐的作用…

赌5毛钱,你解不出这道Google面试题
作者 | Kevin Ghadyani 译者 | 清儿爸 编辑 | Rachel 出品 | AI科技大本营(ID:rgznai100) 为了更了解其他人对软件工程的看法,我开始疯狂在 YouTube 上追 TechLead 的视频。在接下来的几天里,我为他在 Google 工作时…

【摄像头】摄像头IRCUT滤光片
1、IRCUT组成原理 IRCUT由两层滤光片组成,一片红外截止或吸收滤光片和一片全透光谱滤光片。 白天是红外截止滤光片工作,晚上是全透滤光片工作: 白天摄像头可以接收到人眼无法识别的红外线,会导致图像与肉眼所见有偏差,…

修改Java-source版本
2019独角兽企业重金招聘Python工程师标准>>> pom.xml添加以下:<plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin>&l…

HDU 2519 新生晚会【求组合数】
Problem Description开学了,杭电又迎来了好多新生。ACMer想为新生准备一个节目。来报名要表演节目的人很多,多达N个,但是只需要从这N个人中选M个就够了,一共有多少种选择方法?Input数据的第一行包括一个正整数T&#x…

【摄像头】宽动态范围
1、什么是动态范围 简单的来说,就是摄像机拍摄的同一个画面内,能正常显示细节的最亮和最暗物体的亮度值所包含的那个区间。动态范围越大,过亮或过暗的物体在同一个画面中都能正常显示的程度也就越大。 根据百度百科,当在强光源(日光、灯具或反光等)照射下的高亮度区域及…

mysql format函数对数字类型转化的坑
原值param 1234.5678 format(param, 2) (不建议) 结果,字符串类型,123,4.57 会导致你图表char 生成失败,直接变0 convert(param, decimal(12,2))(建议) 结果, 数值类型 1234.57 cast(p…

打造AI产教融合共赢生态,微软亚洲研究院扩大开放了这些资源
2019年5月10日,由教育部国际合作与交流司、科学技术司指导,教育部中外人文交流中心主办, 微软亚洲研究院承办,信息技术新工科产学研联盟特别协办的“中国高校人工智能人才国际培养计划”2019国际人工智能专家论坛暨2019微软新一代…

Microsoft.NET框架程序设计--20 CLR寄宿、应用程序域、反射
应用程序域是CLR提供的一种旨在减少内存使用、提高系统系能的新型机制。而反射使得我们可以很容易使用自己活着第三方的类型来增强应用程序的功能,从而帮助我们设计出可动态扩展的应用程序。 1.元数据:.NET框架的基石 元数据描述了一个类型的字段和方法。…

上手!深度学习最常见的26个模型练习项目汇总
作者:沧笙踏歌转载自AI部落联盟(id:AI_Tribe)今天更新关于常见深度学习模型适合练手的项目。这些项目大部分是我之前整理的,基本上都看过,大概俩特点:代码不长,一般50-200行代码&…

【EMC】电磁兼容性相关名词解释、基础知识
一、名词解释 1、EMC EMC(Electro Magnetic Compatibility)直译是“电磁兼容性”。意指设备所产生的电磁能量既不对其它设备产生干扰,也不受其他设备的电磁能量干扰的能力。 2、EMI——攻击力 EMI(Electro Magnetic Interference)直译为&…

定时任务 Cron表达式
Cron表达式是一个表示时间周期的字符串。 分为6或7个域,每一个域代表一个含义。 验证工具: http://cron.qqe2.com/Cron有如下两种语法格式: 格式1:秒分时天(月)月天(星期)年格式2&a…

C语言字符计算器
这又是以前的一篇文章,觉得有纪念价值。就发过来了。 去年暑假自己下了C语言实战105例,看了几个基础的,其中有一个是关于字符计算器的 我看起来蛮简单的,不过自己做起来我觉得还是做得少了,懵懵懂懂的。 现在想起那个觉…

一文看尽目标检测:从YOLO v1到v3的进化之路
本文转载自:http://www.mamicode.com/info-detail-2314392.html导语:如今基于深度学习的目标检测已经逐渐成为自动驾驶、视频监控、机械加工、智能机器人等领域的核心技术,而现存的大多数精度高的目标检测算法,速度较慢࿰…

【EMC】EMC屏蔽设计
1、屏蔽设计的基本原则: 蔽体结构简洁,尽可能减少不必要的孔洞,尽可能不要增加额外的缝隙;避免开细长孔,通风孔尽量采用圆孔并阵列排放。屏蔽和散热有矛盾时尽可能开小孔,多开孔,避免开大孔&am…

js控制表格隔行变色
只是加载时候隔行变一个颜色,鼠标滑动上去时候没有变化 <table width"800" border"0" cellpadding"0" cellspacing"0"> <tr><td>不变色</td></tr><tbody id"goaler"><tr…

jQuery实例——仿京东仿淘宝列表导航菜单
以前看着京东,淘宝的导航做的真好,真想哪一天自己也能做出来这么漂亮功能全的导航菜单。今天弄了一下午终于自制成功,主要使用jQuery和CSS,实现功能基本和京东一样。 功能介绍: 1、鼠标停留导航; 2、根据子…

【Ubuntu】使用过的ubuntu工具记录
1、UnixBench UnixBench性能测试,和windows的鲁大师差不多。 2、smartctl 测试磁盘性能 sudo apt install smartmontools 3、cpufrequtils cpu频率查看、设置工具集:cpufreq-inf、cpufreq-set sudo apt install cpufrequtils 4、stress cpu满负荷…

解救被困传销女演员 助人减肥找老婆 蚂蚁森林又现神功能
近日,一篇《女演员被传销组织拘禁30多天 竟因蚂蚁森林幸运逃离》的报道引发了全网热议。网友纷纷表示:蚂蚁森林功能强大,不仅能帮人减肥、找老婆,还能在关键时刻保命! 珍惜偷你能量的好友 因为关键时刻能保命 据北京晨…

“智能+”时代,看见别人看不见的才是赢家
当科技、商业和社会均发生天翻地覆的变革,我们可以确定的是,“智能”时代的浪潮已掀起波澜。这将是智慧无处不在的时代,曾经无法解决的问题,都将在科技的发展下找到答案;这也是技术普惠万物的时代,创新型应…

CSS a控制超链接文字样式
超链接的代码<a href"http://www.divcss5.com/" target"_blank" title"关于div css的网站">DIVCSS</a>解析如下:href 后跟被链接地址目标网站地址这里是http://www.divcss5.com/target _blank -- 在新窗口中打开链接 _pa…

3分钟快速实现:9种经典排序算法的可视化
作者 | 爱笑的眼睛 来源 | 恋习Python(ID:sldata2017)最近在某网站上看到一个视频,是关于排序算法的可视化的,看着挺有意思的,也特别喜感。▼6分钟演示15种排序算法不知道作者是怎么做的,但是突然很想自己…

【Qt】Qt再学习(一):Application Example
1、QCommandLineParser 命令行解析类 常用接口 QApplication app(argc, argv);QCommandLineParser parser;parser.setApplicationDescription(QCoreApplication::applicationName());parser.addHelpOption(

沃森世界研讨会前瞻:AI服务 了解客户情绪
科技讯10月19日消息,据国外媒体报道,“沃森世界”研讨会(World of Watson)将于10月24日至27日在拉斯维加斯曼德勒湾举办,与会者将能够了解沃森目前的进展,并深入了解将来沃森将从事的一些令人兴奋的事情。10月14日一整日的会谈中&…

《人月神话》——外科手术队伍——笔记!
本章讨论了一个问题“如何在有意义的时间进度内创建大型的系统?” 软件经理测试出来的数据显示“经验和实际的表现没有相互的联系”。 *需要协作沟通的人员的数量影响着开发成本,因为成本的主要组成部分是相互的沟通和交流,以及更正沟…

直接上手!不容错过的Visual Studio Code十大扩展组件
作者 | David Neal译者 | 谭开朗,责编 | 屠敏转载自CSDN(ID:CSDNnews)各大平台与各种语言的开发人员都在使用Visual Studio Code,我对此感到惊讶。Stack Overflow发布的2019年开发者调查结果显示,VS Code占…

【Qt】Qt再学习(二):Bars Example(Q3DBars)
1、简介 Bars example显示了如何使用Q3DBars制作3D条形图,以及如何结合使用小部件来调整几种可调节的质量。该示例显示了如何: 使用Q3DBars和一些小部件创建应用程序 使用QBar3DSeries和QBarDataProxy将数据设置为图形 使用控件调整一些图形和系列属性…

记录错误信息的行数
1.try catch 记录错误信息的时候,如果报错了,我们只能粗略估算是什么错误,但如果能够具体知道是哪行错误的话,对错误的分析就能够快速定位问题。 2.只需要记录到错误的行号,就能快速定位问题。 3.ex.stackTrace 就可以…