2022/3/27 使用Ajax完成异步增删改查(模糊查询+分页)

目录

js代码:

servlet代码:

Dao层实现类代码:

service层代码:

运行结果:

        1.首页界面

         2.分页后界面

         3.增加后

         4.模糊查询后

         5.修改界面

        6.删除界面 


js代码:

<%@ page import="Service.impl.BananaServiceimpl" %>
<%@ page import="Service.BananaService" %>
<%@ page import="java.util.List" %>
<%@ page import="entity.banana" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
    <style>
      table,form,h1{
        margin: 0px auto;
        text-align: center;
      }
      *{
        text-align: center;
      }
    </style>
    <script src="js/jquery.js"></script>

  </head>
  <body>
  <h1>香蕉管理系统</h1>
  请输入香蕉名称:<input type="text" id="uname"/><br>
  <button onclick="ccc()">点我查询</button>
    <table border="1">
      <tr>
        <td>香蕉编号</td>
        <td>香蕉名称</td>
        <td>香蕉价格</td>
        <td>香蕉颜色</td>
        <td>种植时间</td>
        <td>操作</td>
      </tr>
    </table>
  <button value="0"class="but">首页</button>
  <button value="-1"class="but">上一页</button>
  <button value="1"class="but">下一页</button>
  <button value="9999"class="but">尾页</button>
  <div>
    <form>
      香蕉编号:<input type="text" name="bid"><br>
      香蕉名称:<input type="text" name="bname"><br>
      香蕉价格:<input type="text" name="bprice"><br>
      香蕉颜色:<input type="text" name="bcolor"><br>
      种植时间:<input type="date" style="width: 171px" name="btime"><br>
      <button type="button" onclick="insert_update()">提交</button>
    </form>
  </div>
  <div id="load">

  </div>
  </body>
  <script>
    /*
    * load()方法
    * 最简介的ajax方法
    * 常用于异步展示简单的信息
    * */
    $("#load").load("Do_getName")
    //加载事件
    $(function () {
      select()
    })
    /*
    * 模糊查询
    * */
    function ccc() {
      var bname= $("#uname").val()
      $('tr:gt(0)').remove();
      $.get("Do_like","bname="+bname,function (data) {
        for (let i = 0; i < data.length; i++) {
          var str="<tr>";
          str+="<td>"+data[i].bid+"</td>";
          str+="<td>"+data[i].bname+"</td>";
          str+="<td>"+data[i].bprice+"</td>";
          str+="<td>"+data[i].bcolor+"</td>";
          str+="<td>"+data[i].btime+"</td>";
          str+="<td><a href='javascript:void(0)' onclick='update("+data[i].bid+","+"\""+data[i].bname+"\","+data[i].bprice+","+"\""+data[i].bcolor+"\","+"\""+data[i].btime+"\")'>点我修改</a>&nbsp;<a href='javascript:void(0)' onclick='delete1("+data[i].bid+")'>点我删除</a></td>";
          str+="</tr>"
          $('table').append(str);
        }
      },"JSON") //类型一定要用引号引起来!

    }
    /*
    * 分页方法
    * */
    $(".but").click(function (){
      $('tr:gt(0)').remove();
      var index = $(this).val();
      $.getJSON("Do_page","index="+index,function (data) {
        for (let i = 0; i < data.length; i++) {
          var str="<tr>";
          str+="<td>"+data[i].bid+"</td>";
          str+="<td>"+data[i].bname+"</td>";
          str+="<td>"+data[i].bprice+"</td>";
          str+="<td>"+data[i].bcolor+"</td>";
          str+="<td>"+data[i].btime+"</td>";
          str+="<td><a href='javascript:void(0)' onclick='update("+data[i].bid+","+"\""+data[i].bname+"\","+data[i].bprice+","+"\""+data[i].bcolor+"\","+"\""+data[i].btime+"\")'>点我修改</a>&nbsp;<a href='javascript:void(0)' onclick='delete1("+data[i].bid+")'>点我删除</a></td>";
          str+="</tr>"
          $('table').append(str);
        }
      })
    })
    /*
    * 为了后面的增删改调用方便
    * */
    function select() {
      $('tr:gt(0)').remove();
      //路径  参数  回调函数 返回值类型
      //$.get $.post    $.getJSON $.load
      $.getJSON('Do_Select','',function (data) {
        for (let i = 0; i < data.length; i++) {
          var str="<tr>";
          str+="<td>"+data[i].bid+"</td>";
          str+="<td>"+data[i].bname+"</td>";
          str+="<td>"+data[i].bprice+"</td>";
          str+="<td>"+data[i].bcolor+"</td>";
          str+="<td>"+data[i].btime+"</td>";
          str+="<td><a href='javascript:void(0)' onclick='update("+data[i].bid+","+"\""+data[i].bname+"\","+data[i].bprice+","+"\""+data[i].bcolor+"\","+"\""+data[i].btime+"\")'>点我修改</a>&nbsp;<a href='javascript:void(0)' onclick='delete1("+data[i].bid+")'>点我删除</a></td>";
          str+="</tr>"
          $('table').append(str);
        }
      })
    }
    /*
    * 点修改进来以后 传值加设置id禁用
    * */
    function update(bid,bname,bprice,bcolor,btime) {
      // alert("点了修改"+bname)
      $('input[name="bid"]').val(bid);  //设置name为bid的值为ob
      $('input[name="bname"]').val(bname);
      $('input[name="bprice"]').val(bprice);
      $('input[name="bcolor"]').val(bcolor);
      $('input[name="btime"]').val(btime);
      $('input[name="bid"]').attr("readonly","readonly"); //并设置为禁用状态
    }
    /*
    * 修改跟新增共用一个按钮处理
    * */
    function insert_update() {
      var url="";
      if($('input[name="bid"]').attr("readonly")=="readonly"){
        url="Do_Update";
      }else{
        url="Do_insert";
      }
      var obj=$("form").find(":input"); //获取所有输入框
      var str=obj.serialize();  //获取里面的所有内容
      $.post(url,str,function (data) {
        alert(data);
        select();
        //清空表单
        $("form").find(":input").val("");
        $('input[name="bid"]').removeAttr("readonly");  //去掉禁用
      })
    }
    /*
    * 删除
    * */
    function delete1(bid) {
      $.get("Do_Delete","bid="+bid,function (data) {
        if(data.trim()=="true"){
          alert("删除成功!")
          select()
        }else{
          alert("删除失败!")
        }
      })
    }
  </script>
