天天看點

SSM+maven實作答題管理系統(二)

好的,現在我們來實作删除模闆(model表删除記錄)的功能,删除功能不難做,主要我們這次實作的是批量删除功能。

一.思路整理

首先我們删除模闆是根據模闆的id來删除的,不管是單項删除還是批量删除,我們這裡使用layui擷取目前行的功能就能擷取模闆的id

其次不管單項删除還是批量删除,隻要将id放入數組中,後端對數組進行周遊,就能達到單項删除/批量删除

二.代碼實作

思路實作以後,我們上代碼。

View層:

var id_array = []; //擷取選中行
            // 擷取選中行 這裡我們可以選擇删除 這裡的id_array是一個隐藏的值 device對應device_id user對應code survry對應model_id
            table.on('checkbox(test)', function(obj) { //監聽複選框
                if (obj.type == 'all') {
                    if (obj.checked == true) {
                        var data = table.cache.dataCheck; //批量操作的表格複選框
                        id_array = [];
                        for (var l = 0; l < data.length; l++) {
                            id_array.push(data[l].model_id);
                        }
                        console.log(id_array);
                    } else {
                        id_array = [];
                    }
                } else {
                    if (obj.checked == true) {
                        id_array.push(obj.data.model_id);
                        console.log(id_array);
                    } else {
                        var index = id_array.indexOf(obj.data.model_id);
                        id_array.splice(index, 1);
                        console.log(id_array);
                    }
                }
            });

            $('#btn-delete-all').click(function() { //删除全部通過一個擷取選中行的值,來删除
                layer.confirm('您确定要删除這些資料嗎?', function(index) {
                    //打開正在加載中彈出層
                    layer.msg('加載中', {
                        icon: 16,
                        shade: 0.01,
                        time: '9999999'
                    });
                   var url = "survey/del_model";
                    var data = {
                        model_id: id_array //這裡将目前的model_id傳到後端
                    }
                    $.post(url, data, function(data) {
                        layer.close(layer.index); //關閉正在加載中彈出層
                        console.log(id_array);
                        if (data.code == 1) {
                            layer.msg(data.msg, {
                                icon: 6
                            });
                            location.reload();
                        } else {
                            layer.msg(data.msg, {
                                icon: 5
                            });
                        }
                    }, "json");
                });

            });

           

首先對資料表格進行監聽,如果資料表格的目前行被選中,則往id_array數組中push一個id,有多少個,push多少個,而後我們将數組用ajax上傳,鍵名為model_id.

Controller層:

//傳回資料用responseBody
    //删除model
    @RequestMapping(value="Index/survey/del_model")
    @ResponseBody
    public Map<String,Object> delModel(HttpServletRequest req) throws IOException {
        String[] arr = req.getParameterValues("model_id[]");//前端傳來的modelId
        int code;
        String msg;

//        if(arr!=null)
//        return api.returnJson(3,arr[0]);
        for (int i = 0; i < arr.length; i++) {
            List<Choose> is_answer=chooseService.findChooseByModelId(arr[i]);
            if (!is_answer.isEmpty()) {
                return api.returnJson(3,"抱歉,題目已經被作答,無法删除");
            }
            continue;
        }
        //如果沒有 那麼目前選中模闆的題目都沒有被答過 作級聯删除 删除模闆表 删除題目表 删除選項表(根據model查出Qsn 再根據qsnId删除Option)
        int is_del=modelService.deleteModelByIds(arr);//删除模闆表
        for (int i = 0; i <arr.length ; i++) {
            int is_del_qsn=qsnService.deleteModel2Qsn(arr[i]);//删除題目表
            List<Qsn> qsnList=qsnService.findQsnList(arr[i]);//得到題目
            System.out.println(qsnList);
            for (int j = 0; j <qsnList.size() ; j++) {//删除選項表
                int isDelOptions=detailService.deleteOptionsByQsnId(qsnList.get(j).getQsnId());
            }
        }

        //先查詢模闆下的題目list 然後周遊list,根據item.id 即qsnId來删除
//        String[] is_del_option 還缺删除選項表的邏輯
        if (is_del!=0){
            code=1;
            msg="success";
        }else {
            code=2;
            msg="fail";
        }

        return api.returnJson(code,msg);
    }
           

