当前位置:   article > 正文

springmvc实现增删改查(创建一个BookStore数据库)完整开源代码_spring mvc bookstore

spring mvc bookstore

 

目录

要求:

创建工程:

 大致思路:

配置spring配置文件:

 配置webapp下WEB-INF下的web.xml文件:

现在开始正式的写代码:

dao层:

 service层:

 controller层:

整个项目源代码地址:github仓库地址


效果图:

55da6654ad2f44388c5d802d9be4ef81.gif

 

要求:

在数据库创建一个名为BookStore的数据库,在BookStore数据库中添加一个BookInfo表用于存储图书信息表,再往表里面添加一些测试数据、前端页面以表格形式显示所有图书信息、并完成增加添加书籍、修改书籍、删除书籍的功能。
技术要求:

1.必须用JSP和SpringMVC

⒉数据库连接和请求必须要SpringJDBC

创建工程:

 我的完整项目结构:

93825d768252449e95cd54dc3f5f2e41.pnge5734923534f4709845cfddf58c92bff.png

 大致思路:

点击file,new一个module模板maven,联网加载好,在main文件夹中添加Java包,在Java包中添加一个package我这里叫com.c202001090145.oyh,继续在com.c202001090145.oyh中添加三个同级package,dao,service,controller,再加一个对象类包pojo,主要放置一些对象类。在resources中添加一个spring配置文件。在pop.xml中导入springMVC所需的坐标,因为我们是要开发一个web页面的需要用到servlet,所以先把我们需要的坐标导入。导入坐标后一层一层来,从dao层--->service---->controller.这就是mvc三层结构。

配置spring配置文件:

在resources中new一个XML Configuration File,选择里面的Spring Config类型。我给它取名叫做spring_servlet。

967903c2e21848528008b9bf7420a665.png

 接下来直接把我的代码复制进去,我会讲每一个配置有什么用滴!

spring_servlet.xml代码:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
  6. <context:component-scan base-package="com.c202001090145.oyh"/>
  7. <!-- 用bean来创建一个类 视图解析器-->
  8. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  9. <!-- 为这个类注入两个属性,一个前缀值,一个后缀。以/WEB-INF/jsp/login.jsp为例-->
  10. <property name="prefix" value="/WEB-INF/jsp/"/>
  11. <property name="suffix" value=".jsp"/>
  12. </bean>
  13. <bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource">
  14. <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
  15. <property name="url" value="jdbc:mysql://localhost:3306/bookstore?characterEncoding=utf8&amp;serverTimezone=UTC"/>
  16. <!-- 数据库用户名和密码-->
  17. <property name="username" value="root"/>
  18. <property name="password" value="1234"/>
  19. </bean>
  20. <bean class="org.springframework.jdbc.core.JdbcTemplate" id="jdbcTemplate">
  21. <property name="dataSource" ref="dataSource"/>
  22. </bean>
  23. </beans>

 第一个bean叫做视图解析器,用于简化Jsp请求路径,name=prefix是前缀的意思,就是你请求的路径前缀是什么,比如我的jsp文件在/WEB-INF/jsp/addbook.jsp,那么我们只需要写/WEB-INF/jsp/这个目录就行,后缀就是.jsp,那么你使用的时候就是直接给一个文件名就好了,后面具体应用会讲到。

第二个bean是与mysql数据库有关,你使用时只需要将3306端口号后面的bookstore改成你自己需要使用的数据库名字就好了

 <property name="url" value="jdbc:mysql://localhost:3306/bookstore?characterEncoding=utf8&amp;serverTimezone=UTC"/>

下面的两行就是你的数据库名和密码,改成你自己的就好了,其他的不用动

 配置webapp下WEB-INF下的web.xml文件:

由于我们要使用mysql链接数据库,所以原来的2.几版本就太低了,我们需要换成4.+版本的 ,只需要复制就好了,其他不用动,这个文件会有完整代码的别急。就是告诉你给你看看~~

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5. version="4.0">
  6. </web-app>

