ssm框架的搭建是一件繁琐的事情,各种配置,各种依赖等等(springboot真香警告),但就此我们不能放弃学习,只有不断的学习,把别人的东西反复的记忆反复的理解,最后能讲授给别人听,这样自己才算真正的掌握理解。为了加深记忆,下面就是我结合视频整理了一个ssm框架搭建的步骤,也算自己的一个巩固吧。
一、数据库连接
1、首先建好一个数据库表
2、在idea中创建maven项目 并将创建的项目转换为web项目
3、使该项目和数据库做连接(我这里已经连接成功了就不做操作了)
到这里前期的准备工作差不多完了 接下来就是非常头疼的各种依赖关系
Mybatis层
二、在pom中导入各种依赖
<?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>com.zz</groupId>
<artifactId>ssmbuild</artifactId>
<version>1.0-SNAPSHOT</version>
<!--依赖-->
<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>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
</dependency>
<!--aop-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
</dependencies>
<!--静态资源导出-->
<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>
</project>
三、建立基本结构和配置框架(包括空的mybatis-config.xml和applicatContext.xml文件)
- com.zz.pojo
- com.zz.mapper
- com.zz.controller
- com.zz.service
- mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
</configuration>
- applicationContext.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/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
四、Mybatis 配置文件的编写
1、数据库配置文件 database.properties(数据库8.0以上在后面加上时区)
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssmbuild?useSSL=true&useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=061298
2.、配置mybatis-config.xml核心文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--配置数据源 ,交给spring去做-->
<!--日志打印-->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<!--实体类起别名-->
<typeAliases>
<package name="com.zz.pojo"/>
</typeAliases>
<!--结果集映射-->
<mappers>
<mapper class="com.zz.mapper.BookMapper"/>
</mappers>
</configuration>
3、编写数据库对应的实体类 com.kuang.pojo.Books
使用lombok插件!
package com.zz.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author 张哲
* @Date 2020/8/2 14:23
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Books {
private int bookID;
private String bookName;
private int bookCounts;
private String detail;
}
4、编写Mapper层的 Mapper接口
package com.zz.mapper;
import com.zz.pojo.Books;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @Author 张哲
* @Date 2020/8/2 14:27
*/
public interface BookMapper {
int addBook(Books book);
int delBookById(@Param("bookId") int id);
int updateBook(Books books);
Books queryBookById(@Param("bookId") int id);
List<Books> getBooks();
//模糊查询
List<Books> queryBooksLike(@Param("bookName") String name);
}
5、编写接口对应的 Mapper.xml 文件。需要导入MyBatis的包;
<?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.zz.mapper.BookMapper">
<insert id="addBook" parameterType="books">
insert into ssmbuild.books(bookName, bookCounts, detail)
values (#{bookName},#{bookCounts},#{detail})
</insert>
<!--这里的bookId 要和后台传过来的id名字相同-->
<delete id="delBookById" parameterType="int">
delete from ssmbuild.books where bookID=#{bookId}
</delete>
<!--这里的#{bookID}的bookID 要和实体类中 属性值一样 因为修改提交过程中 该值获取的是用户对象的bookID -->
<update id="updateBook" parameterType="books">
update ssmbuild.books set bookName=#{bookName},
bookCounts=#{bookCounts},detail=#{detail} where bookID=#{bookID};
</update>
<select id="queryBookById" resultType="books">
select * from ssmbuild.books where bookID=#{bookId};
</select>
<select id="getBooks" resultType="books">
select * from ssmbuild.books;
</select>
<select id="queryBooksLike" resultType="books">
select * from ssmbuild.books where bookName like "%"#{bookName}"%"
</select>
</mapper>
6、编写Service层的接口和实现类
接口
package com.zz.service;
import com.zz.pojo.Books;
import java.util.List;
/**
* @Author 张哲
* @Date 2020/8/2 14:58
*/
public interface BookService {
int addBook(Books book);
int delBookById( int id);
int updateBook(Books books);
Books queryBookById( int id);
List<Books> getBooks();
List<Books> queryBooksLike( String name);
}
实现类
package com.zz.service;
import com.zz.mapper.BookMapper;
import com.zz.pojo.Books;
import java.util.List;
/**
* @Author 张哲
* @Date 2020/8/2 14:59
*/
public class BookServiceImpl implements BookService {
//service层调用mapper层 组合bean
private BookMapper bookMapper;
public void setBookMapper(BookMapper bookMapper) {
//可以在上面 增加一些业务操作 通过aop横切进去
this.bookMapper = bookMapper;
}
public int addBook(Books book) {
return bookMapper.addBook(book);
}
public int delBookById(int id) {
return bookMapper.delBookById(id);
}
public int updateBook(Books books) {
System.out.println("书:"+books);
return bookMapper.updateBook(books);
}
public Books queryBookById(int id) {
return bookMapper.queryBookById(id);
}
public List<Books> getBooks() {
return bookMapper.getBooks();
}
public List<Books> queryBooksLike(String name) {
return bookMapper.queryBooksLike(name);
}
}
到这里mybatis层操作完毕 下面搭建spring层
Spring层
五、搭建spring-dao.xml
1、配置Spring整合MyBatis,我们这里数据源使用c3p0连接池;
2、创建spring-dao.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"
xmlns:context="http://www.springframework.org/schema/context"
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">
<!--1.关联数据库配置文件-->
<context:property-placeholder location="classpath:database.properties"/>
<!--
2.连接数据源
数据池:
jdbc:
dbcp: 半自动化操作 不能自动连接
c3p0: 自动化操作(自动化加载配置文件,并且可以自动设置到对象中)
druid:
hikari:
-->
<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"/>
<!--绑定mybatis-config.xml配置文件-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
<!--4.配置mapper接口扫描包 动态实现了mapper接口可以注入到spring容器中-->
<!--省略了BookMapperImpl实现类-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--注入sqlSessionFactory-->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<!--要扫描的dao包-->
<property name="basePackage" value="com.zz.mapper"/>
</bean>
<!--该配置需要实现Mapper接口实现类 没使用-->
<!--sqlsession-->
<!--<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>-->
</beans>
六、整合spring-service.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"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
https://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<!--扫描service下的所有包-->
<context:component-scan base-package="com.zz.service"/>
<!-- <context:annotation-config/>-->
<!--2.将所有业务类 注入到spring 可以配置 可以注解实现-->
<!--注解使用@service @Authroid-->
<bean id="BookServiceImpl" class="com.zz.service.BookServiceImpl">
<property name="bookMapper" ref="bookMapper"/>
<!--<property name="bookMapper" ref="BookMapperImpl"/>-->
</bean>
<!--<bean id="BookMapperImpl" class="com.zz.mapper.BookMapperImpl">
<property name="sessionTemplate" ref="sqlSession"/>
</bean>-->
<!--3.声明式事务配置-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--注入数据源-->
<property name="dataSource" ref="dataSource"/>
</bean>
<!--4.aop事务支持-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<!--配置事务切入-->
<aop:config>
<aop:pointcut id="txPointCut" expression="execution(* com.zz.service.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
</aop:config>
</beans>
spring搞定 接下来就是springmvc,其实spring就是一个容器 一个大杂烩
springmvc层
七、配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--配置DispatcherServlet前端控制器-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--配置DispatcherServlet 中文乱码过滤器-->
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--session-->
<session-config>
<session-timeout>15</session-timeout>
</session-config>
</web-app>
八、配置spring-mvc.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"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<!--在spring-mvc.xml文件最后引入加载mybatis配置-->
<!-- <import resource="spring-dao.xml"/>-->
<!--1.注解驱动-->
<mvc:annotation-driven/>
<!--2.静态资源过滤-->
<mvc:default-servlet-handler/>
<!--3.扫描包:Controller-->
<context:component-scan base-package="com.zz.controller"/>
<!--4.视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--5.json乱码-->
<!--见springmvc笔记-->
</beans>
注意:当配置完该文件时,应该立刻去/WEB-INF/包下创建jsp包,否则忘记创建了 就会出现404请求问题
九、Spring配置整合文件,applicationContext.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/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<import resource="spring-dao.xml"/>
<import resource="spring-service.xml"/>
<import resource="spring-mvc.xml"/>
</beans>
框架搭建好 接下来就是书写Controller层实现各种业务
Controller 实现
首先创建一个BookController类 如:
package com.zz.controller;
@Controller
@RequestMapping("/book")
public class BookController {
//controller 调用service层
@Autowired
/*@Qualifier("BookServiceImpl")*/
private BookService bookService;
}
1、查询图书
getBooks()方法
//调用service层中的方法,进行业务功能的实现
@RequestMapping("/getAllBooks")
public String getBooks(Model model) {
List<Books> listBooks = bookService.getBooks();
model.addAttribute("books", listBooks);
return "getAllBooks";
}
通过调用service接口层的getBooks方法,将实现查询所有图书,因为返回的结果不可能是单个,故用集合作为返回值
当用户通过点击“查询所有图书”链接时 跳转到该方法中 下面就是一个请求的起始页index.jsp
<body>
<h3>
<a href="${pageContext.request.contextPath}/book/getAllBooks">查询全部书籍</a>
</h3>
</body>
通过点击该链接就会跳转到getBooks()方法中,因为要显示所有图书的信息,所有还得需要一个页面作为图书信息的展示页面,那么根据getBooks()方法的返回值,视图解析器会解析一个完整的/WEB-INF/jsp/getAllBooks.jsp路径 从而在该页面中显示查询图书的信息
在jsp文件夹下面创建getAllBooks.jsp页面
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
Created by IntelliJ IDEA.
User: 张哲
Date: 2020/8/2
Time: 16:37
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>书籍展示</title>
<%--bootstrap美化界面--%>
<link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="row clearfix">
<div class="col-md-12 column">
<div class="page-header">
<h1>
<small>书籍列表—————————显示书籍
</small>
</h1>
</div>
</div>
<div class="row">
<div class="col-md-4 column">
<%--添加图书链接--%>
<a class="btn btn-primary" href="${pageContext.request.contextPath}/book/toAddBook">添加图书</a>
<a class="btn btn-primary" href="${pageContext.request.contextPath}/book/getAllBooks">显示全部书籍</a>
</div>
<%--<div class="col-md-4 column"></div>--%>
<div class="col-md-8 column">
<form action="${pageContext.request.contextPath}/book/queryBooksLike" method="post" style="float: right"
class="form-inline">
<span style="color: red;font-weight: bold">${error}</span>
<input type="text" class="form-control" name="bookName" placeholder="请输入要查询的书籍">
<input type="submit" value="搜索" class="btn btn-primary">
</form>
</div>
</div>
</div>
<div class="row clearfix">
<div class="col-md-12 column">
<table class="table table-hover table-striped">
<thead>
<tr>
<th>书籍编号</th>
<th>书籍名字</th>
<th>书籍数量</th>
<th>书籍详情</th>
<th>操作</th>
</tr>
</thead>
<%--遍历存在list集合中的数据 并显示在界面--%>
<tbody>
<c:forEach var="book" items="${books}">
<tr>
<td>${book.bookID}</td>
<td>${book.bookName}</td>
<td>${book.bookCounts}</td>
<td>${book.detail}</td>
<td>
<%--拿到要修改书籍的id--%>
<a href="${pageContext.request.contextPath}/book/toUpdatePage?id=${book.bookID}">修改</a>
|
<a href="${pageContext.request.contextPath}/book/delBook/${book.bookID}">删除</a>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</div>
</div>
</body>
</html>
实现以上方法就完整的显示了全部图书的信息
2、添加图书
<%--添加图书链接--%>
<a class="btn btn-primary" href="${pageContext.request.contextPath}/book/toAddBook">添加图书</a>
当点击添加图书连接会通过toAddPage() 方法跳到一个addBook.jsp页面
//跳转到添加书籍
@RequestMapping("/toAddBook")
public String toAddPage() {
return "addBook";
}
addBook.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<%--bootstrap美化界面--%>
<link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="row clearfix">
<div class="col-md-12 column">
<div class="page-header">
<h1>
<small>新增书籍</small>
</h1>
</div>
</div>
</div>
<form action="${pageContext.request.contextPath}/book/addBook" method="post">
<div class="form-group">
<label>书籍名称:</label>
<input type="text" class="form-control" name="bookName" required>
</div>
<div class="form-group">
<label>书籍数量:</label>
<input type="text" class="form-control" name="bookCounts" required>
</div>
<div class="form-group">
<label>书籍描述:</label>
<input type="text" class="form-control" name="detail" required>
</div>
<div class="form-group">
<input type="submit" class="form-control" value="添加">
</div>
</form>
</div>
</body>
</html>
当点击添加按钮时会通过addBook()方法 添加数据到数据库 后面返回值运用重定向,到了显示全部数据的页面
//添加书籍请求
@PostMapping("/addBook")
public String addBook(Books books) {
System.out.println("books--->" + books);
bookService.addBook(books);
//添加成功 重定向到(地址栏地址肯定要改变)首页 getAllBooks页面
//就是重定向到@RequestMapping("/getAllBooks")请求
return "redirect:/book/getAllBooks";
}
3、删除图书
<%--删除图书--%>
<a href="${pageContext.request.contextPath}/book/delBook/${book.bookID}">删除</a>
删除图书直接通过点击该链接 跳转到delBookById()方法中,调用service层删除的方法,然后同样重定向到getAllBooks.jsp页面
注意这里需要获取某个对象的id值 作为删除图书的条件,当然也很简单,直接在路径后面运用resful格式拿到用户的id /${book.bookID}
delBookById()方法
//删除书籍
@RequestMapping("/delBook/{bookId}")
public String delBookById(@PathVariable("bookId") int id) {
bookService.delBookById(id);
return "redirect:/book/getAllBooks";
}
4、修改图书
<%--拿到要修改书籍的id--%>
<a href="${pageContext.request.contextPath}/book/toUpdatePage?id=${book.bookID}">修改</a>
同样在该超链接中拿到要修改用户的id 跳转到修改用户的页面toUpdatePage.jsp
这里要注意的是当跳转到修改页面中时,要显示该对象的所有信息,这里就应该拿到该对象,通过model.addAttribute("QBook", books)
存到QBook
中,然后在前台取出该对象的每一个属性的信息
//跳转到修改书籍页面
@RequestMapping("/toUpdatePage")
public String toUpdatePage(int id, Model model) {
System.out.println(id);
Books books = bookService.queryBookById(id);
model.addAttribute("QBook", books);
return "toUpdatePage";
}
toUpdatePage.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>修改页面</title>
<%--bootstrap美化界面--%>
<link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="row clearfix">
<div class="col-md-12 column">
<div class="page-header">
<h1>
<small>修改书籍</small>
</h1>
</div>
</div>
</div>
<form action="${pageContext.request.contextPath}/book/updateBook" method="post">
<%--
因为回显过去的Books对象没有携带书籍id 故取值id默认为0 就修改不成功
通过隐藏域id 获得书籍id的值一起放到Books随对象中 这样点击修改按钮时 就会携带用户的id 从而修改成功 显示
--%>
<input type="hidden" value="${QBook.bookID}" name="bookID">
<div class="form-group">
<label>书籍名称:</label>
<input type="text" class="form-control" name="bookName" required value="${QBook.bookName}">
</div>
<div class="form-group">
<label>书籍数量:</label>
<input type="text" class="form-control" name="bookCounts" required value="${QBook.bookCounts}">
</div>
<div class="form-group">
<label>书籍描述:</label>
<input type="text" class="form-control" name="detail" required value=${QBook.detail}>
</div>
<div class="form-group">
<input type="submit" class="form-control" value="修改">
</div>
</form>
</div>
</body>
</html>
这里id的值注意要存到隐藏域中 不取id的话id值就默认为0,修改不成功
这里当点击修改按钮时就进行修改操作,调用业务层的updateBook()
方法 最后重定向到getAllBooks.jsp
界面
/修改书籍请求
@RequestMapping("/updateBook")
public String updateBook(Books books) {
bookService.updateBook(books);
return "redirect:/book/getAllBooks";
}
5、模糊查询
通过名字进行模糊查询,当查询到对应的书籍就显示信息,若数据库中没有该书籍就显示全部书籍的信息,并给出页面提示,未查到
//模糊查询
@RequestMapping("/queryBooksLike")
public String queryBooksLike(String bookName, Model model) {
List<Books> booksList = bookService.queryBooksLike(bookName);
System.out.println("长度" + booksList.size());
if (booksList.size() == 0) {
List<Books> listBooks = bookService.getBooks();
model.addAttribute("books", listBooks);
model.addAttribute("error", "未查到");
} else {
model.addAttribute("books", booksList);
}
return "getAllBooks";
}
现在基本的增删改查功能已全部实现完了,多练习就完事了!!!
目录结构