這裡進行說明一下,差別于tp5,我們使用httpservlet.request的getParameterValues()方法來擷取前端傳入的array數組

Service層:

modelService:

package com.sl.example.service;


import com.sl.example.pojo.Model;

import java.util.List;

public interface ModelService {
    public List<Model> findAllModel();

    public int deleteModelById(String modelId);

    public int deleteModelByIds(String[] arr);

    public int InsertModel(Model model);

    public Model selectModelById(String modelId);
}

           

modelServiceImpl:

package com.sl.example.service;

import com.sl.example.dao.ModelMapper;
import com.sl.example.pojo.Model;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

@Service("modelService")
@Transactional
public class ModelServiceImpl implements ModelService{

    @Resource
    private ModelMapper modelMapper;

    @Override
    public List<Model> findAllModel() {
        return modelMapper.selectAllModel();
    }

    @Override
    public int deleteModelById(String modelId) {
        return modelMapper.deleteByPrimaryKey(modelId);
    }

    @Override
    public int deleteModelByIds(String[] arr) {
        return modelMapper.deleteByIds(arr);
    }

    @Override
    public int InsertModel(Model model) {
        return modelMapper.insertSelective(model);
    }

    @Override
    public Model selectModelById(String modelId) {
        return modelMapper.selectByPrimaryKey(modelId);
    }
}

           

将DAO層也貼出來:

package com.sl.example.dao;

import com.sl.example.pojo.Model;

import java.util.List;

public interface ModelMapper {
    int deleteByPrimaryKey(String modelId);

    int deleteByIds(String[] list);

    int insert(Model record);

    int insertSelective(Model record);

    Model selectByPrimaryKey(String modelId);

    List<Model> selectAllModel();

    int updateByPrimaryKeySelective(Model record);

    int updateByPrimaryKey(Model record);
}
           

對應的ModelMapper.xml:

