前言:此项目是前段时间学习自视频https://www.bilibili.com/video/BV1RE41127rv
如今已过多日,为了再次回顾,便写下此文,与大家一起分享,此项目很有代表性,也是一个非常适合整合SSM的入门友好型项目
一、环境与配置
因环境配置相对繁琐,而且复用性也强,因此单独抽成了一篇文章
可参考之前文章:【可复用——笔记】SSM框架搭建(骨架)
二、项目编写
1、数据库部分
2、Java后端部分
(1)POJO实体类
实体类的属性要与数据库表中的字段一一对应,从而避免后期需要通过配置来手动使其一一对应的麻烦
(2)Dao层
1、编写Mapper接口,之后用Mapper.xml实现对应接口方法的SQL语句,从而生成Mapper接口的实现方法,与数据库进行信息交换
2、Mapper.xml,按Mapper类中的接口信息,来编写每个接口方法与数据库信息交互的对应SQL语句(通过标签的id属性对应接口方法名),注意 parameterType属性与resultType属性在不同标签中或是不同接口方法的实现中的应用
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zlc.dao.BookMapper">
<select id="queryBookById" resultType="book">
SELECT bookId, bookName, bookCount, detail
FROM book
WHERE bookId = #{bookId}
</select>
<select id="queryAllBook" resultType="book">
SELECT bookId, bookName, bookCount, detail
FROM book
</select>
<insert id="addBook" parameterType="book">
INSERT INTO book (bookName, bookCount, detail)
VALUES (#{bookName}, #{bookCount}, #{detail})
</insert>
<delete id="deleteBookById" parameterType="int">
DELETE FROM book
WHERE bookId = #{bookId}
</delete>
<update id="updateBook" parameterType="book">
UPDATE book
SET bookName = #{bookName}, bookCount = #{bookCount}, detail = #{detail}
WHERE bookId = #{bookId}
</update>
<select id="queryBookByName" parameterType="string" resultType="book">
SELECT bookName, bookCount, detail
FROM book
WHERE bookName = #{bookName}
</select>
</mapper>
(3)Service层
1、编写Service层接口,Service层位于MVC三层架构的中间部分,向下利用Dao层提供的接口实现方法,向上又为Controller层提供服务
(注:下图中,增加,删除,更新一本书的返回值也可以是boolean型的变量,标识是否操作成功(当然也得看事务提交是否配置成功))
2、编写Service层接口的实现类,Service层要利用Dao层的实现类去调用方法与数据库进行信息交互
(4)Controller层
1、编写Controller层的控制类,Controller层首先将请求进行分类(当然,下图中用更加具体的注解,如@GetMapping,@PostMapping或@DeleteMapping等是更好的选择),一个请求对应一个方法,并利用Service层提供的接口方法的实现来进行对应操作
3、JSP前台部分 + 各功能详解
(1)书籍展示
从启动 Tomcat 后的第一个页面介绍起
如下是 index.jsp 页面
上图的蓝色超链接的编写如下,${pageContext.request.contextPath}是JSP取得绝对路径的方法,等价于<%=request.getContextPath()%> ,也就是取出部署的应用程序名或者是当前的项目名称
从而再拼接/book/allBook请求,传给Controller层的控制器,实现list方法的调用,并调用Service层的服务,将所有数据的数据从数据库中返回
上图中的所有书籍的数据信息装入model中,使得前台jsp页面可以取出model中的属性,从而得到后台查询出的书籍信息
页面显示如下
(2)书籍查询
输入书籍名称,即可进行书籍查询操作
查无此书时,也会提示错误信息
右侧书籍查询表单的编写如下,
对应Controller层的响应方法如下,也是调用Service层的方法,并利用model进行键值的传递,注意最后是用请求转发的方式,而此处不能用重定向的方式,否则相当于又请求了一次/allBook,将全部书籍装入model的list属性对应值中,即方法没有发挥作用,这种情况要避免
(2)书籍更改
点击没本书后的更改操作
更改链接的编写如下,此处先用传统方式,而之后用 RESTful 风格再编写删除操作的请求
可跳转到 updateBook.jsp 页面,请求中也附带所更改书籍的id,可重新定义书籍的信息(id除外)
跳转到此 jsp 页面对应Controller层的请求如下,并将此书籍信息查出,加入model中,便于前台对书籍当前信息的显示,以及在此基础上的更改
刚跳转过来后,text框中之所以会显示当前书籍的信息,是因为已传递了文本框的默认value值
更改完信息后,提交表单
处理请求,并重定向到书籍展示页面,发起book/allBook请求,查询全部书籍,从而刷新为当前最新的书籍信息情况
(3)书籍添加
点击新增
此链接的编写如下
此请求处理中,只进行视图的跳转
跳转到新增书籍页
上图表单的请求如下
处理新增书籍的表单的请求,将书籍添加入数据库book表后,便重定向页面到书籍展示页
添加成功
(4)书籍删除
点击每个书籍行最后的删除标签即可在数据库中删除此书籍
此处,用 RESTful 风格传递请求
处理删除书籍的表单的请求,将书籍从数据库book表中删除后,便重定向页面到书籍展示页
删除成功
转载:https://blog.csdn.net/m0_46360532/article/details/115506122