因为我们是要进行网页请求的,所以我们必须先配好请求拦截器:不先配好的话,就会找不到路径。就像下面那个报错一样

遇到的第一个bug:

报这个错误是因为我的spring配置文件spring_servlet.xml还没有被加载,所以注解@RequestMapping("addbook")没有生效,自然就不会将addbook.jsp的内容映射到addbook的地址去,所以找不到,当然注解默认不生效,必须在spring容器配置文件中加上下面那段话才会生效。

 <context:component-scan base-package="com.hnucm.springmvc"/>

910adc0ba6a141799b79dbb487f407c3.png 所以我们为了让spring配置文件能够被加载,我们可以web.xml中进行请求的拦截,这里就相当于vue中的前置路由拦截器,拦截之后我们可以对其进行一些处理,拦截后我们将其交给servlet进行处理,它会生成一个实例化对象,实例化对象会加载它的参数,所以我们可以把spring容器的配置项地址作为参数进行加载。这样页面就可以被映射出来啦。

c6b25b88cfe246868ca9292a54d1f9bc.png

完整代码:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5. version="4.0">
  6. <!-- Tomcat启动时该文家会加载-->
  7. <servlet>
  8. <!-- 这个名字要和下面那个一致-->
  9. <servlet-name>springmvc</servlet-name>
  10. <!-- 这个类是springMVc框架提供的继承servlet的类-->
  11. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  12. <!-- 拦截之后,就会实例化一个对象,实例化时会加载它的它的参数,-->
  13. <init-param>
  14. <param-name>contextConfigLocation</param-name>
  15. <!-- 这个地址加载spring容器配置文件,又因为spring容器中开启了注解,所以注解也会生效 -->
  16. <param-value>classpath:spring_servlet.xml</param-value>
  17. </init-param>
  18. </servlet>
  19. <!-- 拦截下面的请求后交给上面的sevlet处理-->
  20. <servlet-mapping>
  21. <!-- 这里这个名字可以随便取-->
  22. <servlet-name>springmvc</servlet-name>
  23. <!-- 下面的/表示拦截所有的带/的请求-->
  24. <url-pattern>/</url-pattern>
  25. </servlet-mapping>
  26. </web-app>

现在开始正式的写代码:

下面这句话真的超级重要:

mvc三层结构我们都是先从dao写起,之后在写service层,最后写controller层。但是代码执行时是先controller层转发请求调用service层,然后再service调用dao层。这个就是思路!!!!

我就带着写一个更新的例子哈,后面思路都是一样的,但是完整代码我会给出!!

dao层:

先在dao层new一个接口类,名字叫做BookDao。在里面定义一个方法叫addBooks,他有两个参数,一个是price和name,注意这个是我在数据库中定义的字段名,我的数据库中还定义了一个id,它是主键并且我设置成了自增长我们不用管它。

bf08b06faf804dd0a942934d31148cec.png

 继续在dao层中new一个接口实现类,就叫bookDaoImpl.在这个类里面继承BookDao这个接口,我们是在dao层中操作数据库的,所以需要使用spring封装好的一个类JdbcTemplate,他可以更加方便的我们操作数据库。

在这里需要注意的是因为我们操作数据库了,所以你们一定要将数据库改成你们自己的,并且这里你们也要将insert into bookinfo values......中的bookinfo改成你们自己数据库中的表名才可以。

 service层:

写完dao层写service层,在service文件夹下new一个BookService接口类。在这个接口类中定义一个方法,调用该方法就可以调用dao层的数据库,所以这里建议这个方法名直接使用dao层接口中的方法名,我们一在service中调用这个方法就可以知道这方法将会调用dao接口中的哪个方法,所以我们直接将dao层中的BookDao接口类中的

public void addBooks(float price,String name);

直接复制到service层中的BookService接口类中去

536baa2dc9ab4fb4b372822020ca9251.png

我们可以上下对比两个类中的方法,一模一样吧

 继续在service层中new一个接口实现类BookServiceImpl,在该类中继承BookService接口类,继承类自然也要继承类里面的方法,在这里定义一个BookDao 类,因为待会接口调用会用到,我们使用@Autowired实现自动注入对象,就不用new一个对象了,在这里面调用BookDao中的方法

