数据库
CREATE DATABASE ` ssmbuild` ;
USE ` ssmbuild` ;
DROP TABLE IF EXISTS ` books` ;
CREATE TABLE ` books` (
` bookID` INT ( 10 ) NOT NULL AUTO_INCREMENT COMMENT '书id' ,
` bookName` VARCHAR ( 100 ) NOT NULL COMMENT '书名' ,
` bookCounts` INT ( 11 ) NOT NULL COMMENT '数量' ,
` detail` VARCHAR ( 200 ) NOT NULL COMMENT '描述' ,
KEY ` bookID` ( ` bookID` )
) ENGINE = INNODB DEFAULT CHARSET = utf8
INSERT INTO ` books` ( ` bookID` , ` bookName` , ` bookCounts` , ` detail` ) VALUES
( 1 , 'Java' , 1 , '从入门到放弃' ) ,
( 2 , 'MySQL' , 10 , '从删库到跑路' ) ,
( 3 , 'Linux' , 5 , '从进门到进牢' ) ;
依赖
< dependencies>
< 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>
< 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>
< 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>
< 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.16.10</ version>
</ dependency>
< dependency>
< groupId> org.aspectj</ groupId>
< artifactId> aspectjweaver</ artifactId>
< version> 1.8.13</ 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>
配置文件
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" >
< servlet>
< servlet-name> DispatcherServlet</ 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>
< load-on-startup> 1</ load-on-startup>
</ servlet>
< servlet-mapping>
< servlet-name> DispatcherServlet</ servlet-name>
< url-pattern> /</ url-pattern>
</ servlet-mapping>
< filter>
< filter-name> encodingFilter</ 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> encodingFilter</ filter-name>
< url-pattern> /*</ url-pattern>
</ filter-mapping>
< session-config>
< session-timeout> 15</ session-timeout>
</ session-config>
</ web-app>
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 = " classpath:spring-dao.xml" />
< import resource = " classpath:spring-service.xml" />
< import resource = " classpath:spring-mvc.xml" />
</ beans>
database.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssmbuild?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
jdbc.username=root
jdbc.password=123456
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>
< typeAliases>
< package name = " com.kuang.pojo" />
</ typeAliases>
< mappers>
< mapper class = " com.kuang.dao.BookMapper" />
</ mappers>
</ configuration>
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" >
< context: property-placeholder location = " classpath:database.properties" />
< 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}" />
< property name = " maxPoolSize" value = " 30" />
< property name = " minPoolSize" value = " 10" />
< property name = " autoCommitOnClose" value = " false" />
< property name = " checkoutTimeout" value = " 10000" />
< property name = " acquireRetryAttempts" value = " 2" />
</ bean>
< bean id = " sqlSessionFactory" class = " org.mybatis.spring.SqlSessionFactoryBean" >
< property name = " dataSource" ref = " dataSource" />
< property name = " configLocation" value = " classpath:mybatis-config.xml" />
</ bean>
< bean class = " org.mybatis.spring.mapper.MapperScannerConfigurer" >
< property name = " sqlSessionFactoryBeanName" value = " sqlSessionFactory" />
< property name = " basePackage" value = " com.kuang.dao" />
</ bean>
</ beans>
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: context= " http://www.springframework.org/schema/context"
xmlns: mvc= " http://www.springframework.org/schema/mvc"
xsi: schemaLocation= " http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd" >
< mvc: annotation-driven />
< mvc: default-servlet-handler/>
< 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>
< context: component-scan base-package = " com.kuang.controller" />
</ 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"
xsi: schemaLocation= " http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd" >
< context: component-scan base-package = " com.kuang.service" />
< bean id = " BookServiceImpl" class = " com.kuang.service.BookServiceImpl" >
< property name = " bookMapper" ref = " bookMapper" />
</ bean>
< bean id = " transactionManager" class = " org.springframework.jdbc.datasource.DataSourceTransactionManager" >
< property name = " dataSource" ref = " dataSource" />
</ bean>
</ beans>
java
com.kuang.controller
BookController
package com. kuang. controller;
import com. kuang. pojo. Books;
import com. kuang. 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. PathVariable;
import org. springframework. web. bind. annotation. RequestMapping;
import javax. jws. WebParam;
import java. util. ArrayList;
import java. util. List;
@Controller
@RequestMapping ( "/book" )
public class BookController {
@Autowired
@Qualifier ( "BookServiceImpl" )
private BookService bookService;
@RequestMapping ( "/allBook" )
public String list ( Model model) {
List< Books> list = bookService. queryAllBook ( ) ;
model. addAttribute ( "list" , list) ;
return "allBook" ;
}
@RequestMapping ( "/toAddBook" )
public String toAddPaper ( ) {
return "addBook" ;
}
@RequestMapping ( "/addBook" )
public String addBook ( Books books) {
bookService. addBook ( books) ;
return "redirect:/book/allBook" ;
}
@RequestMapping ( "/toUpdate" )
public String toUpdatePaper ( int id, Model model) {
Books books = bookService. queryBooksByID ( id) ;
model. addAttribute ( "qBook" , books) ;
return "updateBook" ;
}
@RequestMapping ( "/updateBook" )
public String updateBook ( Books books) {
System. out. println ( "updateBook--->" + books) ;
bookService. updateBook ( books) ;
return "redirect:/book/allBook" ;
}
@RequestMapping ( "/deleteBook/{bookID}" )
public String deleteBook ( @PathVariable ( "bookID" ) int id) {
bookService. deleteBookById ( id) ;
return "redirect:/book/allBook" ;
}
@RequestMapping ( "/queryBook" )
public String queryBook ( String queryBookName, Model model) {
Books books = bookService. queryBookByName ( queryBookName) ;
List< Books> list = new ArrayList < Books> ( ) ;
list. add ( books) ;
if ( books== null) {
model. addAttribute ( "error" , "未查到" ) ;
}
model. addAttribute ( "list" , list) ;
return "allBook" ;
}
}
com.kuang.service
BookService
package com. kuang. service;
import com. kuang. pojo. Books;
import java. util. List;
public interface BookService {
int addBook ( Books books) ;
int deleteBookById ( int id) ;
int updateBook ( Books books) ;
Books queryBooksByID ( int id) ;
List< Books> queryAllBook ( ) ;
Books queryBookByName ( String BookName) ;
}
BookServiceImpl
package com. kuang. service;
import com. kuang. dao. BookMapper;
import com. kuang. pojo. Books;
import java. util. List;
public class BookServiceImpl implements BookService {
private BookMapper bookMapper;
public void setBookMapper ( BookMapper bookMapper) {
this . bookMapper = bookMapper;
}
public int addBook ( Books books) {
return bookMapper. addBook ( books) ;
}
public int deleteBookById ( int id) {
return bookMapper. deleteBookById ( id) ;
}
public int updateBook ( Books books) {
System. out. println ( "BookServiceImpl:updateBook--->" + books) ;
return bookMapper. updateBook ( books) ;
}
public Books queryBooksByID ( int id) {
return bookMapper. queryBooksByID ( id) ;
}
public List< Books> queryAllBook ( ) {
return bookMapper. queryAllBook ( ) ;
}
public Books queryBookByName ( String bookName) {
return bookMapper. queryBookByName ( bookName) ;
}
}
com.kuang.dao
BookMapper
package com. kuang. dao;
import com. kuang. pojo. Books;
import org. apache. ibatis. annotations. Param;
import java. util. List;
public interface BookMapper {
int addBook ( Books books) ;
int deleteBookById ( @Param ( "bookID" ) int id) ;
int updateBook ( Books books) ;
Books queryBooksByID ( @Param ( "bookID" ) int id) ;
List< Books> queryAllBook ( ) ;
Books queryBookByName ( @Param ( "bookName" ) String bookName) ;
}
BookMapper.xml
<?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.kuang.dao.BookMapper" >
< insert id = " addBook" parameterType = " Books" >
insert into ssmbuild.books (bookName, bookCounts, detail)
values (#{bookName},#{bookCounts},#{detail})
</ insert>
< delete id = " deleteBookById" parameterType = " int" >
delete from ssmbuild.books where bookID=#{bookID}
</ delete>
< update id = " updateBook" parameterType = " Books" >
update ssmbuild.books
set bookName=#{bookName},bookCounts=#{bookCounts},detail=#{detail}
where bookID=#{bookID}
</ update>
< select id = " queryBooksByID" resultType = " Books" >
select * from ssmbuild.books
where bookID=#{bookID}
</ select>
< select id = " queryAllBook" resultType = " Books" >
select * from ssmbuild.books
</ select>
< select id = " queryBookByName" resultType = " Books" >
select * from ssmbuild.books where bookName=#{bookName}
</ select>
</ mapper>
com.kuang.pojo
Books
package com. kuang. pojo;
import lombok. AllArgsConstructor;
import lombok. Data;
import lombok. NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Books {
private int bookID;
private String bookName;
private int bookCounts;
private String detail;
}
jsp
addBook.jsp
< % @ taglib prefix= "c" uri= "http://java.sun.com/jsp/jstl/core" % >
< % @ page contentType= "text/html;charset=UTF-8" language= "java" % >
< html>
< head>
< title> 新增书籍< / title>
< 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" name= "bookName" class = "form-control" required>
< / div>
< div class = "form-group" >
< label> 书籍数量:< / label>
< input type= "text" name= "bookCounts" class = "form-control" required>
< / div>
< div class = "form-group" >
< label> 书籍描述:< / label>
< input type= "text" name= "detail" class = "form-control" required>
< / div>
< div class = "form-group" >
< input type= "submit" class = "form-control" value= "添加" >
< / div>
< / form>
< / div>
< / body>
< / html>
allBook.jsp
< % @ taglib prefix= "c" uri= "http://java.sun.com/jsp/jstl/core" % >
< % @ page contentType= "text/html;charset=UTF-8" language= "java" % >
< html>
< head>
< title> 书籍展示< / title>
< 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>
< 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/allBook" > 显示全部书籍< / a>
< / div>
< div class = "col-md-4 column" >
< / div>
< div class = "col-md-4 column" style= "float: right" >
< form action= "${pageContext.request.contextPath}/book/queryBook" method= "post" class = "form-inline" >
< span style= "color: red;font-weight: bold" > ${ error} < / span>
< input type= "text" name= "queryBookName" required= "required" class = "form-control" placeholder= "请输入要查询的书籍" >
< input type= "submit" value= "提交" class = "btn btn-primary" >
< / form>
< / div>
< / div>
< / div>
< div class = "container" >
< 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>
< tbody>
< c: forEach var = "book" items= "${list}" >
< tr>
< td> ${ book. bookID} < / td>
< td> ${ book. bookName} < / td>
< td> ${ book. bookCounts} < / td>
< td> ${ book. detail} < / td>
< td>
< a href= "${pageContext.request.contextPath}/book/toUpdate?id=${book.bookID}" > 修改< / a>
& nbsp; & nbsp; | & nbsp;
< a href= "${pageContext.request.contextPath}/book/deleteBook/${book.bookID}" > 删除< / a>
< / td>
< / tr>
< / c: forEach>
< / tbody>
< / table>
< / div>
< / div>
< / div>
< / body>
< / html>
updateBook.jsp
< % @ page contentType= "text/html;charset=UTF-8" language= "java" % >
< html>
< head>
< title> 修改书籍< / title>
< 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" >
< input type= "hidden" name= "bookID" value= "${qBook.bookID}" / >
< div class = "form-group" >
< label> 书籍名称:< / label>
< input type= "text" name= "bookName" value= "${qBook.bookName}" class = "form-control" required>
< / div>
< div class = "form-group" >
< label> 书籍数量:< / label>
< input type= "text" name= "bookCounts" value= "${qBook.bookCounts}" class = "form-control" required>
< / div>
< div class = "form-group" >
< label> 书籍描述:< / label>
< input type= "text" name= "detail" value= "${qBook.detail}" class = "form-control" required>
< / div>
< div class = "form-group" >
< input type= "submit" class = "form-control" value= "修改" >
< / div>
< / form>
< / div>
< / body>
< / html>
index.jsp
< % --
Created by IntelliJ IDEA .
User: Administrator
Date: 2020 / 12 / 26 0026
Time: 19 : 57
To change this template use File | Settings | File Templates.
-- % >
< % @ page contentType= "text/html;charset=UTF-8" language= "java" % >
< html>
< head>
< title> $Title$< / title>
< style>
a{
text- decoration: none;
color: black;
font- size: 18 px;
}
h3{
width: 180 px;
height: 38 px;
margin: 200 px auto;
text- align: center;
line- height: 38 px;
background- color: aqua;
border- radius: 5 px;
}
< / style>
< / head>
< body>
< h3>
< a href= "${pageContext.request.contextPath}/book/allBook" > 进入书籍页面< / a>
< / h3>
< / body>
< / html>