SSM框架之批量增加示例(同步请求jsp视图解析)

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 准备环境:SSM框架+JDK8/JDK7+MySQL5.7+MAVEN3以上+Tomcat8/7应用服务器示例说明:分发给用户优惠券,通过checkbox选中批量分发,对应也就是批量增加。对于公司使用freemarket或者jsp或者volocity,有一定的启示意思。

准备环境: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;">
            <div
                data-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 /> <input
                        type="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();//获取优惠券ID
           
           for (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实现类如下:

    @Override
    public 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;
    }
    
    

}

 

目录
相关文章
|
2月前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
40 3
|
2月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
113 3
|
3月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
439 37
|
21天前
|
存储 Java 开发者
Java中的集合框架深入解析
【10月更文挑战第32天】本文旨在为读者揭开Java集合框架的神秘面纱,通过深入浅出的方式介绍其内部结构与运作机制。我们将从集合框架的设计哲学出发,探讨其如何影响我们的编程实践,并配以代码示例,展示如何在真实场景中应用这些知识。无论你是Java新手还是资深开发者,这篇文章都将为你提供新的视角和实用技巧。
19 0
|
2月前
|
Web App开发 IDE 测试技术
自动化测试的利器:Selenium 框架深度解析
【10月更文挑战第2天】在软件开发的海洋中,自动化测试犹如一艘救生艇,让质量保证的过程更加高效与精准。本文将深入探索Selenium这一强大的自动化测试框架,从其架构到实际应用,带领读者领略自动化测试的魅力和力量。通过直观的示例和清晰的步骤,我们将一起学习如何利用Selenium来提升软件测试的效率和覆盖率。
|
2月前
|
人工智能 缓存 Java
深入解析Spring AI框架:在Java应用中实现智能化交互的关键
【10月更文挑战第12天】Spring AI 是 Spring 框架家族的新成员,旨在满足 Java 应用程序对人工智能集成的需求。它支持自然语言处理、图像识别等多种 AI 技术,并提供与云服务(如 OpenAI、Azure Cognitive Services)及本地模型的无缝集成。通过简单的配置和编码,开发者可轻松实现 AI 功能,同时应对模型切换、数据安全及性能优化等挑战。
124 3
|
2月前
|
分布式计算 Java 应用服务中间件
NettyIO框架的深度技术解析与实战
【10月更文挑战第13天】Netty是一个异步事件驱动的网络应用程序框架,由JBOSS提供,现已成为Github上的独立项目。
44 0
|
3月前
|
前端开发 JavaScript C#
移动应用开发中的跨平台框架解析
【9月更文挑战第5天】在移动应用开发领域,跨平台框架因其“一次编写,处处运行”的便利性而受到开发者的青睐。本文将深入探讨几种流行的跨平台框架,包括React Native、Flutter和Xamarin,并比较它们的优势与局限。我们将通过代码示例揭示这些框架如何简化移动应用的开发过程,同时保持高性能和良好的用户体验。无论你是新手还是有经验的开发者,这篇文章都将成为你了解和选择跨平台框架的宝贵资源。
69 19
|
2月前
|
JSON 应用服务中间件 API
使用 Gin 框架实现文件上传:机制与深入解析
使用 Gin 框架实现文件上传:机制与深入解析
|
2月前
|
存储 数据采集 监控
CDGA\如何建立实现数据治理的效率价值框架:实践案例解析
数据治理是一个持续优化的过程。组织应建立健全的监督与评估机制,定期对数据治理工作进行评估,发现问题及时整改。广东药科大学通过数据全景图和数据监控大屏,实现了对数据治理成果的动态、多维度呈现与监控,为科学管理决策提供了有力支撑。

推荐镜像

更多