dcecc6a17aeb440e9449b54621f688cb.png

 controller层:

写完service层就继续写controller层,在controller包中new一个bookInfoController类,在这个类中进行请求的转发和调用service 类。

8f5ce8b2ced44963b9435969f42ac510.png

定义一个BookService类,因为待会会调用该类里面的 方法,使用@Autowired实现自动注入,定义一个addbook方法实现地址的映射,可以将addbook.jsp页面的内容映射到带/addbook的地址中去。这个return“addbook”就是addbook.jsp。就是在这里使用了前面讲到的 ’第一个bean叫做视图解析器’     因为这个页面的完整地址是webapp开始到addbook.jsp结束的文件地址,视图解析器就帮我们把前缀和后缀省略了。

addbook.jsp完整代码:

  1. <%--
  2. Created by IntelliJ IDEA.
  3. User: Admin
  4. Date: 2022/9/30
  5. Time: 23:38
  6. To change this template use File | Settings | File Templates.
  7. --%>
  8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  9. <html>
  10. <head>
  11. <title>Title</title>
  12. </head>
  13. <body>
  14. <h1>添加书籍数据</h1>
  15. <form action="http://localhost:8080/MyBookStore_war/addbookcommit" method="post">
  16. <div>书籍名字:<input name="name"></div>
  17. <div>书籍价格:<input name="price"></div>
  18. <input type="submit" value="提交">
  19. </form>
  20. </body>
  21. </html>

然后@RequestMapping的作用是;作用就是映射URL路径,将http的请求地址映射到控制器(controller)类的处理方法上。@RequestMapping("addbook")的作用就是将addbook的请求地址映射到addbook这个方法中的return到的文件地址去。

下面那个@RequestMapping("addbookcommit")中的addbookcommit是我们addbook.jsp页面中写了一个表单,这个表单提交的地址就是http://localhost:8080/MyBookStore_war/addbookcommit。因此可以将其进行拦截处理,然后在这个方法里面调用service层的方法。所以就行成了controller层->service层->dao层。又因为dao层操作数据库所以我们就操作了数据库。

dao层bookInfoController完整代码:
  1. package com.c202001090145.oyh.controller;
  2. import com.c202001090145.oyh.pojo.Book;
  3. import com.c202001090145.oyh.service.BookService;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Controller;
  6. import org.springframework.ui.Model;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. @Controller
  9. public class bookInfoController {
  10. @Autowired
  11. BookService bookService;
  12. @RequestMapping("addbook")
  13. public String addbook(){
  14. return "addbook";
  15. }
  16. @RequestMapping("addbookcommit")
  17. public String addbookcommit(Model model, float price, String name){
  18. bookService.addBooks(price,name);
  19. return "forward:/booklist";
  20. }
  21. @RequestMapping("booklist")
  22. public String booklist(Model model){
  23. model.addAttribute("bookList",bookService.getAllBooks());
  24. return "booklist";
  25. }
  26. @RequestMapping("updatebook")
  27. public String updatebook(Model model,Book book){
  28. model.addAttribute(book);
  29. return "updatebook";
  30. }
  31. @RequestMapping("updatebookcommit")
  32. public String updatebookcommit(Model model,Book book){
  33. bookService.updatebook(book);
  34. return "forward:/booklist";
  35. }
  36. @RequestMapping("delete")
  37. public String delete(int id){
  38. bookService.delete(id);
  39. return "forward:/booklist";
  40. }
  41. }
成功后就将返回booklist.jsp页面。但是我们写到这里是还没有写booklist.jsp页面的,这个页面就是显示数据库所有的 书籍信息,我们没有写写个请求就会先报错,但是没关系,写到这里的我们的数据库添加已经完成了。你可以进入数据库进行查看。后面的查询,删除,更新也和这个差不多,都是一样的步骤,关键还是逻辑和思路。

整个项目源代码地址:
github仓库地址

也可以在我的csdn资源中下载

 

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号