图书管理(SSM)

一:前言

这仅仅是个小demo,体验了一把SSM配置地狱,就简单的实现CRUD

二:相关技术

Mybatis+Spring+SpringMVC+Mysql+Maven+Tomcat

三:功能展示

1:查询

在这里插入图片描述

2:增加

在这里插入图片描述

3:删除

在这里插入图片描述

4:修改

在这里插入图片描述

四:上码

1:导入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>ssmbuild</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><!--Junit--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><!--数据库驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><!-- 数据库连接池 --><dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5.2</version></dependency><!--Servlet - JSP --><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.2</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!--Mybatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.2</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.2</version></dependency><!--Spring--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.1.9.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.1.9.RELEASE</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.10</version></dependency></dependencies></project>

2:Maven的资源过滤

zaipom.xml中进行添加

 <!--资源过滤--><build><resources><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource></resources></build>

3:基本结构框架

在这里插入图片描述

(1):Dao层

a:BookMapper

package com.wyj.Dao;import com.wyj.Pojo.Books;import java.util.List;public interface BookMapper {//增加一本书int addBook(Books books);//根据id删除一个bookint deleteBook(int id);//更新bookint updateBook(Books books);//根据id查询 返回一个BookBooks queryBookById(int id);//查询全部Book 返回list集合List<Books> queryBooks();List<Books> queryBooksById(int id);}

b:BookMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wyj.Dao.BookMapper"><insert id="addBook" parameterType="books">insert into booksvalues(#{id},#{bookName},#{bookCounts},#{detail})</insert><delete id="deleteBook" parameterType="_int">delete from bookswhere id = #{id}</delete><update id="updateBook" parameterType="books">update books<set><if test="bookName != null">bookName = #{bookName},</if><if test="bookCounts != null">bookCounts = #{bookCounts},</if><if test="detail != null">detail = #{detail},</if></set>where id = #{id}</update><select id="queryBookById" parameterType="_int" resultType="books">select * from books where id = #{id}</select><select id="queryBooks" resultType="books">select * from books</select><select id="queryBooksById" parameterType="_int" resultType="books">select * from books where id = #{id}</select></mapper>

(2):PoJo

package com.wyj.Pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Books {private int id;private String bookName;private int bookCounts;private String detail;
}

(3):Service层

业务层 调用dao层完成实际的业务

a:bookService

package com.wyj.Service;import com.wyj.Pojo.Books;import java.util.List;public interface BookService {//增加一本书int addBook(Books books);//根据id删除一个bookint deleteBook(int id);//更新bookint updateBook(Books books);//根据id查询 返回一个BookBooks queryBookById(int id);//查询全部Book 返回list集合List<Books> queryBooks();List<Books> queryBooksById(int id);
}

b:bookServiceImpl

package com.wyj.Service;import com.wyj.Dao.BookMapper;
import com.wyj.Pojo.Books;import java.util.List;public class BookServiceImp implements BookService{private BookMapper bookMapper;public void setBookMapper(BookMapper bookMapper) {this.bookMapper = bookMapper;}@Overridepublic int addBook(Books books) {return bookMapper.addBook(books);}@Overridepublic int deleteBook(int id) {return bookMapper.deleteBook(id);}@Overridepublic int updateBook(Books books) {return bookMapper.updateBook(books);}@Overridepublic Books queryBookById(int id) {return bookMapper.queryBookById(id);}@Overridepublic List<Books> queryBooks() {return bookMapper.queryBooks();}@Overridepublic List<Books> queryBooksById(int id) {return bookMapper.queryBooksById(id);}
}

(4):Controller层

Servlet在这里填写 响应前端的请求

package com.wyj.Controller;import com.wyj.Pojo.Books;
import com.wyj.Service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;import java.util.List;@Controller
@RequestMapping("/book")
public class BookController {@Autowired//这个是属性注入当中 自动装配 他仅仅限于如果这个属性是一个类的话@Qualifier("BookServiceImpl")//如果其注册的bean 有多个的话,其可以指定其中的一个beanprivate BookService bookService;@RequestMapping("/allBook")public String listBook(Model model) {List<Books> list = bookService.queryBooks();model.addAttribute("list",list);return "allBook";}//转发到addBook.jsp这个页面去添加书籍@RequestMapping("/toAddBook")public String toAddPaper() {return "addBook";}//当提交表单后 我们将这个页面重定向到 全部的书籍的页面//这里的参数 books 我们是从表单提交的时候(填写的参数)然后的话我们的提交方式//是post 所以参数看不见 ,但是我们仍可以从url中将参数获取到@RequestMapping("/addBook")public String addBooker(Books books) {bookService.addBook(books);return "redirect:/book/allBook";}//修改书籍的请求(我们点击修改的操作的时候,在哪一行点击修改 我们就能获取到哪一行的//id信息,即可获取到这本书books;(我们是在url一行中可以获取到 id ,然后这个id参数我们就可以获取到// <a href="${pageContext.request.contextPath}/book/toUpdateBook?id=${book.id}">修改</a>@RequestMapping("/toUpdateBook")public String toUpdateBook(Integer id, Model model) {Books books = bookService.queryBookById(id);model.addAttribute("Book",books);//我们向updateBook.jsp中的参数Book进行赋值return "updateBook";}//修改表单的提交  提交到这个请求中进行修改@RequestMapping("/updateBook")public String updateBook(Books books,Model model) {System.out.println(books);bookService.updateBook(books);System.out.println(books);Books books1 = bookService.queryBookById(books.getId());model.addAttribute("Book",books);return "redirect:/book/allBook";}//删除一个页面(这个参数id 我们从前端请求的jsp页面中的url 我们可以获取到id)@RequestMapping("/deleteBook")public String deleteBook(Integer id) {bookService.deleteBook(id);return "redirect:/book/allBook";}//根据书籍编号查询一本书籍的信息@RequestMapping("/CheckBookById")public String CheckBook(Integer id,Model model) {List<Books> list = bookService.queryBooksById(id);model.addAttribute("list",list);return "allBook";}}

4:配置文件

(1):连接数据库

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/smbuild?useSSL=true&useUnicode=true&characterEncoding=UTF-8
jdbc.username=
jdbc.password=

在这里插入图片描述

(2):Mybatis-Config的配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><typeAliases><package name="com.wyj.Pojo"/></typeAliases>//每写完一个Mapper要在这里进行注册一下<mappers><mapper class="com.wyj.Dao.BookMapper"/></mappers></configuration>

(3):整合spring和mybatis

a:spring-dao.xml

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.2.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.2.xsd"><!--配置整合Mybatis--><!--1.关联数据库文件--><context:property-placeholder location="classpath:database.properties"/><!--2.数据库连接池--><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><!--配置连接池属性--><property name="driverClass" value="${jdbc.driver}"/><property name="jdbcUrl" value="${jdbc.url}"/><property name="user" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/><!--c3p0的私有属性--><property name="maxPoolSize" value="30"/><property name="minPoolSize" value="10"/><!--关闭连接后不自动 commit--><property name="autoCommitOnClose" value="false"/><!-- 获取连接超时时间 --><property name="checkoutTimeout" value="10000"/><!-- 当获取连接失败重试次数 --><property name="acquireRetryAttempts" value="2"/></bean><!--3.配置SqlSessionFactory对象--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!--注入数据库连接池--><property name="dataSource" ref="dataSource"/><!-- 配置MyBaties全局配置文件:mybatis-config.xml --><property name="configLocation" value="classpath:mybatis-config.xml"/></bean><!--4.配置扫描Dao接口包,动态实现Dao接口注入到spring容器中在dao层中我们写完接口和配置文件后 还需要再写一个实现类(其中要手动引入sqlSessionFactory或者继承一个sqlSupport)然后在配置文件中注册bean,然后再测试中,CPX  getBean ....现在我们可以通过配置文件省略掉这个实现类--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!--注入sqlSessionFactory--><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/><!--给出要扫描的Dao层接口包--><property name="basePackage" value="com.wyj.Dao"/></bean>
</beans>

b:spring-mvc.xml

我们用户发起的请求,以及响应我们用户的信息

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.2.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-4.2.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.2.xsd"><!--扫描包:使指定的包下的注解有效--><context:component-scan base-package="com.wyj.Controller"/><!--静态资源默认servlet配置--><mvc:default-servlet-handler/><!--开启注解驱动--><mvc:annotation-driven/><!--配置视图解析器--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /><property name="prefix" value="/WEB-INF/jsp/" /><property name="suffix" value=".jsp" /></bean></beans>

c:spring-service.xml

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.2.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.2.xsd"><!--扫描service层相关的bean--><context:component-scan base-package="com.wyj.Service"/><!--BookServiceImpl注入到IOC容器中--><!--这里的ref = bookMapper ref是参考上下文  我们是将其中几个spring.xml联合在一块--><bean id="BookServiceImpl" class="com.wyj.Service.BookServiceImp"><property name="bookMapper" ref="bookMapper"/></bean><!--配置事务管理器--><bean id = "transaction" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><!--注入数据库连接池--><property name="dataSource" ref="dataSource"/></bean>
</beans>

d:将三个spring.xml整合到一块

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><import resource="spring-dao.xml"/><import resource="spring-service.xml"/><import resource="spring-mvc.xml"/></beans>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/307805.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core Cookie SameSite

在较多的项目中&#xff0c;Cookie 是比较常用的一种状态保持的选择。比如常见的例子&#xff1a;用户登录成功后&#xff0c;服务器通过 set-cookie 将会话Id设置到当前域下&#xff0c;前端在调用后端接口时&#xff0c;会自动将同域下的 Cookie 携带上&#xff0c;然后后端接…

还不会ts?一文带你打开ts的大门

一文带你打开ts的大门序言一、什么是TypeScript&#xff1f;1、编程语言的类型2、TypeScript究竟是什么&#xff1f;二、为什么要学习TypeScript&#xff1f;1、程序更容易理解2、效率更高3、更少的错误4、非常好的包容性5、一点小缺点三、typescript入门1、如何安装TypeScript…

idea中右侧的Maven框消失了

我掉 芭比Q了 idea中右侧的maven框居然没了 消失不见了 跟一束烟似的 没了 解决&#xff08;网上找的&#xff09;

「软件项目管理」一文详解软件项目进度计划

软件项目进度计划序言一、进度及任务的定义1. 进度2. 任务3. 产品和任务的关系二、任务关联关系1. 定义2. 任务(活动)之间的关系3. 任务关系矩阵4. 任务关联关系的依据三、进度管理图示1. 甘特图2. 网络图&#xff08;1&#xff09;定义&#xff08;2&#xff09;常用的网络图Ⅰ…

过年烟花特效

一&#xff1a;前言 过年了 菜鸡杰 在这给CSDN的伙计们拜年了 这一段时间以来 我特别感谢 我的粉丝 正是因为有你们的陪伴 所以我才会很大动力 去写博客&#xff0c;所以我就准备了一个特效给粉丝们 现在过年不让放烟花 我就改了个代码 改成烟花特效 送给大家 二:特效描述 这…

「软件项目管理」一文详解软件项目质量计划

一文详解软件项目质量计划&#x1f3a9;前言&#x1f452;一、质量概述1. 质量与软件质量2. 质量成本二、质量模型1. 定义2. 几种模型3. 模型解读&#xff08;1&#xff09;Bohem质量模型&#xff08;2&#xff09;McCall质量模型&#xff08;3&#xff09;ISO/IEC 9126质量模型…

WSL2 支持挂载物理磁盘,Windows 可直接访问 ext4

喜欢就关注我们吧&#xff01;最新的 Windows Insiders Preview Build 为 WSL2 的命令行程序增加了新功能&#xff1a;wsl --mount&#xff0c;这个新参数支持在 WSL2 添加和挂载物理磁盘&#xff0c;用户通过它能访问 Windows 没有原生支持的 Linux 文件系统&#xff08;例如 …

2招解决并发问题,省几百万设备费用!说穿了很简单...

经大佬介绍&#xff0c;接了个技术顾问的私活儿&#xff0c;3天搞定报酬8000&#xff0c;Mark一下&#xff0c;也分享下经验心得。&#xff08;经大家要求&#xff0c;文末增加了一段接私活儿经验&#xff09;背景交代甲方是广东某国企信息部&#xff0c;美其名曰是邀请技术顾问…

「软件项目管理」一文详解软件配置管理计划

一文详解软件配置管理计划前言一、配置管理概述1. 配置管理(SCM)定义2. 软件配置项目(SCI)3. 基线4. 软件配置控制委员会&#xff08;SCCB&#xff09;二、软件配置管理过程1. 管理过程2. 管理过程解析&#xff08;1&#xff09;配置项标识、跟踪I. 定义II. SPM项目要求&#x…

Kubernetes探针踩坑记

1. 荒腔走板最近一两个月生产K8s集群频繁出现短时503 Service Temporarily Unavailable&#xff0c;还不能主动复现&#xff0c;相当郁闷&#xff0c;压力山大。HTTP 5xx响应状态码用于定义服务端错误。500 Internal Server Error&#xff1a;所请求的服务器遇到意外的情况并阻…

「软件项目管理」一文了解软件项目团队计划

一文了解软件项目团队计划序言一、人力资源计划1. 团队定义2. 项目组织结构&#xff08;1&#xff09;职能型&#xff08;2&#xff09;项目型&#xff08;3&#xff09;矩阵型3. 责任分配矩阵二、项目干系人计划1. 干系人定义2. 干系人识别3. 干系人参与分类4. 干系人参与评估…

leetcode40. 组合总和 II

一:题目 二:上码 class Solution { public:/**思路:1.题目中说的每个数字只在每个组合中使用一次的话 我们可以考虑 在递归遍历的时候 index1不断缩小范围&#xff08;因为这也是在一个大的集合中挑选小的集合&#xff0c;所以是需要记录index的&#xff09;2.但是我们在填写…

DDD:架构思想的旧瓶新酒?阿里等大厂却对它趋之若鹜!

4月&#xff0c;InfoQ 发布了软件架构与设计的趋势报告。在报告中可以看出&#xff0c;微服务、领域驱动设计等已经非常流行&#xff0c;并成为目前软件开发行业的主流趋势。大家都知道&#xff0c;微服务划分的一个重要理论基础就是领域驱动设计。但由于 DDD 门槛高、概念多&a…

「软件项目管理」一文浅谈软件项目风险计划

一文浅谈软件项目风险计划序言一、风险基本概念1. 风险的定义及特性2. 风险三要素3. 风险图示3. 风险类型&#xff08;1&#xff09;预测角度&#xff08;2&#xff09;范围角度二、风险管理过程三、风险识别1. 定义2. 风险识别方法3. 风险条目检查表之七个条目四、风险评估1. …

.NET Core 下使用 gRPC

gRPC 是一种与语言无关的高性能远程过程调用 (RPC) 框架。https://grpc.io/docs/guides/https://github.com/grpc/grpc-dotnethttps://docs.microsoft.com/zh-cn/aspnet/core/grpc“gRPC 的主要优点现代高性能轻量级 RPC 框架。协定优先 API 开发&#xff0c;默认使用协议缓冲区…

leetcode93. 复原 IP 地址

一&#xff1a;每日论语解读 follow me !! 君子坦荡荡 小人常威威 二:题目 三:上码 class Solution { public:/**思路:1.分析题意本题依然是切割字符串(我们需要对要分割的字符串做出处理 需要判断我们截取的字符串是否合法)2。关于‘.’的处理 我们是在原字符串的基础上进…

ASP.NET Core整合Zipkin链路跟踪

前言在日常使用ASP.NET Core的开发或学习中&#xff0c;如果有需要使用链路跟踪系统&#xff0c;大多数情况下会优先选择SkyAPM。我们之前也说过SkyAPM设计确实比较优秀&#xff0c;巧妙的利用DiagnosticSource诊断跟踪日志&#xff0c;可以做到对项目无入侵方式的集成。其实还…

探秘react,一文弄懂react的基本使用和高级特性

一文详解react的基本使用、高级特性和周边插件⏰序言&#x1f4dd;一、React的基本使用1、JSX基本使用&#xff08;1&#xff09;变量、表达式&#xff08;2&#xff09;class和style&#xff08;3&#xff09;子元素和组件&#xff08;4&#xff09;原生 html2、条件判断&…

使用React hooks,些许又多了不少摸鱼时间

一文详解react-hooks&#x1f399;️前言一、&#x1f4fb;概述1、关于React Hooks2、认识React Hooks&#xff08;1&#xff09;回顾React函数式组件&#xff08;2&#xff09;函数组件的特点&#xff08;3&#xff09;class组件的问题&#xff08;4&#xff09;React 组件二、…

手把手教学之如何设计财务对账系统

在设计一个对账系统前&#xff0c;我们先想清楚&#xff0c;对账目的、方式、对账场景、使用对象。其次就是和财务了解一下&#xff0c;他们所期望的效果&#xff0c;毕竟他们是使用方。财务对账是一个琐碎而复杂的工作&#xff0c;极需要工作耐心和细心&#xff0c;还要求对账…