MVC模型和分层模式完成增删改查及模糊查询

注:基于上个文章代码

页面

增加了添加修改和删除的连接

页面布局代码

<html>
<head>
    <title>主页</title>
</head>
<body>
<!--EL表达式是通过$ {}从作用域对象中自动获取数据,如果是对象可以通过.访问其属性-->
<h1>欢迎来自${user.address}的${user.username}来到主页</h1>
<table>
    <a href="addGoods.jsp">添加商品</a>
    <tr>
        <th>商品编号</th>
        <th>商品名称</th>
        <th>商品价格</th>
        <th>商品说明</th>
    </tr>

    <!--items:要遍历的集合元素  var:临时变量-->
    <c:forEach items="${goodsList}" var="goods">
    <tr>
        <td>${goods.gid}</td>
        <td>${goods.gname}</td>
        <td>${goods.price}</td>
        <td>${goods.mark}</td>
        <td>
            <a href="">修改</a>
            <a href="del?gid=${goods.gid}">删除</a>
        </td>
    </tr>
    </c:forEach>
</table>
</body>
</html>

点击添加跳转到添加页面

布局代码

<html>
<head>
    <title>商品信息添加</title>
</head>
<body>
<h2>商品信息录入</h2>
<form action="addGoods" method="post">
    商品名称:<input type="text" value="" name="gname" placeholder="商品名称"></br>
    商品价格:<input type="number" step="0.01" value="" name="price" placeholder="商品价格"></br>
    商品说明:<input type="text" value="" name="mark" placeholder="商品说明"></br>
    <input type="submit" value="提交"></br>
</form>
</body>
</html>

删除为即时命令,会直接发送请求

请求代码

添加页面提交后,会到addGoods地址发送请求

@WebServlet("/addGoods")
public class AddGoods extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");

        Goods goods=new Goods();
        goods.setGname(request.getParameter("gname"));
        goods.setPrice(Double.parseDouble(request.getParameter("price")));
        goods.setMark(request.getParameter("mark"));

        GoodsDao goodsDao=new GoodsDao();
        int row=goodsDao.add(goods);

        if(row>0){
            request.getRequestDispatcher("ServletAllGoods").forward(request,response);
        }else {
            //request.setAttribute("error_msg","添加商品失败");
            request.getRequestDispatcher("error.jsp").forward(request,response);
        }
    }
}

受影响的行数有数据后会再次发送查询请求(刷新)

@WebServlet("/ServletAllGoods")
public class ServletAllGoods extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.设置请求和响应的编码
        request.setCharacterEncoding("utf-8");//设置请求的编码格式为中文
        response.setCharacterEncoding("utf-8");//设置相应的编码格式

        System.out.println("SelectAllGoods...doPost");

        //去查询数据库中商品信息表中的数据
        GoodsDao goodsDao=new GoodsDao();
        List<Goods> goodsList=goodsDao.selectAll();
        System.out.println(goodsList);

        //如何把商品信息传输到页面中进行展示---此处借助HttpSession传输数据
        HttpSession session = request.getSession();//获取HttpSession对象
        //把查询到商品信息集合存储到session对象中,起名字叫做goodsList
        session.setAttribute("goodsList" , goodsList);

        response.sendRedirect("zhuye.jsp"); //指定跳转页面
    }
}

点击删除,会直接发送请求地址

del?gid=${goods.gid}的意思是获取当前点击的id

@WebServlet("/del")
public class DelGoods extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         doPost(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        int gid=Integer.parseInt(request.getParameter("gid"));
        System.out.println(gid);
        //根据id执行数据库的删除
        GoodsDao goodsDao=new GoodsDao();
        int row=goodsDao.deleteById(gid);

        if(row>0){
            request.getRequestDispatcher("ServletAllGoods").forward(request,response);
        }else {
            request.setAttribute("error_msg","删除出现了问题");
            request.getRequestDispatcher("error.jsp").forward(request,response);
        }
    }
}

删除成功后也会刷新该页面

GoodsDao中的数据库代码

package com.chai.dao.impl;

import com.chai.bean.Goods;
import com.chai.util.JDBCUtil;

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

public class GoodsDao {
    private Connection con=null;//数据库连接对象
    private PreparedStatement ps=null;//预处理对象
    private ResultSet rs=null;//结果集对象
    private int row=0;//增删改受影响的行数

    public List<Goods> selectAll(){
        List<Goods> goodslist=new ArrayList<>();
        try {
            con= JDBCUtil.getCon();
            String sql="select * from t_goods";
            ps=con.prepareStatement(sql);
            rs=ps.executeQuery();
            while (rs.next()){
                //把当前数据行的数据取出来,存储到Goods对象中
                Goods goods=new Goods();
                goods.setGid(rs.getInt("gid"));
                goods.setGname(rs.getString("gname"));
                goods.setPrice(rs.getDouble("price"));
                goods.setMark(rs.getString("mark"));

                //把Goods对象存储到集合中
                goodslist.add(goods);
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            JDBCUtil.close(rs,ps,con);
        }

        return goodslist;
    }

    public int add(Goods goods){
        try {
            con= JDBCUtil.getCon();
            String sql="insert  into t_goods(gname,price,mark) values(?,?,?)";
            ps=con.prepareStatement(sql);
            ps.setObject(1,goods.getGname());
            ps.setObject(2,goods.getPrice());
            ps.setObject(3,goods.getMark());
            row=ps.executeUpdate();

        }catch (Exception e){
            e.printStackTrace();
        }finally {
            JDBCUtil.close(ps,con);
        }

        return row;
    }

    public int deleteById(int gid){
        try {
            con= JDBCUtil.getCon();
            //编写sql语句
            String sql="delete from t_goods where gid=?";
            //获取预处理对象
            ps = con.prepareStatement(sql);
            //传参
            ps.setObject(1,gid);
            //执行sql语句
            row= ps.executeUpdate();

        }catch (Exception e){
            e.printStackTrace();
        }finally {
            JDBCUtil.close(ps,con);
        }

        return row;
    }
}

修改的代码分为两部分

第一部分:通过点击修改获取的id来获取这一条数据

获取id

<a href="findById?gid=${goods.gid}">修改</a>

获取数据的数据库操作

public Goods selectById(int gid){
        Goods goods=new Goods();
        List<Goods> goodslist=new ArrayList<>();
        try {
            con= JDBCUtil.getCon();
            String sql="select * from t_goods where gid=?";
            ps=con.prepareStatement(sql);
            ps.setObject(1,gid);
            rs=ps.executeQuery();
            while (rs.next()){
                //把当前数据行的数据取出来,存储到Goods对象中
                goods.setGid(rs.getInt("gid"));
                goods.setGname(rs.getString("gname"));
                goods.setPrice(rs.getDouble("price"));
                goods.setMark(rs.getString("mark"));
                //把Goods对象存储到集合中
                goodslist.add(goods);
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            JDBCUtil.close(rs,ps,con);
        }

        return goods;
    }

查询商品信息成功,存入request域中,然后请求转发到页面展示数据

@WebServlet("/findById")
public class FindById extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        int gid=Integer.parseInt(request.getParameter("gid"));
        //根据gid查询商品信息
        GoodsDao goodsDao=new GoodsDao();
        Goods goods=goodsDao.selectById(gid);
        if (goods!=null){
            //查询商品信息成功,存入request域中,然后请求转发到页面展示数据
            request.setAttribute("goods",goods);
            request.getRequestDispatcher("upda.jsp").forward(request,response);
        }else {
            request.setAttribute("error_msg","修改出了异常!");
            request.getRequestDispatcher("error.jsp").forward(request,response);
        }
    }
}

第二部分:修改数据

修改数据的数据库操作

public int upda(Goods goods){
        try {
            con= JDBCUtil.getCon();
            //编写sql语句
            String sql="update t_goods set gname=?,price=?,mark=?  where gid=?";
            //获取预处理对象
            ps = con.prepareStatement(sql);
            //传参
            ps.setObject(1,goods.getGname());
            ps.setObject(2,goods.getPrice());
            ps.setObject(3,goods.getMark());
            ps.setObject(4,goods.getGid());
            //执行sql语句
            row= ps.executeUpdate();

        }catch (Exception e){
            e.printStackTrace();
        }finally {
            JDBCUtil.close(ps,con);
        }

        return row;
    }

修改页面

<html>
<head>
    <title>修改商品</title>
</head>
<body>
<h2>商品信息修改</h2>
<form action="updateGoods" method="post">
    商品编号:<input type="text" value="${goods.gid}" name="gid" readonly="readonly" placeholder="商品编号"></br>
    商品名称:<input type="text" value="${goods.gname}" name="gname" placeholder="商品名称"></br>
    商品价格:<input type="number" step="0.01" value="${goods.price}" name="price" placeholder="商品价格"></br>
    商品说明:<input type="text" value="${goods.mark}" name="mark" placeholder="商品说明"></br>
    <input type="submit" value="修改"></br>
</form>
</body>
</html>

点击修改后跳转到后台请求

@WebServlet("/updateGoods")
public class UpdateGoods extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");

        //获取表单提交的数据,封装到goods对象中
        Goods goods=new Goods();
        goods.setGid(Integer.parseInt(request.getParameter("gid")));
        goods.setGname(request.getParameter("gname"));
        goods.setPrice(Double.parseDouble(request.getParameter("price")));
        goods.setMark(request.getParameter("mark"));

        System.out.println(goods);

        GoodsDao goodsDao=new GoodsDao();
        int row=goodsDao.upda(goods);

        if(row>0){
            request.getRequestDispatcher("ServletAllGoods").forward(request,response);
        }else {
            request.setAttribute("error_msg","修改出了异常");
            request.getRequestDispatcher("error.jsp").forward(request,response);
        }
    }
}

运行结果

点击修改

获取该id商品信息

修改数据

修改完成

模糊查询

在页面中新增查询功能

<form action="seach" method="post">
    <input type="text" name="keyword" value="">
    <input type="submit" value="搜索">
</form>

在GoodsDao中建立seach模糊查询

public List<Goods> seach(String keyword){
        List<Goods> goodslist=new ArrayList<>();
        try {
            con= JDBCUtil.getCon();
            String sql="select * from t_goods where gname like concat('%',?,'%')";//concat()函数表示字符串的拼接
            ps=con.prepareStatement(sql);
            ps.setObject(1,keyword);
            rs=ps.executeQuery();
            while (rs.next()){
                //把当前数据行的数据取出来,存储到Goods对象中
                Goods goods=new Goods();
                goods.setGid(rs.getInt("gid"));
                goods.setGname(rs.getString("gname"));
                goods.setPrice(rs.getDouble("price"));
                goods.setMark(rs.getString("mark"));

                //把Goods对象存储到集合中
                goodslist.add(goods);
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            JDBCUtil.close(rs,ps,con);
        }

        return goodslist;
    }

点击搜索进行请求

@WebServlet("/seach")
public class Seach extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");

        String keyword=request.getParameter("keyword");
        System.out.println(keyword);
        //执行jdbc模糊查询
        GoodsDao goodsDao=new GoodsDao();
        List<Goods> goodsList=goodsDao.seach(keyword);

        //把模糊查询到的商品信息集合存储到session中
        HttpSession session = request.getSession();
        session.setAttribute("goodsList",goodsList);
        //跳转到主页进行信息显示
        response.sendRedirect("zhuye.jsp");

    }
}

运行

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
MVC(Model-View-Controller)是一种软件架构模式,常用于构建用户界面并处理用户交互的程序。在使用MVC访问MySQL数据库完成增删改查操作时,我们可以遵循以下步骤: 1. 模型(Model)层:模型负责与数据库进行交互,包括建立数据库连接、执行SQL语句以及处理数据库返回的结果。我们可以使用MySQL提供的官方驱动程序或者一些开源框架(如Hibernate、MyBatis)来简化数据库操作。 2. 视图(View)层:视图负责展示数据和接收用户的输入,对于数据库操作的结果,可以通过视图将其展示给用户。在MVC中,视图通常被定义为一些用户界面组件,如网页、移动应用程序的界面等。 3. 控制器(Controller)层:控制器负责接收来自视图层的用户输入,并将其转发给模型层进行相应的数据库操作。控制器还可以对模型层返回的数据进行处理,再将处理后的结果返回给视图层展示给用户。在MVC中,控制器可以看作是模型和视图之间的桥梁。 通过按照上述步骤使用MVC访问MySQL数据库进行增删改查操作,我们可以实现以下功能: - 增加数据:用户在视图层中输入数据,控制器将其传递给模型层对数据库进行增加操作。 - 删除数据:用户在视图层中选择要删除的数据,控制器将其传递给模型层对数据库进行删除操作。 - 修改数据:用户在视图层中选择要修改的数据并输入修改后的内容,控制器将其传递给模型层对数据库进行修改操作。 - 查询数据:用户在视图层中选择相应的查询条件,控制器将其传递给模型层对数据库进行查询操作,并将查询结果返回给视图层展示给用户。 通过使用MVC访问MySQL数据库完成增删改查操作,可以使代码结构更加清晰、可维护性更高,同时也能更好地分离数据层和用户界面层之间的耦合度,提供更好的用户体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

夜未柒

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

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

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

打赏作者

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

抵扣说明:

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

余额充值