MP实战系列(十三)之批量修改操作(前后台异步交互)

MyBatis的批量操作其实同MyBatis基本是一样的。并无多大区别,要说区别,除了封装的方法之外,主要就是注解方面的区别,比如@TableId、@TableField、@TableName等等区别。

示例描述:

本次描述的是批量相关的操作,主要是批量修改等操作。

项目讲解:如何批量修改开锁方式?

准备环境和IDE工具:MySQL5.7+Maven3以上+JDK8或者JDK7+SSM框架+tomcat8或者tomcat7应用服务器+Eclipse。

本文核心:主要是Controller代码和数据传输对象和js文件中的test2()方法内的ajax。

其他的只是附加的,便于博主我个人以后回顾比较个人代码风格是否有所进步。我的理想是写一手优雅的代码。

注意:特别是有经验的开发者们,本文核心代码可用供你们参考

一、准备实体


@TableName("`lock`")
public class LockEntity implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 
     */
    private Integer id;

    @TableId
    private String lock_no;

    @TableField("house_code")
    private String houseCode;
 
    @TableField("room_code")
    private String roomCode;
  
    @TableField("install_time")
    private String installTime;

    @TableField("lock_kind")
    private Integer lockKind;
 
    private Integer power;
   
    @TableField("power_update_time")
    private String powerUpdateTime;

    @TableField("comu_status")
    private String comuStatus;

    @TableField("comu_status_update_time")
    private String comuStatusUpdateTime;
 
    private String region;
   
    private String address;
   
    @TableField("guarantee_time_start")
    private String guaranteeTimeStart;
 
    @TableField("guarantee_time_end")
    private String guaranteeTimeEnd;

    private Integer doorsensor;
  
    private String description;
 
    @TableField("hardware_version")
    private String hardwareVersion;
    
  
    private Integer type;
    

    @TableField("verify_code")
    private String verifyCode;
    
   
    private String no;

    @TableField("housing_code")
    private String housingCode;
    
 
    @TableField("first_open_way")
    private String firstOpenWay;
    

    @TableField("laster_open_way")
    private String lasterOpenWay;
  
    @TableField(value="node_no",exist=false)
    private String nodeNo;
   
    @TableField(value="user_id")
    private String userId;
    

    private Integer status;
    
    
    @TableField(exist=false)
    private String name;

    
   set get方法省略.... 
  }

 

二、编写DAO

public interface LockDao extends BaseMapper<LockEntity> {
    /**
     * 批量更新门锁开锁方式
     * @param lock
     * @return
     */
    public void updateLockOpenLockWayInfo(@Param ("lock") List<LockEntity> lock);
    
    
}

 

xml代码:

    
    <!-- 批量更新门锁开锁方式 -->
    <update id="updateLockOpenLockWayInfo" parameterType="java.util.List">
        <foreach collection="lock" item="lock" index="index" separator=";">
        update `lock`
        <set>
           first_open_way=#{lock.firstOpenWay},
           laster_open_way=#{lock.lasterOpenWay}
        </set>
        where id=#{lock.id}
    </foreach>      
        
    </update>
    
   

 

三、编写Service代码

public interface LockService extends IService<LockEntity> {

    /**
     * 批量更新门锁开锁方式
     * @param lock
     * @return
     */
    public void updateLockOpenLockWayInfo(@Param ("lock") List<LockEntity> lock);



    
}

 

四、编写Service实现类

@Service("lockService")
public class LockServiceImpl extends ServiceImpl<LockDao, LockEntity> implements LockService {


    @Override
    public void updateLockOpenLockWayInfo(List<LockEntity> lock) {
        // TODO Auto-generated method stub
        lockDao.updateLockOpenLockWayInfo(lock);
    }


}

 

五、Controller代码

@RestController
@RequestMapping("/lock")
public class LockController {

    private static Logger logger = Logger.getLogger(LockController.class);

    @Autowired
    private LockService lockService;

    