</html>

servlet代码:

代码量太多这里只展示分页servlet

package Servlet;

import Service.BananaService;
import Service.impl.BananaServiceimpl;
import com.alibaba.fastjson.JSON;
import entity.banana;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

@WebServlet("/Do_page")
public class Do_page extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置resp编码格式为utf-8 两种方式都可以
        resp.setContentType("text/html;charset=utf-8");
        resp.setCharacterEncoding("utf-8");
        BananaService banana=new BananaServiceimpl();
        int index=1;
        int count = (int) Math.ceil(banana.count()/3.0);
        if(req.getSession().getAttribute("index")!=null){
            int page= Integer.parseInt(req.getParameter("index"));
            index= (int) req.getSession().getAttribute("index");
            if(page==-1||page==1){
                index=index+page;
            }else{
                index=Integer.parseInt(req.getParameter("index"));
            }
            if(index>count){
                index=count;
            }else if(index<1){
                index=1;
            }
        }
        //返回结果给AJAX  用out对象输出返回
        PrintWriter out = resp.getWriter();
        req.getSession().setAttribute("index",index);
        List<banana> list=banana.limit(index,3);
        //如果java结果要返回对象或者集合
        //一定要手动先转成JSON格式 再out.print返回
        String result = JSON.toJSONString(list);
        out.print(result);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

Dao层实现类代码:

package dao.impl;