<?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.sl.example.dao.ModelMapper" >
  <resultMap id="BaseResultMap" type="com.sl.example.pojo.Model" >
    <constructor >
      <idArg column="model_id" jdbcType="VARCHAR" javaType="java.lang.String" />
      <arg column="name" jdbcType="VARCHAR" javaType="java.lang.String" />
      <arg column="time" jdbcType="DATE" javaType="java.util.Date" />
      <arg column="create_name" jdbcType="VARCHAR" javaType="java.lang.String" />
      <arg column="rmk2" jdbcType="VARCHAR" javaType="java.lang.String" />
      <arg column="rmk3" jdbcType="VARCHAR" javaType="java.lang.String" />
      <arg column="rmk4" jdbcType="VARCHAR" javaType="java.lang.String" />
      <arg column="rmk5" jdbcType="VARCHAR" javaType="java.lang.String" />
    </constructor>
  </resultMap>
  <sql id="Base_Column_List" >
    model_id, name, time, create_name, rmk2, rmk3, rmk4, rmk5
  </sql>
  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" >
    select 
    <include refid="Base_Column_List" />
    from t_gr_qsn_model
    where model_id = #{modelId,jdbcType=VARCHAR}
  </select>
  <select id="selectAllModel" resultMap="BaseResultMap" resultType="java.util.List">
    select
    <include refid="Base_Column_List" />
    from t_gr_qsn_model
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.String" >
    delete from t_gr_qsn_model
    where model_id = #{modelId,jdbcType=VARCHAR}
  </delete>
  <delete id="deleteByIds" parameterType="java.util.Arrays">
    delete from t_gr_qsn_model
    where model_id in
    <foreach collection="array" index="index" item="item" open="(" separator="," close=")">
      #{item}
    </foreach>
  </delete>
  <insert id="insert" parameterType="com.sl.example.pojo.Model" >
    insert into t_gr_qsn_model (model_id, name, time, 
      create_name, rmk2, rmk3, 
      rmk4, rmk5)
    values (#{modelId,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{time,jdbcType=DATE}, 
      #{createName,jdbcType=VARCHAR}, #{rmk2,jdbcType=VARCHAR}, #{rmk3,jdbcType=VARCHAR}, 
      #{rmk4,jdbcType=VARCHAR}, #{rmk5,jdbcType=VARCHAR})
  </insert>
  <insert id="insertSelective" parameterType="com.sl.example.pojo.Model" >
    insert into t_gr_qsn_model
    <trim prefix="(" suffix=")" suffixOverrides="," >
      <if test="modelId != null" >
        model_id,
      </if>
      <if test="name != null" >
        name,
      </if>
      <if test="time != null" >
        time,
      </if>
      <if test="createName != null" >
        create_name,
      </if>
      <if test="rmk2 != null" >
        rmk2,
      </if>
      <if test="rmk3 != null" >
        rmk3,
      </if>
      <if test="rmk4 != null" >
        rmk4,
      </if>
      <if test="rmk5 != null" >
        rmk5,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides="," >
      <if test="modelId != null" >
        #{modelId,jdbcType=VARCHAR},
      </if>
      <if test="name != null" >
        #{name,jdbcType=VARCHAR},
      </if>
      <if test="time != null" >
        #{time,jdbcType=DATE},
      </if>
      <if test="createName != null" >
        #{createName,jdbcType=VARCHAR},
      </if>
      <if test="rmk2 != null" >
        #{rmk2,jdbcType=VARCHAR},
      </if>
      <if test="rmk3 != null" >
        #{rmk3,jdbcType=VARCHAR},
      </if>
      <if test="rmk4 != null" >
        #{rmk4,jdbcType=VARCHAR},
      </if>
      <if test="rmk5 != null" >
        #{rmk5,jdbcType=VARCHAR},
      </if>
    </trim>
  </insert>
  <update id="updateByPrimaryKeySelective" parameterType="com.sl.example.pojo.Model" >
    update t_gr_qsn_model
    <set >
      <if test="name != null" >
        name = #{name,jdbcType=VARCHAR},
      </if>
      <if test="time != null" >
        time = #{time,jdbcType=DATE},
      </if>
      <if test="createName != null" >
        create_name = #{createName,jdbcType=VARCHAR},
      </if>
      <if test="rmk2 != null" >
        rmk2 = #{rmk2,jdbcType=VARCHAR},
      </if>
      <if test="rmk3 != null" >
        rmk3 = #{rmk3,jdbcType=VARCHAR},
      </if>
      <if test="rmk4 != null" >
        rmk4 = #{rmk4,jdbcType=VARCHAR},
      </if>
      <if test="rmk5 != null" >
        rmk5 = #{rmk5,jdbcType=VARCHAR},
      </if>
    </set>
    where model_id = #{modelId,jdbcType=VARCHAR}
  </update>
  <update id="updateByPrimaryKey" parameterType="com.sl.example.pojo.Model" >
    update t_gr_qsn_model
    set name = #{name,jdbcType=VARCHAR},
      time = #{time,jdbcType=DATE},
      create_name = #{createName,jdbcType=VARCHAR},
      rmk2 = #{rmk2,jdbcType=VARCHAR},
      rmk3 = #{rmk3,jdbcType=VARCHAR},
      rmk4 = #{rmk4,jdbcType=VARCHAR},
      rmk5 = #{rmk5,jdbcType=VARCHAR}
    where model_id = #{modelId,jdbcType=VARCHAR}
  </update>
</mapper>
           

我們來試驗一下。

SSM+maven實作答題管理系統(二)

1.gif

成功啦,下一節我們講對應某一套題目模闆下的題目的增删。