    /**
     * 批量修改开锁方式
     * @param openLockWayQueryVoy
     * @return
     */
    @PostMapping(value="/updateLockOpenLockWayInfo",produces="application/json;charset=utf-8")
    public Object batchUpdateLockOpenLockWayInfo(@RequestBody OpenLockWayQueryVo openLockWayQueryVo) {

        
        Integer ids[]=openLockWayQueryVo.getIds();
        String items[]=openLockWayQueryVo.getItems();
        String items2[]=openLockWayQueryVo.getItems2();
        JSONObject json = new JSONObject();    
        
        try {
            String str="";
            for (int i = 0; i < items.length; i++) {
                if(items[i].equals("on")) {
                    items[i]="0";
                }else if(items[i].equals("0")) {
                    items[i]="1";
                }
                str+=items[i];
                logger.info("items[i]:"+str);
                
            }
            String str2="";
            for (int j = 0; j < items2.length; j++) {
                if(items2[j].equals("on")) {
                    items2[j]="0";
                }else if(items2[j].equals("0")) {
                    items2[j]="1";
                }
                str2+=items2[j];
                logger.info("items2[i]:"+str2);
                
            }
            
            String first=str+"00000";
            logger.info("first:"+first);
            
            String laster=str2+"00000";
            logger.info("laster:"+laster);
            
            for (int i = 0; i < ids.length; i++) {
                logger.info("ids[i]:"+ids[i]);
                LockEntity lockEntity = new LockEntity();
                lockEntity.setId(ids[i]);
                lockEntity.setFirstOpenWay(first.substring(0,8));
                lockEntity.setLasterOpenWay(laster.substring(0,8));
                List<LockEntity> list = new ArrayList<LockEntity>();
                list.add(lockEntity);
                
                //批量修改方法调用
                lockService.updateLockOpenLockWayInfo(list);
                
            }
            json.put("returnMsg", "批量修改成功");
            json.put("returnCode", "000000");
        } catch (Exception e) {
            e.printStackTrace();
            json.put("returnMsg", "批量修改失败");
            json.put("returnCode", "111111");
        }
        
    
        
        return json;
        

    }
}

 

六、编写数据传输对象

 

public class OpenLockWayQueryVo{

    
    Integer ids[];
 
    String items[];
    
    String items2[];
    
    set get方法此处省略....
    
}

 

七、前端HTML代码

<!DOCTYPE html>
<html lang="zh-cmn-Hans">
<head>
<!--     <script src="../js/tologin.js"></script> -->
    <meta charset="UTF-8">
    <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <meta name="renderer" content="webkit">
    <meta http-equiv="Cache-Control" content="no-siteapp" />
    <link type="image/x-icon" href="/../images/fav.ico?rel=1522142498852" rel="shortcut icon"/>
    <link rel="stylesheet" href="../fonticon/iconfont.css?rel=1522142498852" />
    <link rel="stylesheet" href="../css/normalize.min.css?rel=1522142498852"/>
    <link rel="stylesheet" href="../css/app.min.css?rel=1522142498852"/>
    <link rel="stylesheet" href="../css/lock-css.min.css?rel=1522142498852"/>
    <link rel="stylesheet" href="../css/node-css.min.css?rel=1522142498852"/>
    <link rel="stylesheet" href="../css/common.min.css?rel=1522142498852"/>
    <link rel="stylesheet" href="../js/limarquee/liMarquee.css"/>
    <link rel="stylesheet" href="../css/ammeter-css.min.css"/>
    <link rel="stylesheet" href="../layui/css/modules/layer/default/layer.css" media="all">
    
    
