- 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
=
"https://cdn.bootcss.com/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
=
"https://cdn.bootcss.com/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
=
"https://cdn.bootcss.com/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的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
前言 这个东西有啥用,好玩? 确实, 好玩归好玩,其实很有使用场景。 可以自己选则一些业务节点触发这个机器人助手的消息推送; 简单举例: 有人给你的系统留下反馈意见了,推送到运营群去; 2.项目部署成
1. JWT 简介 JSON Web Token(JWT) 是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为 JSON 对象在各方之间安全地传输信息。该信息可以被验证和信
我的页面上有多个 ajax 调用,我想将它们合并为一个函数。 目前我在几个地方都有这种类型的功能: function AjaxCallOne () { //do something $.ajax(
我的 Facebook 集成基本上可以在我的应用程序中运行:出现 Facebook 对话框,用户可以选择“允许”或“不允许”。但是,我不明白 API 是如何工作的!我有一个使用此代码的 Activit
我必须将文件夹结构从我的应用程序共享到 OneDrive。 我已经检查了一个驱动器的 sdk,但在那个 sdk 中只能共享文件而不是文件夹,并且没有在该 sdk 中创建文件夹的选项 https://g
我是支付网关集成方面的新手。我必须在我的项目 (CORE PHP) 中集成 CCAvenue 支付网关集成。但是我不知道如何为开发人员测试创建商户帐户,如何获取商户 key 等。我已经进行了研发,但是
我正在尝试将“社交选项”集成到我的应用程序中。 我有 iOS6,但我的想法是有一个适用于 iOS5 的应用程序。使用 Twitter 框架非常简单,并且可以在 r.0 版本和 6.0 版本的设备上运行
我正在尝试将 flurryAds 集成到我的 iPhone 应用程序中,但我无法做到这一点。我导入名为 的 .h 文件 #import "Flurry.h" #import "FlurryAds.h"
我正在尝试在我的网站中实现类似 facebook 的按钮和评论,但我在 IE7 中遇到了评论框问题。 COMMENT USING 下拉框不知何故没有显示其他可用选项。这是我用来实现它的代码片段:
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve th
我正在使用 SOAP API 进行 PayPal 集成(Express Checkout)。在 DoExpressCheckout 调用后,我调用 GetExpressCheckoutDetails。
我正在尝试将 paypal 作为支付网关之一集成到我的应用程序中,但在我点击支付按钮后它会返回以下错误。 错误 java.lang.RuntimeException:无法使用 Intent { cmp
我目前正在尝试将 paypal 结账与我们的在线商店集成。我们正在针对 Sandbox 进行测试。除了 IPN(即时付款通知)之外的所有内容都有效。 我们阅读了很多有关 Paypal 更改其安全模型的
我正在开发一个 android 应用程序,我想在其中集成 facebook 之类的。我正在浏览链接 http://developers.facebook.com/docs/guides/mobile/
所以我正在尝试构建一个集成了 FitBit 的 iOS 应用程序 (Swift 2)。 一旦用户打开“步行”页面,用户应该能够看到他每天的步数。 理想情况下,我们不希望每个用户都注册到 FitBit。
我是集成投递箱的新手,但我不太确定如何生成调用以获取请求 token secret 。 https://www.dropbox.com/developers/reference/api#request
我已经成功集成了 PayPal。一切正常。但我希望我的表格在成功付款后重定向到我的网站。另一个问题:如何从 PayPal 得到回应?这是我的 Paypal 表格。谢谢。 `
我在我的 Android 应用程序中集成了 Paypal 。我有一个主要 Activity - 和关于 Activity ,我在其中显示 Paypal 按钮。关于从主 Activity 访问的 Act
前言: 小编引入的图片和文字描述都是来自于尚硅谷的视频讲解,在此感谢尚硅谷的老师,同时也结合 seata文档官方文档进行整合 项目地址(gitee): https://gitee.com/qine
目录 1. demo project 1.1 接口准备 1.2 配置准备 2. docker 开启远程连接
我是一名优秀的程序员,十分优秀!