基于Sevlet+JSP+JDBC+jQuery实现单页面的CURD

做为对单页面的学习和后期框架的应用来说,掌握基本(原始)的ajax方式实现CRUD尤为重要,做为一个教学案例希望对读者(尤其是初学者)希望能够起到一个抛砖引玉的作用,有不对的地方,还请多多批评。

页面效果:

基于Sevlet+JSP+JDBC+jQuery实现单页面的CURD

 项目结构:

基于Sevlet+JSP+JDBC+jQuery实现单页面的CURD

数据库:

基于Sevlet+JSP+JDBC+jQuery实现单页面的CURD

DAO:

public interface IBookDao {

     String  FIND_ALL="SELECT * FROM t_book";
     String ADD_BOOK="INSERT INTO t_book(title,author,price) VALUES(?,?,?)";
     String UPDATE_BOOK="UPDATE t_book SET title=?,author=?,price=? WHERE id=?";
     String FIND_BOOK="SELECT * FROM t_book WHERE id=?";
     String DELETE_BOOK="DELETE FROM t_book WHERE id=?";

     List<Book> findAll();

     int add(Book book);

     int update(Book book);

     Book findById(int id);

     int delete(int id);
}

 DAO实现:

public class BookDao implements IBookDao {
    @Override
    public List<Book> findAll() {
        return BaseDao.findAll(FIND_ALL,Book.class);
    }
    @Override
    public int add(Book book) {
        return BaseDao.executeCommand(ADD_BOOK,book.getTitle(),book.getAuthor(),book.getPrice());
    }
    @Override
    public int update(Book book) {
        return BaseDao.executeCommand(UPDATE_BOOK,book.getTitle(),book.getAuthor(),book.getPrice(),book.getId());
    }
    @Override
    public Book findById(int id) {
        return BaseDao.findByObject(FIND_BOOK,Book.class,id);
    }
    @Override
    public int delete(int id) {
        return BaseDao.executeCommand(DELETE_BOOK,id);
    }
}

 Service:

public class BookService {
     private final IBookDao bookDao  = new BookDao();

     public List<Book> findAll(){//传递
         return this.bookDao.findAll();
     }


    public boolean save(Book book) {
        System.out.println(".................."+book);
          if(book.getId()==null || book.getId()==0){
              return  this.bookDao.add(book)==1;
          }else{
              return  this.bookDao.update(book)==1;
          }
    }

    public Book findById(int id) {
         return this.bookDao.findById(id);
    }

    public boolean delete(int id){
         return this.bookDao.delete(id)==1;
    }
}

 Servlet:

@WebServlet(urlPatterns = {"/books","/save","/findById","/delete"})
public class BookAction extends HttpServlet {
      private final BookService bookService =new BookService();
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            req.setCharacterEncoding("utf-8");
            resp.setContentType("text/html;charset=utf-8");
            String url = req.getServletPath();
        System.out.println(url);
        switch (url){
            case "/books": this.books(req,resp);break;
            case "/save": this.save(req,resp); break;
            case "/findById": this.findById(req,resp);break;
            case "/delete":this.delete(req,resp);break;
        }
    }

    private void books(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
           PrintWriter out = resp.getWriter();
           out.print(JSON.toJSON(this.bookService.findAll()));
           out.close();
    }
    private void save(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Map map= req.getParameterMap();
        Book book=new Book();
        try {
            BeanUtils.populate(book,map);
            PrintWriter out = resp.getWriter();
            if(this.bookService.save(book)){
                  out.print(true);
            }else{
                out.print(false);
            }
            out.close();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

    }
    private void findById(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
             String sid=req.getParameter("id");
             int id=Integer.parseInt(sid);
             PrintWriter out = resp.getWriter();
             out.print(JSON.toJSON(this.bookService.findById(id)));
             out.close();
    }
    private void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String sid=req.getParameter("id");
        int id=Integer.parseInt(sid);
        PrintWriter out = resp.getWriter();
        out.print(JSON.toJSON(this.bookService.delete(id)));
        out.close();
    }

}

前台jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@include file="inc.jsp"%>
<html>
  <head>
    <title>单页面CRUD</title>
    <script src="js/book.js"></script>
  </head>
  <body>
       <div class="container">
             <table class="table table-bordered table-hover">

             </table>

            <div id="save">
                 <form method="post">
                    <input type="hidden" name="id"><br>
                    书名:<input type="text" name="title"><br>
                    作者:<input type="text" name="author"><br>
                    价格:<input type="text" name="price"><br>
                     <button class="btn-success">保存</button>
                 </form>
            </div>
       </div>
  </body>
</html>

前台js:

$(function () {
    $("#save").hide();//隐藏保存的div
    $.get(
        "books",
        function (obj) {
            //alert(typeof (obj));
            console.log(obj);//保证是集合
            $("table").append("<tr><td>编号</td><td>书名</td><td>作者</td><td>价格</td><td><button class='btn-info'>添加</button></td></tr>");
            for(var i in obj){
                $("table").append("<tr><td>"+obj[i].id+"</td><td>"+obj[i].title+
                    "</td><td>"+obj[i].author+"</td><td>"+obj[i].price+
                    "</td><td><button class='btn-warning' value='"+obj[i].id+"'>删除</button><button class='btn-primary' value='"+obj[i].id+"'>修改</button></td></tr>");
            }
            //添加
            $(".btn-info").click(function () {
                $("#save").fadeIn(2000);
            })
            //删除
            $(".btn-warning").click(function () {
                alert($(this).val());
                if(confirm("确认吗?")){
                    $.get(
                        "delete?id="+$(this).val(),
                        function (obj) {
                            if(obj){
                                alert("OK");
                                location.reload();
                            }else{
                                alert("Sorry");
                            }
                        },"json"
                    )
                }
            })
            //修改的回显
            $(".btn-primary").click(function () {
                alert($(this).val());
                $.get(
                    "findById",
                    {id:$(this).val()},
                    function (obj) {
                        console.log(obj);
                        $("#save").fadeIn(2000);//显示修改的表单
                        //将各个属性的值回显到表单中
                        $("[name='id']").val(obj.id);//回显id
                        $("[name='title']").val(obj.title);//回显书名
                        $("[name='author']").val(obj.author);//回显作者
                        $("[name='price']").val(obj.price);//回显价格
                    },"json"
                )
            })
            //保存
            $(".btn-success").click(function () {
                $.getJSON(
                    "save",
                    $("form").serialize(),//序列化表单
                    function (obj) {
                        if(obj){
                            alert("成功!");
                            location.reload();
                        }else{
                            alert("对不起,失败了!");
                        }
                    }
                )
            })
        },"json"
    )
})

上一篇:函数参数的封装问题


下一篇:mysql mybatis批量CURD操作