批量删除

批量删除,其解决方案就是从前台获得每个checkbox的id值,然后通过url传给后台处理,其实大家看我的

Ajax前后台传值小demo可知,其实那篇文章就是一个雏形,这篇文章只不过将模拟付诸于实践,而这篇文章采用的技术为spring mvc+mybatis+jquery+display标签

关于spring mvc及mybatis的配置(含mybatisutil工具类)请分别参考spring mvc 小demo验证javabean mybatis操作oracle数据库主键自增(触发器)两篇文章,此处不再赘述
首先看底层数据库在mysql中设计一张Admin表,由于是一个demo,所以就设计了三个字段,大家对应Admin实体类能够看出的
package com.bean;
public class Admin {
	private int id;
	private String name;
	private String pwd;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
}
当然还有对应的xml文件
<mapper namespace="com.bean.Admin">
	<select id="deleteById" parameterType="int" resultType="int">
	 	 delete from admin where id=#{id}
	</select>
	
	<select id="list" resultType="Admin">
		select * from admin
	</select>
</mapper>
然后是controller层
package com.controller;

import java.io.IOException;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.bean.Admin;
import com.service.AdminService;

@Controller
@RequestMapping({"/jsp/"})
public class AdminController {
	private AdminService adminService;
	
	@RequestMapping({"list"})
	public ModelAndView list(HttpServletRequest request, HttpServletResponse response){
		adminService = new AdminService();
		List<Admin>list = adminService.list();
		ModelAndView mv = new ModelAndView();
		mv.setViewName("adminList");
		mv.addObject("adminList", list);
		return mv;
	}
	
	@RequestMapping({"delete"})
	public void deleteAll(HttpServletRequest request,HttpServletResponse response) throws IOException{
		adminService = new AdminService();
		String strId = request.getParameter("id");
		if (strId==null||strId.length()==0) {
			return ;
		}
		String strIds[] = strId.split(",");
		int ids[] = new int[strIds.length];
		for (int i = 0; i < ids.length; i++) {
			ids[i] = Integer.parseInt(strIds[i]);
		}
		adminService.deleteAll(ids);
		response.sendRedirect("list") ;
	}
}
接着是service层
package com.service;

import java.util.List;

import com.bean.Admin;
import com.dao.AdminDao;

public class AdminService {
	private AdminDao adminDao;
	
	public List<Admin> list() {
		adminDao = new AdminDao();
		return adminDao.list();
	}
	
	public void deleteAll(int ids[]){
		adminDao = new AdminDao();
		for (int id : ids) {
			adminDao.deleteById(id);
		}
	}

}
再接着是dao层
package com.dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.bean.Admin;
import com.util.MybatisUtil;

public class AdminDao {
	private SqlSession session;
	
	public List<Admin> list() {
		session = MybatisUtil.getSession();
		List<Admin> list = session.selectList(Admin.class.getName()+".list");
		session.close();
		return list;
	}

	public int deleteById(int id) {
		session = MybatisUtil.getSession();
		System.out.println(id);
		int count = session.delete(Admin.class.getName()+".deleteById", id);
		session.commit();
		session.close();
		return count;
		
	}

}
前台的jquery代码
$(document).ready(function(){ 
	postData();
 });

function postData(){
	$("a").click(function() {
		var ck = $("input[type='checkbox']:checked");
		var len = ck.length;
		if(len==0){
			return false;
		}
        ck.each(function(pointer) {
			var current = $(this);
			if (pointer < len - 1) {
				val += current.val() + ",";
			} else {
				name = current.attr("name");
				val += current.val();
			}
		});
		var url = "jsp/delete?id=" + val;
		window.location.href=url;
		
 
   
 
  
至此所有的controller,service,到层和entity类都已完成,只差表现层的jsp
对于jsp,只需要在页面中获得,引入display标签需要引入<%@ taglib uri="http://displaytag.sf.net" prefix="display" %>
<display:table name="adminList" id="adminItem" requestURI="list">
		<display:column title="${checkAll}">
	           <input type="checkbox" name="id" value="${adminItem.id}" />
		</display:column>
		<display:column property="name" title="姓名"></display:column>
		<display:column property="pwd" title="密码"></display:column>
	</display:table>

总结和遇到的问题
1.原来我采用和ajax那个小demo中一样使用的跳转方式使用ajax跳转到后台,但是会出现ajax中探讨过得第一个问题,那样也行,只不过是在success回调中跳转,但是发现完全没有必要,直接跳转,然后在delete方法中再发一次请求,跳转到list方法中
2.对于spring mvc中引用js,css和图片文件需要指明对于如下资源文件不采用spring的过滤器,在web.xml中的代码配置如下
<servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.css</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.gif</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.jpg</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.png</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.js</url-pattern>
    </servlet-mapping>
3.对于遍历取checkbox中checked的值的那些checkbox,应该只遍历一遍,而不是像这样
        var str = "";
	var ck = $("input[type='checkbox']:checked");
		 for(var i=0;i<ck.length;i++){
		  	if(ck[i].checked)
		  	{
		  		str+=ck[i].value+",";
		  	}
		  }
	str = str.substring(0, str.length-1);
这样相当于遍历了两遍。



如果文章有什么错误或者有什么建议,欢迎提出,大家共同交流,一起进步

文章转载请注明出处,请尊重知识产权

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值