<title>批量修改开锁方式</title>
<style>
    #menu li[data-body='lockList'],#menu li[data-body='nodeList'],#menu li[data-body='index']{
        display: none;
    }
    .yw_list table th {
        font-size: 12px;
        background-color: #dcdcdc;
        height: 36px;
        line-height: 36px;
    }
    .yw_list table td {
        text-align: center;
        font-size: 12px;
        color: #1f2f3e;
        height: 38px;
        word-break: break-all;
        word-wrap: break-word;
        line-height: 20px;
        border:1px #ddd solid;
    }
    .yw_list table tr:nth-child(odd){background:#f3f3f3;}
    .yw_list table tr:nth-child(even){background:#fff;}
</style>
    <script src="../js/baiduTemplate.js"></script>
<body>

<div class="warper" data-body="userManage">

    <!--s: sidebar-->
<div class="sidebar" id="sidebar">
  <a href="javascript:;" id="showBar"><i class="iconfont icon-icon-test15"></i></a>
  <div class="user-pic">
    <div class="user-picn">
      <span id="applytop-div-wrap-user" class="applytop-div-wrap" style="background: url('../images/3-30.png') no-repeat center; -webkit-background-size: cover;-moz-background-size: cover;-ms-background-size: cover;background-size: cover;">
      </span>
      <span class="png6"></span>
    </div>
    <p id="sidebarName"></p>
  </div>
  <ul class="menu" id="menu">
    <!--<li data-body="home" style="display: none;"><a class="png6" href="home.html"><em class="iconfont icon-pingtai" style="position: relative;right: -4px;"></em><span>平台主页</span></a></li>-->
    <li data-body="lockList" style="display: block;"><a class="png6" href="lockList.html"><em class="iconfont icon-icon-test" style="position: relative;right: -4px;"></em><span>智能门锁</span></a></li>
    <li data-body="nodeList" style="display: block;"><a class="png6" href="nodeList.html"><em class="iconfont icon-icon-test2"></em><span>智能网关</span></a></li>
    <li data-body="ammeterList" style="display: none;"><a class="png6" href="ammeterList.html"><em class="iconfont icon-dianbiao1"  style="vertical-align:middle;font-size:25px"></em><span>智能电表</span></a></li>
    <li data-body="userManage" class="menu-f" style="display:none;"><a class="png6" href="userManageList.html"><em class="iconfont icon-guanli" style="font-size: 1.8em;position:relative;top:4px;"></em><span style="padding-left:5px;">审批管理</span></a></li>
    <li data-body="mySet"><a href="mySet.html"><em class="iconfont icon-icon-test1"></em><span>个人中心</span></a></li>
    <li data-body="index" class="menu-f" style="display: block;"><a class="png6" href="index.html"><em class="iconfont icon-icon-test11"></em><span>统计分析</span></a></li>
  </ul>
</div><!--e: sidebar-->

<!--s: toper-->
<div class="toper">
  <div class="icon"><img src="../images/3-30.png" width="80" height="60" alt=""></div>
  <div class="loginout" >
    <a class="png6" href="javascript:;" id="link_loginOut"><i class="iconfont icon-icon-test9"></i><span id="exit">退出</span></a>
  </div>
</div><!--e: toper-->

<!--通知-->
<div id="pageInfo"><div class="dowebok" id="marTxt"></div></div>

  <!--s: container-->
  <div class="container" id="container">

    <div class="h60"></div>

    <!--s: main-->
    <div class="main">

        <h2 class="titpos"><span class="curpage">批量修改管理</span></h2>
      <!--s: part-3-->

        <h3 class="clrfix subtit subtitmargin combox" style="padding:10px 0 10px 30px;">
            <i class="fl subtit-l" id="yw_9">
                <input id="houseCode" type="text" class="add_ftxt" placeholder="房源编号" style="width:214px;background:#f3f3f3" maxlength="45">
                 <input id="roomCode" type="text" class="add_ftxt" placeholder="房间编号" style="width:214px;background:#f3f3f3" maxlength="45">
                <a class="addbtn red" id="J_addSearch_hong" href="javascript:;" style="margin-right:50px;margin-left:8px;">搜索</a>
                <button class="layui-btn" style="float:right;" onclick="test()">开锁方式批量设置</button>
            </i>
            <span class="fr wordicos" style="margin-top:7px; display: none;">
                <span class="word_w" id="locknum_1"><span class="red" id="rows"></span> 条数据</span>
            </span>
        </h3>

      <div id="user_search" class="clrfix part-s part-3 combox" style="display: none;">

        <ul class="ful lockmnglist lockmnglist2" id="forSelect1"></ul>

      </div><!--e: part-3-->

        <div id="yw_list" class="clrfix part-s yw_list combox">
            <span style="line-height: 40px;">数据列表</span>
            <table class="alert-tb tdh60" width="100%" cellpadding="0" cellspacing="0" border="0">
                <thead>
                <tr>
                    <tr>
                    <th width="60">选择</th>
                    <th>门锁编码</th>
                    <th>房源编码</th>
                    <th width="150">房间编码</th>
                    <th width="100">门锁类型</th>
                    <th width="100">是否支持门磁</th>
                    <th width="100">通信状态</th>
                     <th width="100">电池电量</th>
                     <th width="100">安装地址</th>
                    <th width="100">安装时间</th>
                    <th width="100">运营商</th>
                    <th width="100">网关</th>
                    <th width="100">操作</th>            
                </tr>
                </thead>
                <tbody id="list">
                    
                </tbody>
            </table>
        </div>
      <!--s: pages-->
    

    </div><!--e: main-->

    <div class="h60"></div>

  </div><!--e: container-->


</div>


<!--s: over-->
<div class="over" id="over"></div>
<!--e: over-->

<!--s: dialog-->
<div class="msg" id="msg">
    <div class="msgtit" style="background:#e70012"><p style="color:#fff;"></p><a href="javascript:;" title="点击关闭">X</a></div>
    <div class="msgcon">
        <div class="msginner">
            <div tabindex="5" class="confirm"></div><!--alert confirm dialog-->
        </div>
    </div>
</div>
<!--js-->
<script src="../js/jquery-1.11.3.min.js"></script>
<script src="../js/jquery.cookie.min.js"></script>
<script src="../js/common/common.js"></script>
<script src="../layui/layui.js" charset="utf-8"></script>
<script type="text/javascript" src="../js/common/common.js"></script>
<script type="text/javascript" src="../js/lock/companyLockList.js"></script>
<div id="ldings" class="ldings">
    <span></span>
</div>

</body>
</html>

 

八、主要核心js代码


   
   function test2(){
       var ids = [];//定义一个门锁编号空数组
       
       //初次开锁方式空数组
       var items = [];
       
       //后续开锁方式空数组
       var items2=[]
      
     $("input[name='lock_id']:checked").each(function(i){//把所有被选中的复选框的值存入数组
         ids[i] =$(this).val();
         
     });
          
               
     $("input[name='first_way']").each(function() {
        
         items.push($(this).val());

     });
     
     $("input[name='laster_way']").each(function() {
            
         items2.push($(this).val());

     });


             
    var first = $('input[name="first_way"]:checked').length;
    var laster = $('input[name="laster_way"]:checked').length;
    
    if(first<2){
        layui.use('layer', function(){
              var layer = layui.layer;
              
              layer.alert("初次开锁方式至少选择两种");
        });
        
        return false;
    }else if(laster<2){
        
        layui.use('layer', function(){
              var layer = layui.layer;
              
              layer.alert("后续开锁方式至少选择两种");
        });
      
      return false;
    }else{
        
        var data = {
                ids:ids,
                items:items,
                items2:items2
        }
        $.ajax({

            url: "/lms/lock/updateLockOpenLockWayInfo",
            type: "POST",
            contentType: 'application/json;charset=utf-8',
            data : JSON.stringify(data),
            dataType : 'json',            
            success: function(data){
                if(data.returnCode=="000000"){
                  layui.use('layer', function(){
                    var layer = layui.layer;
                    
                    layer.msg(data.returnMsg,{icon:1});
              });
                  setTimeout(() => {
                      
                      closeLayui();
                }, 800);
                }else{
                  layui.use('layer', function(){
                      var layer = layui.layer;
                      
                      layer.alert(data.returnMsg,{icon:5});
                });
                }
            },error:function(XMLHttpRequest, textStatus, errorThrown){
               // 状态码
                 alert(XMLHttpRequest.status);
                  // 状态
                  alert(XMLHttpRequest.readyState);
                  // 错误信息   
                  alert(textStatus);
            }

          });
       
        
        return true;
    }
         
        
   }
   
  
   //关闭layui弹框
   function closeLayui(){
       parent.layer.closeAll()
       location.reload();
  }
  
    

 

小结:通过上述例子,即可完成批量修改功能。

 

上一篇:【JETTY SERVER 开发系列之一】搭建JETTY SERVER环境&&HTTP客户端实现交互


下一篇:nginx访问报错:Too many open files accept: