• 自定义mvc增删改查


    目录

    一,步骤如下:

    1.将框架打成jar包,然后导入新工程,并且把框架的依赖jar包导入进去

    打成jar包的步骤

    2.将分页标签相关文件,及相关助手类导入

    3.框架的配置文件添加,以及web.xml的配置

    4.完成Book实体类一bookDao的编写

    5.完成通用的增删改方法

    6.完成BookAction

    7.完成mvc.xml的配置

    8.完成前台代码的编写


    一,步骤如下:

    1.将框架打成jar包,然后导入新工程,并且把框架的依赖jar包导入进去

    打成jar包的步骤

     选择file文件后点击下一步

     

     命名完后点击下一步

     

    jar包打出来后将其导入项目即可

    2.将分页标签相关文件,及相关助手类导入

    3.框架的配置文件添加,以及web.xml的配置

    4.完成Book实体类一bookDao的编写

    《代码演示book》

    1. package com.dengxiyan.entity;
    2. public class Book {
    3. private int bid;
    4. private String bname;
    5. private float price;
    6. public int getBid() {
    7. return bid;
    8. }
    9. public void setBid(int bid) {
    10. this.bid = bid;
    11. }
    12. public String getBname() {
    13. return bname;
    14. }
    15. public void setBname(String bname) {
    16. this.bname = bname;
    17. }
    18. public float getPrice() {
    19. return price;
    20. }
    21. public void setPrice(float price) {
    22. this.price = price;
    23. }
    24. public Book() {
    25. // TODO Auto-generated constructor stub
    26. }
    27. public Book(int bid, String bname, float price) {
    28. super();
    29. this.bid = bid;
    30. this.bname = bname;
    31. this.price = price;
    32. }
    33. @Override
    34. public String toString() {
    35. return "Book [bid=" + bid + ", bname=" + bname + ", price=" + price + "]";
    36. }
    37. }

     《代码演示bookDao》
    以下方法既节省代码,更是便捷了程序人员

    1. package com.dengxiyan.dao;
    2. import java.sql.Connection;
    3. import java.sql.PreparedStatement;
    4. import java.sql.SQLException;
    5. import java.util.ArrayList;
    6. import java.util.List;
    7. import com.dengxiyan.entity.Book;
    8. import com.dengxiyan.util.BaseDao;
    9. import com.dengxiyan.util.DBAccess;
    10. import com.dengxiyan.util.PageBean;
    11. import com.dengxiyan.util.StringUtils;
    12. public class BookDao extends BaseDao<Book>{
    13. //查询
    14. public List<Book> list(Book book,PageBean pageBean) throws Exception{
    15. String sql = "select * from tb_book where 1=1 ";
    16. String bname = book.getBname();
    17. if(StringUtils.isNotBlank(bname)) {
    18. sql+= " and bname like '%"+bname+"%'";
    19. }
    20. int bid = book.getBid();
    21. //前台传递到后台,只要传了就有值,没传就是默认值,默认值为0
    22. if(bid!=0) {
    23. sql+= " and bid = "+bid;
    24. }
    25. return super.executeQuery(sql, pageBean, rs ->{
    26. List<Book> ls = new ArrayList<Book>();
    27. try {
    28. while(rs.next()) {
    29. ls.add(new Book(rs.getInt("bid"), rs.getString("bname"), rs.getFloat("price")));
    30. }
    31. } catch (SQLException e) {
    32. e.printStackTrace();
    33. }
    34. return ls;
    35. });
    36. }
    37. //增加
    38. /*public int add(Book b) throws Exception {
    39. Connection con = DBAccess.getConnection();
    40. String sql = "insert into tb_book values(?,?,?)";
    41. PreparedStatement ps = con.prepareStatement(sql);
    42. ps.setObject(1, b.getBid());
    43. ps.setObject(2, b.getBname());
    44. ps.setObject(3, b.getPrice());
    45. return ps.executeUpdate();
    46. }*/
    47. public int add(Book b) throws Exception {
    48. String sql = "insert into tb_book values(?,?,?)";
    49. return super.executeUpdate(sql, b, new String[] {"bid","bname","price"});
    50. }
    51. //删除
    52. /*public int del(Book b) throws Exception {
    53. Connection con = DBAccess.getConnection();
    54. String sql = "delete from tb_book where bid=?";
    55. PreparedStatement ps = con.prepareStatement(sql);
    56. ps.setObject(1, b.getBid());
    57. return ps.executeUpdate();
    58. }*/
    59. public int del(Book b) throws Exception {
    60. String sql = "delete from tb_book where bid=?";
    61. return super.executeUpdate(sql, b, new String[] {"bid"});
    62. }
    63. //修改
    64. /*public int update(Book b) throws Exception {
    65. Connection con = DBAccess.getConnection();
    66. String sql = "update tb_book set bname=?,price=? where bid=?";
    67. PreparedStatement ps = con.prepareStatement(sql);
    68. ps.setObject(1, b.getBname());
    69. ps.setObject(2, b.getPrice());
    70. ps.setObject(3, b.getBid());
    71. return ps.executeUpdate();
    72. }*/
    73. public int update(Book b) throws Exception {
    74. String sql = "update tb_book set bname=?,price=? where bid=?";
    75. return super.executeUpdate(sql, b, new String[] {"bname","price","bid"});
    76. }
    77. }

    5.完成通用的增删改方法

    《代码演示》

    在bookDao里面继承了改类,并实现了以下方法

    1. //将以下代码不一样的提出来作为参数放到方法里,以及对象不能是定死的,所以将它换为泛型
    2. public int executeUpdate(String sql,T t,String [] attrs) throws Exception {
    3. Connection con = DBAccess.getConnection();
    4. PreparedStatement ps = con.prepareStatement(sql);
    5. //将 t 的某一个属性对应的值加到ps对象中
    6. for (int i = 0; i < attrs.length; i++) {
    7. Field f = t.getClass().getDeclaredField(attrs[i]);
    8. f.setAccessible(true);
    9. ps.setObject(i+1, f.get(t));
    10. }
    11. return ps.executeUpdate();
    12. }

    6.完成BookAction

    在book子控制器里调用方法

    《代码演示》

    方法里的返回值为xml配置文件里的name值

    1. package com.dengxiyan.servlet;
    2. import java.util.List;
    3. import javax.servlet.http.HttpServletRequest;
    4. import javax.servlet.http.HttpServletResponse;
    5. import com.dengxiyan.dao.BookDao;
    6. import com.dengxiyan.entity.Book;
    7. import com.dengxiyan.framework.ActionSupport;
    8. import com.dengxiyan.framework.ModelDriven;
    9. import com.dengxiyan.util.PageBean;
    10. public class BookAction extends ActionSupport implements ModelDriven<Book> {
    11. private Book book = new Book();
    12. private BookDao bookDao = new BookDao();
    13. @Override
    14. public Book getModel() {
    15. // TODO Auto-generated method stub
    16. return book;
    17. }
    18. //增加
    19. public String add(HttpServletRequest req, HttpServletResponse resp) {
    20. try {
    21. bookDao.add(book);
    22. } catch (Exception e) {
    23. // TODO Auto-generated catch block
    24. e.printStackTrace();
    25. }
    26. //表示跳到查询界面
    27. return "toList";
    28. }
    29. //删除
    30. public String del(HttpServletRequest req, HttpServletResponse resp) {
    31. try {
    32. bookDao.del(book);
    33. } catch (Exception e) {
    34. // TODO Auto-generated catch block
    35. e.printStackTrace();
    36. }
    37. //表示跳到查询界面
    38. return "toList";
    39. }
    40. //修改
    41. public String update(HttpServletRequest req, HttpServletResponse resp) {
    42. try {
    43. bookDao.update(book);
    44. } catch (Exception e) {
    45. // TODO Auto-generated catch block
    46. e.printStackTrace();
    47. }
    48. //表示跳到查询界面
    49. return "toList";
    50. }
    51. //查询
    52. public String list(HttpServletRequest req, HttpServletResponse resp) {
    53. try {
    54. PageBean pageBean = new PageBean();
    55. //初始化
    56. pageBean.setRequest(req);
    57. List<Book> list = bookDao.list(book,pageBean);
    58. req.setAttribute("list", list);
    59. req.setAttribute("pageBean", pageBean);
    60. } catch (Exception e) {
    61. // TODO Auto-generated catch block
    62. e.printStackTrace();
    63. }
    64. //执行查询
    65. return "list";
    66. }
    67. //跳转到新增或修改界面
    68. public String preEdit(HttpServletRequest req, HttpServletResponse resp) {
    69. try {
    70. int bid = book.getBid();
    71. if(bid != 0) {
    72. //传递bid到后台,且只能查出一条数据,那么list集合里只有一条数据
    73. List<Book> list = bookDao.list(book, null);
    74. //id对应的值list.get(0)
    75. req.setAttribute("b", list.get(0));
    76. }
    77. } catch (Exception e) {
    78. // TODO Auto-generated catch block
    79. e.printStackTrace();
    80. }
    81. //表示跳到查询界面
    82. return "toEdit";
    83. }
    84. }

    xml配置文件

    提示:true是重定向,false是转发

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <config>
    3. <action path="/book" type="com.dengxiyan.servlet.BookAction">
    4. <forward name="list" path="/booklist.jsp" redirect="false" />
    5. <forward name="toEdit" path="/bookEdit.jsp" redirect="false" />
    6. <forward name="toList" path="/book.action?methodName=list" redirect="true" />
    7. </action>
    8. </config>

    7.完成mvc.xml的配置

    8.完成前台代码的编写

    1. <%@ page language="java" contentType="text/html; charset=UTF-8"
    2. pageEncoding="UTF-8"%>
    3. <%@taglib uri="http://jsp.veryedu.cn" prefix="z"%>
    4. <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    6. <html>
    7. <head>
    8. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    9. <link
    10. href="css/bootstrap.css"
    11. rel="stylesheet">
    12. <script
    13. src="js/bootstrap.js"></script>
    14. <title>书籍列表</title>
    15. <style type="text/css">
    16. .page-item input {
    17. padding: 0;
    18. width: 40px;
    19. height: 100%;
    20. text-align: center;
    21. margin: 0 6px;
    22. }
    23. .page-item input, .page-item b {
    24. line-height: 38px;
    25. float: left;
    26. font-weight: 400;
    27. }
    28. .page-item.go-input {
    29. margin: 0 10px;
    30. }
    31. </style>
    32. </head>
    33. <body>
    34. <form class="form-inline"
    35. action="${pageContext.request.contextPath}/book.action?methodName=list" method="post">
    36. <div class="form-group mb-2">
    37. <input type="text" class="form-control-plaintext" name="bname"
    38. placeholder="请输入书籍名称">
    39. </div>
    40. <button type="submit" class="btn btn-primary mb-2">查询</button>&nbsp;
    41. <a type="submit" class="btn btn-primary mb-2" href="${pageContext.request.contextPath }/book.action?methodName=preEdit" method="post">增加</a>
    42. </form>
    43. <table class="table table-striped">
    44. <thead>
    45. <tr>
    46. <th scope="col">书籍ID</th>
    47. <th scope="col">书籍名</th>
    48. <th scope="col">价格</th>
    49. <th scope="col">操作</th>
    50. </tr>
    51. </thead>
    52. <tbody>
    53. <c:forEach items="${list}" var="b">
    54. <tr>
    55. <td>${b.bid}</td>
    56. <td>${b.bname}</td>
    57. <td>${b.price}</td>
    58. <td>
    59. <a href="${pageContext.request.contextPath }/book.action?methodName=preEdit&bid=${b.bid}" method="post">编辑</a>
    60. <a href="${pageContext.request.contextPath }/book.action?methodName=del&bid=${b.bid}" method="post">删除</a>
    61. </td>
    62. </tr>
    63. </c:forEach>
    64. </tbody>
    65. </table>
    66. <z:page pagebean="${pageBean}"></z:page>
    67. </body>
    68. </html>

     增加和修改的界面,在action里面判断一下如果是增加就跳增加,不是则跳修改

    1. <%@ page language="java" contentType="text/html; charset=UTF-8"
    2. pageEncoding="UTF-8"%>
    3. <!DOCTYPE html>
    4. <html>
    5. <head>
    6. <meta charset="UTF-8">
    7. <title>Insert title here</title>
    8. </head>
    9. <body>
    10. <form action="${pageContext.request.contextPath }/book.action?methodName=${empty b ? 'add' : 'update'}" method="post">
    11. bid:<input type="text" name="bid" value="${b.bid}"><br>
    12. bname:<input type="text" name="bname" value="${b.bname}"><br>
    13. price:<input type="text" name="price" value="${b.price}"><br>
    14. <input type="submit">
    15. </form>
    16. </body>
    17. </html>

    效果图如下

     

     

    修改界面 

     

    模糊查询

     

     

    提示:当效果出不来时请尝试手动输入地址栏  

  • 相关阅读:
    最新Java面试题3【2024中级】
    el-tab-pane遇到的问题记录闲谈
    电子电气架构 --- 关于DoIP的一些闲思 下
    计算机毕业设计ssm+vue基本微信小程序的个人健康管理系统
    list的用法
    Node.js精进(4)——事件触发器
    udp通信socket关闭后,缓存不清空
    java.lang.UnsupportedOperationException 关于Arrays.asList问题解决
    某股份制银行容器云平台建设实践经验
    python 2018全国自学考试第2章 第6题-other人的共识也是共识,等着下班期间重新设计一下简单的题
  • 原文地址:https://blog.csdn.net/weixin_66202611/article/details/125517720