import dao.Bananaimpl;
import dao.BasDao;
import entity.banana;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class Bananadaoimpl extends BasDao implements Bananaimpl {
    @Override
    public List<banana> getall() {
        List<banana>list=new ArrayList<>();
        Connection conn=this.getConnection();
        String sql="select * from banana";
        try {
            PreparedStatement ps=conn.prepareStatement(sql);
            ResultSet rs=ps.executeQuery();
            while (rs.next()){
                banana b=new banana();
                b.setBid(rs.getInt("bid"));
                b.setBname(rs.getString("bname"));
                b.setBprice(rs.getDouble("bprice"));
                b.setBcolor(rs.getString("bcolor"));
                b.setBtime(rs.getString("btime"));
                list.add(b);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return list;
    }

    @Override
    public int delete(int bid) {
        int i=0;
        Connection conn=this.getConnection();
        String sql="delete from banana where bid=?";
        try {
            PreparedStatement ps=conn.prepareStatement(sql);
            ps.setInt(1,bid);
            i=ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return i;
    }

    @Override
    public int insert(banana b) {
        int i=0;
        Connection conn=this.getConnection();
        String sql="insert into banana(bid,bname,bprice,bcolor,btime) values(?,?,?,?,?)";
        try {
            PreparedStatement ps=conn.prepareStatement(sql);
            ps.setInt(1,b.getBid());
            ps.setString(2,b.getBname());
            ps.setDouble(3,b.getBprice());
            ps.setString(4,b.getBcolor());
            ps.setString(5,b.getBtime());
            i=ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return i;
    }

    @Override
    public int update(banana b) {
        int i=0;
        Connection conn=this.getConnection();
        String sql="update banana set bname=?,bprice=?,bcolor=?,btime=? where bid=?";
        try {
            PreparedStatement ps=conn.prepareStatement(sql);
            ps.setString(1,b.getBname());
            ps.setDouble(2,b.getBprice());
            ps.setString(3,b.getBcolor());
            ps.setString(4,b.getBtime());
            ps.setInt(5,b.getBid());
            i=ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return i;
    }

    @Override
    public List<banana> limit(int index,int i) {
        List<banana>list=new ArrayList<>();
        Connection conn=this.getConnection();
        String sql="select * from banana limit ?,?";
        try {
            PreparedStatement ps=conn.prepareStatement(sql);
            int c=(index-1)*i;
            ps.setInt(1,c);
            ps.setInt(2,i);
            ResultSet rs=ps.executeQuery();
            while (rs.next()){
                banana b=new banana();
                b.setBid(rs.getInt("bid"));
                b.setBname(rs.getString("bname"));
                b.setBprice(rs.getDouble("bprice"));
                b.setBcolor(rs.getString("bcolor"));
                b.setBtime(rs.getString("btime"));
                list.add(b);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return list;
    }

    @Override
    public int count() {
        int i=0;
        Connection conn=this.getConnection();
        String sql="select count(*) from banana";
        try {
            PreparedStatement ps=conn.prepareStatement(sql);
            ResultSet rs=ps.executeQuery();
            while (rs.next()){
                i=rs.getInt(1);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return i;
    }

    @Override
    public List<banana> like(String bname) {
        List<banana>list=new ArrayList<>();
        Connection conn=this.getConnection();
        String sql="select * from banana where bname like ?";
        try {
            PreparedStatement ps=conn.prepareStatement(sql);
            ps.setString(1,'%'+bname+'%');
            ResultSet rs=ps.executeQuery();
            while (rs.next()){
                banana b=new banana();
                b.setBid(rs.getInt("bid"));
                b.setBname(rs.getString("bname"));
                b.setBprice(rs.getDouble("bprice"));
                b.setBcolor(rs.getString("bcolor"));
                b.setBtime(rs.getString("btime"));
                list.add(b);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return list;
    }
}

service层代码:

package Service;

import entity.banana;

import java.util.List;

public interface BananaService {
    /*
     * 查询全部香蕉
     * */
    public List<banana> getall();
    /*
     * 删除香蕉
     * */
    public int delete(int bid);
    /*
     * 增加香蕉
     * */
    public int insert(banana b);
    /*
     * 修改香蕉
     * */
    public int update(banana b);
    /*
     * 分页查询全部
     * */
    public List<banana>limit(int index,int i);
    /*
     * 统计页数
     * */
    public int count();
    /*
     * 模糊查询
     * */
    public List<banana>like(String bname);
}

运行结果:

        1.首页界面

        

         2.分页后界面

         3.增加后

         4.模糊查询后

         5.修改界面

 

        6.删除界面 

 本项目全部采用Ajax异步方式完成

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,这是一个典型的前后端分离的例子,我可以给您提供一个简单的示例代码,来帮助您理解如何使用 Vue3 + Vite + Ajax + SpringBoot 实现增删改查功能。 前端使用 Vue3 + Vite + Ajax 实现: 1. 在 Vue3 中,使用 `axios` 或者 `fetch` 进行 AJAX 请求,请求后端 SpringBoot 服务器,获取数据或者提交数据。 2. 在 Vue3 中,使用 `vue-router` 进行 SPA 单页应用的路由控制,实现前端页面的跳转。 3. 在 Vue3 中,使用 `vuex` 进行状态管理,方便组件之间的数据共享和传递。 下面是一个简单的 Vue3 组件的示例代码: ```vue <template> <div> <h1>用户列表</h1> <table> <thead> <tr> <th>ID</th> <th>用户名</th> <th>邮箱</th> <th>操作</th> </tr> </thead> <tbody> <tr v-for="user in users" :key="user.id"> <td>{{ user.id }}</td> <td>{{ user.username }}</td> <td>{{ user.email }}</td> <td> <button @click="editUser(user)">编辑</button> <button @click="deleteUser(user.id)">删除</button> </td> </tr> </tbody> </table> </div> </template> <script> import axios from 'axios'; export default { name: 'UserList', data() { return { users: [], }; }, methods: { async getUsers() { const response = await axios.get('/api/users'); this.users = response.data; }, async deleteUser(id) { await axios.delete(`/api/users/${id}`); this.getUsers(); }, editUser(user) { // 跳转到编辑用户页面,使用 vue-router this.$router.push(`/users/${user.id}`); }, }, mounted() { this.getUsers(); }, }; </script> ``` 后端使用 SpringBoot 实现: 1. 在 SpringBoot 中,使用 `@RestController` 和 `@RequestMapping` 注解定义 RESTful API 接口,实现增删改查的逻辑。 2. 在 SpringBoot 中,使用 `@Service` 和 `@Repository` 注解定义服务层和数据访问层,实现业务逻辑和数据库操作。 3. 在 SpringBoot 中,使用 `Spring Data JPA` 或者 `MyBatis` 等框架进行数据库操作,简化代码编写。 下面是一个简单的 SpringBoot Controller 的示例代码: ```java @RestController @RequestMapping("/api/users") public class UserController { private final UserService userService; public UserController(UserService userService) { this.userService = userService; } @GetMapping public List<User> listUsers() { return userService.listUsers(); } @PostMapping public void createUser(@RequestBody User user) { userService.createUser(user); } @PutMapping("/{id}") public void updateUser(@PathVariable Long id, @RequestBody User user) { userService.updateUser(id, user); } @DeleteMapping("/{id}") public void deleteUser(@PathVariable Long id) { userService.deleteUser(id); } } ``` 这是一个简单的增删改查的示例代码,您可以根据自己的需要进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Abcdzzr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值