本篇文章为你整理了SSM(Spring,SpringMVC,Mybatis)框架整合项目(springmvc+mybatis框架介绍)的详细内容,包含有ssm框架整合时,spring配置文件中的配置信息 springmvc+mybatis框架介绍 ssm框架中spring作用 ssm框架与springboot开发 SSM(Spring,SpringMVC,Mybatis)框架整合项目,希望能帮助你了解 SSM(Spring,SpringMVC,Mybatis)框架整合项目。
`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`)
INSERT INTO `books`(`bookID`,`bookName`,`bookCounts`,`detail`)VALUES
(1,Java,1,从入门到放弃),
(2,MySQL,10,从删库到跑路),
(3,Linux,5,从进门到进牢);
基本环境搭建:
1、新建一Maven项目!ssmbooks , 添加web的支持
2、导入相关的pom依赖!
!--依赖:junit,数据库驱动,连接池,servlet,jsp,mybatis,mybatis-spring,spring,--
dependencies
!--Junit--
dependency
groupId junit /groupId
artifactId junit /artifactId
version 4.12 /version
/dependency
!--数据库驱动--
dependency
groupId mysql /groupId
artifactId mysql-connector-java /artifactId
version 8.0.25 /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.2 /version
scope compile /scope
/dependency
/dependencies
3、Maven资源过滤设置
!--静态资源导出问题--
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、建立基本结构和配置框架!
com.bai.pojo
com.bai.dao
com.bai.service
com.bai.controller
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
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssmbooks?useUnicode=true characterEncoding=utf8
jdbc.username=root
jdbc.password=root
2、IDEA关联数据库
3、编写MyBatis的核心配置文件
!-- 配置数据源 交给spring去做--
!-- 别名--
typeAliases
package name="com.bai.pojo"/
/typeAliases
!-- 注册BookMapper.xml--
mappers
mapper /mapper
/mappers
4、编写数据库对应的实体类 com.bai.pojo.Books
使用lombok插件!
package com.bai.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接口!
package com.bai.dao;
import com.bai.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 queryBookById(@Param("bookId") int id);
// 查询全部的书
List Books queryAllBook();
// 通过名字查询书籍
List Books queryBookByName(@Param("BookName") String BookName);
6、编写接口对应的 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.bai.dao.BookMapper"
!-- 添加一本书--
insert id="addBook" parameterType="com.bai.pojo.Books"
insert into ssmbooks.books ( bookName, bookCounts, detail)
values (#{bookName},#{bookCounts},#{detail})
/insert
!-- 删除一本书--
delete id="deleteBookById" parameterType="int"
delete from ssmbooks.books where bookID = #{bookId}
/delete
!-- 更新一本书--
update id="updateBook" parameterType="com.bai.pojo.Books"
update ssmbooks.books set bookName=#{bookName},bookCounts=#{bookCounts},detail=#{detail}
where bookID=#{bookID}
/update
!-- 通过id查询书籍--
select id="queryBookById" resultType="com.bai.pojo.Books"
select * from ssmbooks.books where bookID=#{bookId}
/select
!-- 查询全部的书--
select id="queryAllBook" resultType="com.bai.pojo.Books"
select * from ssmbooks.books
/select
!-- 通过名字查询书籍--
select id="queryBookByName" resultType="com.bai.pojo.Books"
select * from ssmbooks.books where bookName like concat(%,#{BookName},%)
/select
/mapper
7、编写Service层的接口和实现类
接口:
package com.bai.service;
import com.bai.pojo.Books;
import java.util.List;
public interface BookService {
// 添加一本书
int addBook(Books books);
// 删除一本书
int deleteBookById(int id);
// 更新一本书
int updateBook(Books books);
// 查询一本书通过id
Books queryBookById(int id);
// 查询全部的书
List Books queryAllBook();
// 查询一本书通过名字
List Books queryBookByName(String BookName);
实现类:
package com.bai.service;
import com.bai.dao.BookMapper;
import com.bai.pojo.Books;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.List;
@Service("BookServiceImpl")
public class BookServiceImpl implements BookService{
//service层调dao层: 组合dao
@Autowired
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) {
return bookMapper.updateBook(books);
public Books queryBookById(int id) {
return bookMapper.queryBookById(id);
public List Books queryAllBook() {
return bookMapper.queryAllBook();
public List Books queryBookByName(String BookName) {
return bookMapper.queryBookByName(BookName);
OK,到此,底层需求操作编写完毕!
Spring层
1、配置Spring整合MyBatis,我们这里数据源使用c3p0连接池;
2、我们去编写Spring整合Mybatis的相关的配置文件;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"
!-- 配置整合mybatis --
!-- 1.关联数据库配置文件--
context:property-placeholder location="classpath:database.properties"/
!-- 2.数据库连接池 dbcp: 半自动化操作,不能自动连接 c3p0:自动化操作(自动化的加载配置文件,并且可以自动设置到对象中!)--
bean id="dataSource"
!-- 配置连接池属性 --
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"
property name="dataSource" ref="dataSource"/
!-- 绑定mybatis的配置文件--
property name="configLocation" value="classpath:mybatis-config.xml"/
/bean
!-- 配置dao接口扫描包,动态的实现了dao接口可以注入到Spring容器中--
bean
!-- 1.注入 sqlSessionFactory--
!-- 继承就使用: sqlSessionFactoryBeanName 私有化就使用:sqlSessionTemplateBeanName--
property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/
!-- 2.扫描dao包--
property name="basePackage" value="com.bai.dao"/
/bean
/beans
3、Spring整合service层
?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.扫描service下的包--
context:component-scan base-package="com.bai.service"/
!-- 2.将我们所有的业务类,注入到spring中,可以通过配置,或注解实现自动装配--
!-- bean id="BookServiceImpl" --
!-- property name="bookMapper" ref="bookMapper"/ --
!-- /bean --
!-- 3.声明式事务配置--
bean id="TransactionManager"
!-- 注入数据源--
property name="dataSource" ref="dataSource"/
/bean
!-- 4.aop事务支持--
?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
!--乱码配置:过滤器--
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
?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
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd"
!-- 1.注解驱动--
mvc:annotation-driven/
!-- 2.静态资源过滤--
mvc:default-servlet-handler/
!-- 3.扫描包:controller--
context:component-scan base-package="com.bai.controller"/
!-- 4.配置jsp 显示ViewResolver视图解析器--
bean
property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /
property name="prefix" value="/WEB-INF/jsp/" /
property name="suffix" value=".jsp" /
/bean
/beans
3、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="classpath:spring-dao.xml"/
import resource="classpath:spring-service.xml"/
import resource="classpath:spring-mvc.xml"/
/beans
Controller 和 视图层编写
**1、BookController 类编写 **
package com.bai.controller;
import com.bai.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 java.util.List;
@Controller
@RequestMapping("/book")
public class BookController {
//controller层调service层
@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){
System.out.println("Books= :"+books);
bookService.addBook(books);
return "redirect:/book/allbook";
//跳转到修改书籍页面
@RequestMapping("/toUpdate")
public String toUpdatePaper(int id,Model model){
Books books = bookService.queryBookById(id);
model.addAttribute("QBook", books);
return "updateBook";
//修改书籍请求
@RequestMapping("/updateBook")
public String UpdateBook(Books books,Model model) {
System.out.println("UpdateBook= :"+books);
bookService.updateBook(books);
// 出现的问题:我们提交了修改的SQL请求,但是修改失败。
// 我们看一下sql语句,能否执行成功? 执行失败:发现sql语句需要传递一个id进行修改
// Books books1 = bookService.queryBookById(books.getBookID());
// model.addAttribute("books1", books1);
return "redirect:/book/allbook";
//删除书籍请求
@RequestMapping("/del/{bookid}")
public String DeleteBook(@PathVariable("bookid") int id) {
bookService.deleteBookById(id);
return "redirect:/book/allbook";
//通过名字查询书籍请求
@RequestMapping("/queryBook")
public String queryBook(String queryBookName,Model model) {
List Books list = bookService.queryBookByName(queryBookName);
model.addAttribute("list", list);
if (list.size()==0){
model.addAttribute("msg", "未查到数据");
return "allbook";
2、编写首页 index.jsp
%@ page contentType="text/html;charset=UTF-8" language="java" %
html
head
title 首页 /title
/head
style type="text/css"
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
body
a href="${pageContext.request.contextPath}/book/allbook" 进入书籍页面 /a
/h3
/body
/html
3、书籍列表页面 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
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="stylesheet"
/head
body
div
div
div
div
small 书籍列表 —— 显示所有书籍 /small
/h1
/div
/div
/div
div
div
a href="${pageContext.request.contextPath}/book/toAddBook" 新增书籍 /a
a href="${pageContext.request.contextPath}/book/allbook" 显示全部书籍 /a
/div
div
form action="${pageContext.request.contextPath}/book/queryBook" method="post"
span ${msg} /span
input type="text" name="queryBookName" placeholder="请输入要查询的书籍"
input type="submit" value="查询"
/form
/div
/div
div
div
table
thead
th 书籍编号 /th
th 书籍名字 /th
th 书籍数量 /th
th 书籍详情 /th
th 操作 /th
/tr
/thead
tbody
c:forEach var="book" items="${requestScope.get(list)}"
td ${book.getBookID()} /td
td ${book.getBookName()} /td
td ${book.getBookCounts()} /td
td ${book.getDetail()} /td
a href="${pageContext.request.contextPath}/book/toUpdate?id=${book.getBookID()}" 更改 /a %-- //老式的传参--%
a href="${pageContext.request.contextPath}/book/del/${book.getBookID()}" 删除 /a %-- //Restful风格传参--%
/td
/tr
/c:forEach
/tbody
/table
/div
/div
/div
/body
/html
5、添加书籍页面:addBook.jsp
%@ 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="stylesheet"
/head
body
div
div
div
div
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
/body
/html
7、修改书籍页面 updateBook.jsp
%@ 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="stylesheet"
/head
body
div
div
div
div
small 修改信息 /small
/h1
/div
/div
/div
form action="${pageContext.request.contextPath}/book/updateBook" method="post"
%--出现的问题:我们提交了修改的SQL请求,但是修改失败。
我们看一下sql语句,能否执行成功? 执行失败:发现sql语句需要传递一个id进行修改--%
%-- 前端传参隐藏域--%
input type="hidden" name="bookID" value="${QBook.getBookID()}"/
书籍名称: input type="text" name="bookName" value="${QBook.getBookName()}"/
书籍数量: input type="text" name="bookCounts" value="${QBook.getBookCounts()}"/
书籍详情: input type="text" name="detail" value="${QBook.getDetail() }"/
input type="submit" value="提交"/
/form
/div
/body
/html
配置Tomcat,进行运行!
这里我们只是使用了SSM框架完成了基本的增删改查功能模块的网页
以上就是SSM(Spring,SpringMVC,Mybatis)框架整合项目(springmvc+mybatis框架介绍)的详细内容,想要了解更多 SSM(Spring,SpringMVC,Mybatis)框架整合项目的内容,请持续关注盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。