- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章SpringMVC 整合SSM框架详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
环境要求 。
环境:
要求:
需要熟练掌握MySQL数据库,Spring,JavaWeb及MyBatis知识,简单的前端知识; 。
数据库环境 。
创建一个存放书籍数据的数据库表 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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,
'从进门到进牢'
);
|
基本环境搭建 。
1、新建一Maven项目!ssmbuild , 添加web的支持 。
2、导入相关的pom依赖! 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
<
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
>
</
dependencies
>
|
3、Maven资源过滤设置 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<
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
>
|
4、建立基本结构和配置框架! 。
1
2
3
4
5
6
7
|
<?
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
>
|
1
2
3
4
5
6
7
|
<?
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 。
1
2
3
4
|
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssmbuild?useSSL=true&useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=123456
|
2、IDEA关联数据库 。
3、编写MyBatis的核心配置文件 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<?
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
resource
=
"com/kuang/dao/BookMapper.xml"
/>
</
mappers
>
</
configuration
>
|
4、编写数据库对应的实体类 com.kuang.pojo.Books 使用lombok插件! 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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;
}
|
5、编写Dao层的 Mapper接口! 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
package
com.kuang.dao;
import
com.kuang.pojo.Books;
import
java.util.List;
public
interface
BookMapper {
//增加一个Book
int
addBook(Books book);
//根据id删除一个Book
int
deleteBookById(
int
id);
//更新Book
int
updateBook(Books books);
//根据id查询,返回一个Book
Books queryBookById(
int
id);
//查询全部Book,返回list集合
List<Books> queryAllBook();
}
|
6、编写接口对应的 Mapper.xml 文件。需要导入MyBatis的包; 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<
mapper
namespace
=
"com.kuang.dao.BookMapper"
>
<!--增加一个Book-->
<
insert
id
=
"addBook"
parameterType
=
"Books"
>
insert into ssmbuild.books(bookName,bookCounts,detail)
values (#{bookName}, #{bookCounts}, #{detail})
</
insert
>
<!--根据id删除一个Book-->
<
delete
id
=
"deleteBookById"
parameterType
=
"int"
>
delete from ssmbuild.books where bookID=#{bookID}
</
delete
>
<!--更新Book-->
<
update
id
=
"updateBook"
parameterType
=
"Books"
>
update ssmbuild.books
set bookName = #{bookName},bookCounts = #{bookCounts},detail = #{detail}
where bookID = #{bookID}
</
update
>
<!--根据id查询,返回一个Book-->
<
select
id
=
"queryBookById"
resultType
=
"Books"
>
select * from ssmbuild.books
where bookID = #{bookID}
</
select
>
<!--查询全部Book-->
<
select
id
=
"queryAllBook"
resultType
=
"Books"
>
SELECT * from ssmbuild.books
</
select
>
</
mapper
>
|
7、编写Service层的接口和实现类 。
接口:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
package
com.kuang.service;
import
com.kuang.pojo.Books;
import
java.util.List;
//BookService:底下需要去实现,调用dao层
public
interface
BookService {
//增加一个Book
int
addBook(Books book);
//根据id删除一个Book
int
deleteBookById(
int
id);
//更新Book
int
updateBook(Books books);
//根据id查询,返回一个Book
Books queryBookById(
int
id);
//查询全部Book,返回list集合
List<Books> queryAllBook();
}
|
实现类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
package
com.kuang.service;
import
com.kuang.dao.BookMapper;
import
com.kuang.pojo.Books;
import
java.util.List;
public
class
BookServiceImpl
implements
BookService {
//调用dao层的操作,设置一个set接口,方便Spring管理
private
BookMapper bookMapper;
public
void
setBookMapper(BookMapper bookMapper) {
this
.bookMapper = bookMapper;
}
public
int
addBook(Books book) {
return
bookMapper.addBook(book);
}
public
int
deleteBookById(
int
id) {
return
bookMapper.deleteBookById(id);
}
public
int
updateBook(Books books) {
return
bookMapper.updateBook(books);
}
public
Books queryBookById(
int
id) {
return
bookMapper.queryBookById(id);
}
public
List<Books> queryAllBook() {
return
bookMapper.queryAllBook();
}
}
|
OK,到此,底层需求操作编写完毕! 。
Spring层 。
1、配置Spring整合MyBatis,我们这里数据源使用c3p0连接池; 。
2、我们去编写Spring整合Mybatis的相关的配置文件;spring-dao.xml 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
<?
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">
<!-- 配置整合mybatis -->
<!-- 1.关联数据库文件 -->
<
context:property-placeholder
location
=
"classpath:database.properties"
/>
<!-- 2.数据库连接池 -->
<!--数据库连接池
dbcp 半自动化操作 不能自动连接
c3p0 自动化操作(自动的加载配置文件 并且设置到对象里面)
-->
<
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容器中 -->
<!--解释 :https://www.cnblogs.com/jpfss/p/7799806.html-->
<
bean
class
=
"org.mybatis.spring.mapper.MapperScannerConfigurer"
>
<!-- 注入sqlSessionFactory -->
<
property
name
=
"sqlSessionFactoryBeanName"
value
=
"sqlSessionFactory"
/>
<!-- 给出需要扫描Dao接口包 -->
<
property
name
=
"basePackage"
value
=
"com.kuang.dao"
/>
</
bean
>
</
beans
>
|
3、Spring整合service层 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<?
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">
<!-- 扫描service相关的bean -->
<
context:component-scan
base-package
=
"com.kuang.service"
/>
<!--BookServiceImpl注入到IOC容器中-->
<
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
>
|
Spring层搞定!再次理解一下,Spring就是一个大杂烩,一个容器!对吧! 。
SpringMVC层 。
1、web.xml 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
<?
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
>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
>
<!--encodingFilter-->
<
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过期时间-->
<
session-config
>
<
session-timeout
>15</
session-timeout
>
</
session-config
>
</
web-app
>
|
2、spring-mvc.xml 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
<?
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">
<!-- 配置SpringMVC -->
<!-- 1.开启SpringMVC注解驱动 -->
<
mvc:annotation-driven
/>
<!-- 2.静态资源默认servlet配置-->
<
mvc:default-servlet-handler
/>
<!-- 3.配置jsp 显示ViewResolver视图解析器 -->
<
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
>
<!-- 4.扫描web相关的bean -->
<
context:component-scan
base-package
=
"com.kuang.controller"
/>
</
beans
>
|
3、Spring配置整合文件,applicationContext.xml 。
1
2
3
4
5
6
7
8
9
10
11
|
<?
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 和 视图层编写 。
1、BookController 类编写 , 方法一:查询全部书籍 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
@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"
;
}
}
|
2、编写首页 index.jsp 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE HTML>
<
html
>
<
head
>
<
title
>首页</
title
>
<
style
type
=
"text/css"
>
a {
text-decoration: none;
color: black;
font-size: 18px;
}
h3 {
width: 180px;
height: 38px;
margin: 100px auto;
text-align: center;
line-height: 38px;
background: deepskyblue;
border-radius: 4px;
}
</
style
>
</
head
>
<
body
>
<
h3
>
<
a
href
=
"${pageContext.request.contextPath}/book/allBook"
rel
=
"external nofollow"
>点击进入列表页</
a
>
</
h3
>
</
body
>
</
html
>
|
3、书籍列表页面 allbook.jsp 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<
html
>
<
head
>
<
title
>书籍列表</
title
>
<
meta
name
=
"viewport"
content
=
"width=device-width, initial-scale=1.0"
>
<!-- 引入 Bootstrap -->
<
link
href
=
"../../../bootstrap/3.3.7/css/bootstrap.min.css"
rel
=
"external nofollow"
rel
=
"external nofollow"
rel
=
"external nofollow"
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"
rel
=
"external nofollow"
>新增</
a
>
</
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
>
<
tbody
>
<
c:forEach
var
=
"book"
items
=
"${requestScope.get('list')}"
>
<
tr
>
<
td
>${book.getBookID()}</
td
>
<
td
>${book.getBookName()}</
td
>
<
td
>${book.getBookCounts()}</
td
>
<
td
>${book.getDetail()}</
td
>
<
td
>
<
a
href
=
"${pageContext.request.contextPath}/book/toUpdateBook?id=${book.getBookID()}"
rel
=
"external nofollow"
>更改</
a
> |
<
a
href
=
"${pageContext.request.contextPath}/book/del/${book.getBookID()}"
rel
=
"external nofollow"
>删除</
a
>
</
td
>
</
tr
>
</
c:forEach
>
</
tbody
>
</
table
>
</
div
>
</
div
>
</
div
>
|
4、BookController 类编写 , 方法二:添加书籍 。
1
2
3
4
5
6
7
8
9
10
11
|
@RequestMapping
(
"/toAddBook"
)
public
String toAddPaper() {
return
"addBook"
;
}
@RequestMapping
(
"/addBook"
)
public
String addPaper(Books books) {
System.out.println(books);
bookService.addBook(books);
return
"redirect:/book/allBook"
;
}
|
5、添加书籍页面:addBook.jsp 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<
html
>
<
head
>
<
title
>新增书籍</
title
>
<
meta
name
=
"viewport"
content
=
"width=device-width, initial-scale=1.0"
>
<!-- 引入 Bootstrap -->
<
link
href
=
"../../../bootstrap/3.3.7/css/bootstrap.min.css"
rel
=
"external nofollow"
rel
=
"external nofollow"
rel
=
"external nofollow"
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"
>
书籍名称:<
input
type
=
"text"
name
=
"bookName"
><
br
><
br
><
br
>
书籍数量:<
input
type
=
"text"
name
=
"bookCounts"
><
br
><
br
><
br
>
书籍详情:<
input
type
=
"text"
name
=
"detail"
><
br
><
br
><
br
>
<
input
type
=
"submit"
value
=
"添加"
>
</
form
>
</
div
>
|
6、BookController 类编写 , 方法三:修改书籍 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
@RequestMapping
(
"/toUpdateBook"
)
public
String toUpdateBook(Model model,
int
id) {
Books books = bookService.queryBookById(id);
System.out.println(books);
model.addAttribute(
"book"
,books );
return
"updateBook"
;
}
@RequestMapping
(
"/updateBook"
)
public
String updateBook(Model model, Books book) {
System.out.println(book);
bookService.updateBook(book);
Books books = bookService.queryBookById(book.getBookID());
model.addAttribute(
"books"
, books);
return
"redirect:/book/allBook"
;
}
|
7、修改书籍页面 updateBook.jsp 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<
html
>
<
head
>
<
title
>修改信息</
title
>
<
meta
name
=
"viewport"
content
=
"width=device-width, initial-scale=1.0"
>
<!-- 引入 Bootstrap -->
<
link
href
=
"../../../bootstrap/3.3.7/css/bootstrap.min.css"
rel
=
"external nofollow"
rel
=
"external nofollow"
rel
=
"external nofollow"
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
=
"${book.getBookID()}"
/>
书籍名称:<
input
type
=
"text"
name
=
"bookName"
value
=
"${book.getBookName()}"
/>
书籍数量:<
input
type
=
"text"
name
=
"bookCounts"
value
=
"${book.getBookCounts()}"
/>
书籍详情:<
input
type
=
"text"
name
=
"detail"
value
=
"${book.getDetail() }"
/>
<
input
type
=
"submit"
value
=
"提交"
/>
</
form
>
</
div
>
|
8、BookController 类编写 , 方法四:删除书籍 。
1
2
3
4
5
|
@RequestMapping
(
"/del/{bookId}"
)
public
String deleteBook(
@PathVariable
(
"bookId"
)
int
id) {
bookService.deleteBookById(id);
return
"redirect:/book/allBook"
;
}
|
配置Tomcat,进行运行! 。
到目前为止,这个SSM项目整合已经完全的OK了,可以直接运行进行测试!这个练习十分的重要,大家需要保证,不看任何东西,自己也可以完整的实现出来! 。
项目结构图 。
小结及展望 。
这个是SSM整合案例,一定要烂熟于心! 。
SSM框架的重要程度是不言而喻的,学到这里,大家已经可以进行基本网站的单独开发。但是这只是增删改查的基本操作。可以说学到这里,大家才算是真正的步入了后台开发的门。也就是能找一个后台相关工作的底线.
或许很多人,工作就做这些事情,但是对于个人的提高来说,还远远不够! 。
我们后面还要学习一些 SpringMVC 的知识! 。
到此这篇关于SpringMVC 整合SSM框架详解的文章就介绍到这了,更多相关SpringMVC 整合SSM框架内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:https://mp.weixin.qq.com/s?__biz=Mzg2NTAzMTExNg==&mid=2247484004&idx=1&sn=cef9d881d0a8d7db7e8ddc6a380a9a76&scene=19#wechat_redirect 。
最后此篇关于SpringMVC 整合SSM框架详解的文章就讲到这里了,如果你想了解更多关于SpringMVC 整合SSM框架详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
基于SpringBoot版本如下: org.springframework.boot spring-boot-starter-parent 2.5.2
@RestController public class TestController { @GetMapping("/download") public ResponseEntit
概述 记得之前跟前端同事联调接口的时候,后端SpringMVC需要接收数组类型的参数,然后跟前端说需要传数组类型过来。后来前端童鞋传了数组,但是后端接收不成功,联调失败。那时候由于时间关系没有仔细研究
web.xml 片段: contextConfigLocation /WEB-INF/applicationContext-security.xml a
目录 相关准备 功能清单 具体功能:访问首页 ①配置view-controller ②创建页面
Spring mvc是一个非常轻量的mvc框架,注解可以大大减少配置,让请求的拦截变得比较简单。这次记录下@RequestBody 注解接收参数尤其是数组参数的用法。 关于容器的配置不再多说,这里
目录 SpringMVC默认处理的几种异常 @ResponseStatus 异常处理的顺序 自定义异常类(SpringMVC的异常处理)
目录 SpringMVC 接收前端传递的参数四种方式 @RequestParam 获取注解 @PathVariable获取注解 Sp
目录 @PathVariable的用法解析 问题描述 解析过程 动态参数使用@PathVariable
目录 SpringMVC @NotNull校验不生效 加了两个依赖问题解决 @NotNull注解失效原因之一 Lo
springmvc―handlermapping三种映射 handlermapping负责映射中央处理器转发给controller的映射策略,简单说就是控制中央处理器的请求触发哪一个control
目录 使用ModelAndView向request域对象共享数据 使用Model向request域对象共享数据 使用map向request域对象共享数据
整合SSM 环境要求 环境: IDEA MySQL5.7.19 Tomcat9 Maven3.6 要求: 需要熟练掌握MySQL数据库,Spring,Ja
目录 1、SpringMVC简介 2、工作流程与介绍 3、代码截图 以下组件通常使用框架提供实现: 1、Di
简介 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。开发者可以自己定义一些拦截器来实现特定的功能。 过滤器
背景 举个例子,出现中文乱码的例子:提交表单的时候。 表单 ?
请求进入DispatcherServlet的doDispatch后,获取HandlerMethod。然后根据HandlerMethod来确认HandlerApapter,确认后执行HandlerAd
实现需求: 1.用户未登录,跳转到登录页,登录完成后会跳到初始访问页。 2.用户自定义处理(如需要激活),跳转到激活页面,激活完成后会跳到初始访问页。 使用到的框架 springmvc 的拦
为了实现用户登录拦截你是否写过如下代码呢? 1. 基于Filter ?
springmvc dao层和service层的区别 首先解释面上意思,service是业务层,dao是数据访问层 这个问题我曾经也有过,记得以前刚学编程的时候,都是在service里直接调用d
我是一名优秀的程序员,十分优秀!