Javaweb完整项目+Layui+Mybatis+增删改查条件模糊查询(源码)Part5之删除数据

删除可以说是整个结构中最简单的一个部分了
在这里插入图片描述

1.页面

我们只需要为删除添加对应的事件绑定 lay-filter

<!--layui-btn layui-btn-normal layui-btn-sm
        样式为一个按钮     样式为对应的颜色   按钮形状的大小
          lay-event 代表的是事件监听-->
<script type="text/html" id="barDemo">
    <a class="layui-btn  layui-btn-sm" lay-event="edit">编辑</a>
    <a class="layui-btn layui-btn-danger layui-btn-sm" lay-event="del">删除 </a>
</script>

然后就可以在layui的user中使用对应的内容了

2.js

layui.use里这里直接写对应的触发的事件

//在表格上触发的事件监听
        //传进去的参数代表的是一整个layui数据,但是可以通过参数名.data拿到当前这一条json数据
        table.on('tool(customer)', function (obj) {
            //先获取当前的数据
            var data = obj.data;
            //obj对象》》》 {code:0;msg:'成功',success:true,data:[{},{},{}]}
            //真实的json数据》》obj.data
            // console.log(obj.data.username);
            var uuid = obj.data.uuid;
            //如果这个触发的事件是del
            if (obj.event == 'del') {
                layer.confirm('确定删除吗?', function(index) {
                    //发起ajax请求
                    $.ajax({
                        url: '/day01/customer/deleteOne',
                        data: {uuid:uuid},
                        type: 'post',
                        dataType: 'JSON',
                        success: function (data) {//data就是页面返回过来的数据
                            if (data.code > 0) {
                                layer.msg("删除成功", {icon: 1});
                                //重新渲染
                                reload();
                            } else {
                                layer.alert('删除失败', {icon: 5});
                            }
                        }
                    });
                });
            }
       //加载数据表格的渲染
        function reload() {
            table.reload('customer', {//执行的参数组
                //访问servlet把用户带的条件传过去 并且将这个数据通过工具类转换为对应的json格式返回给页面
                //参数: url 访问的路径名称 method 访问的方式 loading 是否加载进度条 page 代表是否分页
                //where 代表传输过去的参数 request请求  //自定义分页请求参数名 page 当前页 limit页大小
                url: '/day01/customer/pageByCondition'
                , method: 'POST'
                , page: true
                , loading: true
                ,
                where: {//获取到servlet中需要的三个参数 》模糊查询
                    'username': $("#username").val(),
                    'nickname': $("#nickname").val(),
                    'addr': $("#addr").val(),
                },
                request: {//代表的是layui自动传的值
                    pageName: "page",
                    limitName: 'limit',
                }
            });
        }


这样,js部分就处理好了,接下来要做的就是servlet的处理

3.servlet

这里的返回json使用了工具类,在前面的博客中有提到

 //删除一条数据
    public void deleteOne(HttpServletRequest request, HttpServletResponse response) {
        try {
            String id= request.getParameter("uuid");
            //获取请求的uuid
            int uuid = Integer.parseInt(id);
            //获取sqlSession
            SqlSession sqlSession = GetSqlSession.getSqlSession();
            //获取代理对象
            CustomerMapper mapper =sqlSession.getMapper(CustomerMapper.class);
            //执行插入
            int i= mapper.delete(uuid);
            //sqlSession事务提交
            sqlSession.commit();
            if (i >0) {
                System.out.println("删除数据成功");
                String success = ResultData.success();
                response.getWriter().write(success);
            }else{
                System.out.println("删除数据失败");
                String error = ResultData.error();
                response.getWriter().write(error);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

4.数据交互

mapper:

这里的删除相对简单,我们直接使用注解开发


    @Delete("delete from customer where uuid = #{uuid}")
    int delete(int uuid);

到此就写完了

最后补上到现在为止的增删查 模糊查询的全部页面和代码

5.完整页面 Customer.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Layui</title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <link rel="stylesheet" href="layui/css/layui.css" tppabs="http://res.layui.com/layui/dist/css/layui.css"
          media="all">
    <!-- 注意:如果你直接复制所有代码到本地,上述css路径需要改成你本地的 -->
</head>
<body>


<!-- 搜索栏 -->
<div class="layui-form-item">
    <div class="layui-inline">
        <label class="layui-form-label">客户账户:</label>
        <div class="layui-input-inline" style="width: 150px">
            <input type="text" id="username" name="username" placeholder="请输入客户名称" autocomplete="off"
                   class="layui-input">
        </div>
        <label class="layui-form-label">客户昵称:</label>
        <div class="layui-input-inline" style="width: 150px">
            <input type="text" id="nickname" name="nickname" placeholder="请输入客户昵称" autocomplete="off"
                   class="layui-input">
        </div>
        <label class="layui-form-label">客户地址:</label>
        <div class="layui-input-inline" style="width: 150px">
            <input type="text" id="addr" name="addr" placeholder="请输入客户地址" autocomplete="off" class="layui-input">
        </div>
    </div>
    <div class="layui-inline">
        <div class="layui-input-inline">
            <button id="btn_search" type="button" class="layui-btn layui-btn-normal">
                <i class="layui-icon layui-icon-search"></i>
                查询
            </button>
            <button id="btn_reset" type="button" class="layui-btn layui-btn-normal">
                重置
            </button>
        </div>
    </div>
    <div class="layui-inline">
        <div class="layui-input-inline">
            <button id="btn_add" type="button" class="layui-btn layui-btn-warm layui-btn-radius">
                <i class="layui-icon layui-icon-add-1"></i>
                新增
            </button>
        </div>
    </div>
</div>
<!--搜索栏结束-->

<table class="layui-hide" id="customer" lay-filter="customer"></table>

<!--layui-btn layui-btn-normal layui-btn-sm
        样式为一个按钮     样式为对应的颜色   按钮形状的大小
          lay-event 代表的是事件监听-->
<script type="text/html" id="barDemo">
    <a class="layui-btn  layui-btn-sm" lay-event="edit">编辑</a>
    <a class="layui-btn layui-btn-danger layui-btn-sm" lay-event="del">删除 </a>
</script>


<script src="layui/layui.js" charset="utf-8"></script>
<script src="js/jquery-3.3.1.js"></script>
<!-- 注意 :如果你直接复制所有代码到本地,上述 JS 路径需要改成你本地的 -->

<script>
    layui.use('table', function () {
        var table = layui.table;
        //数据渲染
        table.render({
            elem: '#customer'//代表的是你操作的数据表格的编号
            , url: '/day01/customer/page'//数据接口
            , page: { // 支持传入 laypage 组件的所有参数(某些参数除外,如:jump/elem) - 详见文档
                layout: ['limit', 'count', 'prev', 'page', 'next', 'skip'], //自定义分页布局//curr: 5,
                groups: 6, //只显示 1 个连续页码
                first: false, //不显示首页
                last: false //不显示尾页
            }
            , cellMinWidth: 80 //全局定义常规单元格的最小宽度,layui 2.2.1 新增
            , cols: [[
                {field: 'uuid', width: 180, title: 'UUID', align: 'center'}
                , {field: 'username', width: 180, title: '客户账户', align: 'center'}
                , {field: 'password', width: 180, title: '客户密码', align: 'center'}
                , {field: 'nickname', width: 180, title: '客户昵称', align: 'center'}
                , {field: 'gender', width: 180, title: '客户性别', align: 'center'} //minWidth:局部定义当前单元格的最小宽度,layui 2.2.1 新增
                , {field: 'addr', width: 180, title: '客户地址', align: 'center', sort: true}
                , {field: '操作', title: '操作', fixed: 'right', width: 220, align: 'center', toolbar: '#barDemo'}
            ]]
            ,
            limit: 12,//页大小
            limits: [10, 15, 20, 50, 100]//当前页大小的选项
        });

        /*点击查询按钮触发的事件监听*/
        $("#btn_search").click(function () {
            reload();
        });
        /*点击重置按钮触发的事件监听*/
        $("#btn_reset").click(function () {
            $("#username").val(""),
                $("#nickname").val(""),
                $("#addr").val("");
        });

        $("#btn_add").click(function () {
            //打开一个新的页面
            //打开新窗口
            layer.open({
                type: 2,//layer提供了5种层类型。可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)
                title: "新增客户信息",
                maxmin: true,
                area: ['600px', '450px'],
                shadeClose: false, //点击遮罩关闭
                content: 'addCustomer.html',
            });
        });

        //加载数据表格的渲染
        function reload() {
            table.reload('customer', {//执行的参数组
                //访问servlet把用户带的条件传过去 并且将这个数据通过工具类转换为对应的json格式返回给页面
                //参数: url 访问的路径名称 method 访问的方式 loading 是否加载进度条 page 代表是否分页
                //where 代表传输过去的参数 request请求  //自定义分页请求参数名 page 当前页 limit页大小
                url: '/day01/customer/pageByCondition'
                , method: 'POST'
                , page: true
                , loading: true
                ,
                where: {//获取到servlet中需要的三个参数 》模糊查询
                    'username': $("#username").val(),
                    'nickname': $("#nickname").val(),
                    'addr': $("#addr").val(),
                },
                request: {//代表的是layui自动传的值
                    pageName: "page",
                    limitName: 'limit',
                }
            });
        }


        //在表格上触发的事件监听
        //传进去的参数代表的是一整个layui数据,但是可以通过参数名.data拿到当前这一条json数据
        table.on('tool(customer)', function (obj) {
            //先获取当前的数据
            var data = obj.data;
            //obj对象》》》 {code:0;msg:'成功',success:true,data:[{},{},{}]}
            //真实的json数据》》obj.data
            // console.log(obj.data.username);
            var uuid = obj.data.uuid;
            //如果这个触发的事件是del
            if (obj.event == 'del') {
                layer.confirm('确定删除吗?', function(index) {
                    //发起ajax请求
                    $.ajax({
                        url: '/day01/customer/deleteOne',
                        data: {uuid:uuid},
                        type: 'post',
                        dataType: 'JSON',
                        success: function (data) {//data就是页面返回过来的数据
                            if (data.code > 0) {
                                layer.msg("删除成功", {icon: 1});
                                //重新渲染
                                reload();
                            } else {
                                layer.alert('删除失败', {icon: 5});
                            }
                        }
                    });
                });
            }


        });
    });
</script>

</body>
</html>

6.完整serlvlet

package servlet;

import com.fasterxml.jackson.databind.ObjectMapper;
import mapper.CustomerMapper;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.ibatis.session.SqlSession;
import pojo.Customer;
import util.BaseServlet;
import util.GetSqlSession;
import util.ResultData;
import util.ToLayuiData;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.sql.ResultSet;
import java.util.List;
import java.util.Map;

@WebServlet("/customer/*")
public class CustomerServlet extends BaseServlet {

    //删除一条数据
    public void deleteOne(HttpServletRequest request, HttpServletResponse response) {
        try {
            String id= request.getParameter("uuid");
            //获取请求的uuid
            int uuid = Integer.parseInt(id);
            //获取sqlSession
            SqlSession sqlSession = GetSqlSession.getSqlSession();
            //获取代理对象
            CustomerMapper mapper =sqlSession.getMapper(CustomerMapper.class);
            //执行插入
            int i= mapper.delete(uuid);
            //sqlSession事务提交
            sqlSession.commit();
            if (i >0) {
                System.out.println("删除数据成功");
                String success = ResultData.success();
                response.getWriter().write(success);
            }else{
                System.out.println("删除数据失败");
                String error = ResultData.error();
                response.getWriter().write(error);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }


    }


    //添加一条数据
    public void insertOne(HttpServletRequest request, HttpServletResponse response) {
        try {
            //请求对象直接获取所有的参数名和值
            Map<String, String[]> map = request.getParameterMap();
            //使用BeanUtils直接进行对象的映射
            Customer customer=new Customer();
            BeanUtils.populate(customer,map);
            System.out.println("新增的对象"+customer);
            //获取sqlSession
            SqlSession sqlSession = GetSqlSession.getSqlSession();
            //获取代理对象
            CustomerMapper mapper =sqlSession.getMapper(CustomerMapper.class);
            //执行插入
           int i= mapper.insertNew(customer);
            //sqlSession事务提交
//            sqlSession.commit();
            if (i >0) {
                System.out.println("新增数据成功");
                String success = ResultData.success();
                response.getWriter().write(success);
            }else{
                String error = ResultData.error();
                response.getWriter().write(error);
            }


        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }




        public void page(HttpServletRequest request, HttpServletResponse response) {
        try {
            //拿到页面传过来的两个参数 page当前页 limit页大小
            int page = Integer.parseInt(request.getParameter("page"));
            int limit = Integer.parseInt(request.getParameter("limit"));
            //获取代理对象
            CustomerMapper mapper = GetSqlSession.getSqlSession().getMapper(CustomerMapper.class);
            //分页查询  select * from customer limit  ?, ?   代表起始下标 页大小 10
            //  起始下标=(当前页大小-1)*页大小
            List<Customer> customers = mapper.selectPage((page - 1) * limit, limit);
            //查询总条数
            int count = mapper.selectCount();

            //将查出来的数据转换为json格式
            ObjectMapper objectMapper = new ObjectMapper();
            String data = objectMapper.writeValueAsString(customers);
            System.out.println(data);

            //code msg count data
            ToLayuiData layuiData = ToLayuiData.success(0, "成功", count, data);
            //将这个数据返回给页面进行渲染
            response.getWriter().write(layuiData.toString());
            System.out.println(layuiData);

        } catch (IOException e) {
            e.printStackTrace();
        }


    }

    public void pageByCondition(HttpServletRequest request, HttpServletResponse response) {

        try {
            //拿到页面传过来的两个参数 page当前页 limit页大小
            int page = Integer.parseInt(request.getParameter("page"));
            int limit = Integer.parseInt(request.getParameter("limit"));
            //拿到用户输入的三个参数

            String username = request.getParameter("username");
            String nickname = request.getParameter("nickname");
            String addr = request.getParameter("addr");

            //获取代理对象
            CustomerMapper mapper = GetSqlSession.getSqlSession().getMapper(CustomerMapper.class);
            //分页查询  select * from customer limit  ?, ?   代表起始下标 页大小 10
            //  起始下标=(当前页大小-1)*页大小
            List<Customer> customers = mapper.selectPageByCondition((page - 1) * limit, limit,username,nickname,addr);
            //查询总条数但是附带条件
            int count = mapper.selectCountByCondition(username,nickname,addr);

            //将查出来的数据转换为json格式
            ObjectMapper objectMapper = new ObjectMapper();
            String data = objectMapper.writeValueAsString(customers);
            System.out.println(data);

            //code msg count data
            ToLayuiData layuiData = ToLayuiData.success(0, "成功", count, data);
            //将这个数据返回给页面进行渲染
            response.getWriter().write(layuiData.toString());
            System.out.println(layuiData);

        } catch (IOException e) {
            e.printStackTrace();
        }


    }


}

7.完整的mapper

package mapper;

import org.apache.ibatis.annotations.*;
import pojo.Customer;

import java.util.List;
import java.util.Map;

public interface CustomerMapper {
    //增加一条数据
    int insertNew(Customer customer);
    

    //更新数据
    int updateOne(Customer customer);

    //更新数的注解生成
    @Update(" update  customer  set username = #{username}, password = #{password}, nickname = #{nick}, gender = #{gender}, addr = #{addr}where uuid = #{uuid} ")
    int update(Customer customer);
    

    @Delete("delete from customer where uuid = #{uuid}")
    int delete(int uuid);
    

    //查询全部的客户信息
    @Select("select  * from customer")
    List<Customer> selectAll();

    //分页查询全部的客户信息
    @Select("select  * from customer limit #{startIndex} ,#{pageSize}")
    List<Customer> selectPage(@Param("startIndex") int startIndex,@Param("pageSize") int pageSize);

    @Select("select  count(*) from customer")
    int selectCount();

    //条件分页查询
    List<Customer> selectPageByCondition(@Param("startIndex") int startIndex,@Param("pageSize") int pageSize,@Param("username") String username,@Param("nickname") String nickname,@Param("addr") String addr);

    //条件查询数量
    int selectCountByCondition(@Param("username") String username,@Param("nickname") String nickname,@Param("addr") String addr);
}

8.完整的xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.CustomerMapper">

    <!--resultType="customer" 相当于 new BeanListHanlder<Customer>(Customer.class)
       resultMap 结果集 map键值对
       id:表示就是映射出来的id名称  type是需要映射的类
    -->
    <resultMap id="customerBean" type="pojo.Customer">
        <!--普通字段  result
        column  数据库中列字段名称    property   实体类中属性的名称-->
        <result column="nickname" property="nickname"></result>
    </resultMap>

    <!--sql片段 就是用于将重复的sql代码直接作为引入-->
    <sql id="selectAll">
        select * from customer
    </sql>


    <!--删除 通过主键uuid进行删除客户-->
    <delete id="deleteMore">
        delete from customer
        where
        uuid in
        <!--   (id1,id2,id3)
         collection="需要遍历的项/参数" item="遍历出来的项" open="开始的符号(" close="结束的符号)"  separator="每个数据之间的分割,"-->
        <foreach collection="uuids" item="uuid" open="(" close=")" separator=",">
            #{uuid}
        </foreach>
    </delete>

    <!--直接将新生成的数据返回
  useGeneratedKeys 使用生成主键  通过主键返回
  keyProperty 表示键的属性-->
    <insert id="insertNew" useGeneratedKeys="true" keyProperty="uuid">
        insert into customer
        (username,password,nickname,gender,addr)
        values (#{username},#{password},#{nickname},#{gender},#{addr})
    </insert>


    <!--更新语句 需要加上,分隔开每个字段设置值-->
    <update id="updateOne">
        update customer set
        username = #{username},
        password = #{password},
        nickname = #{nick},
        gender = #{gender},
        addr = #{addr}
        where
        uuid = #{uuid}
    </update>


    <!--多条件中只选择一个条件进行查询-->
    <select id="selectBySingle" resultMap="customerBean">
        <include refid="selectAll"></include>
        <where>
            <choose>
                <when test="addr !=null and addr !=''">
                    addr = #{addr}
                </when>
                <when test="username !=null and username !=''">
                    username like concat('%',#{username},'%')
                </when>
                <when test="nick !=null and nick !=''">
                    nickname like concat('%',#{nick},'%')
                </when>
            </choose>
        </where>
    </select>


    <!--多条件查询-->
    <select id="selectPageByCondition" resultMap="customerBean">
        select * from customer
        <where>
            <if test="username !=null and username !=''">
                and username like concat('%',#{username},'%')
            </if>
            <if test="nickname !=null and nickname !=''">
                and nickname like concat('%',#{nickname},'%')
            </if>
            <if test="addr !=null and addr !=''">
                and addr  like concat('%',#{addr},'%')
            </if>
        </where>
        limit #{startIndex} ,#{pageSize}
    </select>
    <select id="selectCountByCondition" resultType="java.lang.Integer">

        select  count(*) from customer
        <where>
            <if test="username !=null and username !=''">
                and username like concat('%',#{username},'%')
            </if>
            <if test="nickname !=null and nickname !=''">
                and nickname like concat('%',#{nickname},'%')
            </if>
            <if test="addr !=null and addr !=''">
                and addr  like concat('%',#{addr},'%')
            </if>
        </where>
    </select>


    <!--创建select标签-->

    <!--    <select id="selectAll" resultMap="customerBean">-->

    <!--        select * from customer-->

    <!--    </select>-->


</mapper>

到此,还剩下我们的改,由于改涉及到数据回显,我们可以最后再出编写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值