目录
写在前面
1 整体系统构图
2 数据库的准备
3 创建maven项目
4 编写实体类(pojo)
5编写mapper层
5.1 编写mapper接口
5.2 编写mapper对应的配置文件
5.3 编写mybatis核心配置文件
5.4 编写spring-dao配置文件
6 编写service层
6.1 编写service接口
6.2 编写接口对应的实现类
6.3 编写service层的spring配置文件
7 controller层
7.1 编写controller实体类
7.2 springmvc配置文件
8 进行web.xml配置
9 前端页面的编写
花了一段时间看完了狂神的SSM框架,最后通过一个图书系统进行了spring,springMVC和mybatis三个框架的整合,该系统主要就是实现了图书的增删改查,写此博客进行SSM的整合复习。
整个系统采用的是经典的MVC三层架构,如下图所示,编写项目时,仍然是按照自底向上的顺序进行编写。后序过程的介绍也是这样。
CREATE TABLE books(
bookID INT(10) PRIMARY KEY AUTO_INCREMENT,
bookName VARCHAR(36) NOT NULL,
bookCounts INT(10) NOT NULL,
detail VARCHAR(36) NOT NULL)
ENGINE=INNODB CHARSET=utf8;
在idea中创建maven项目并配置maven依赖,一般来说我们的ssm整合项目中需要如下一些包
4.0.0
org.example
springmvc
pom
1.0-SNAPSHOT
springmvc-06-ssm
com.alibaba
fastjson
1.2.79
junit
junit
4.13.1
test
mysql
mysql-connector-java
5.1.46
com.mchange
c3p0
0.9.5.2
org.springframework
spring-webmvc
5.3.15
org.mybatis
mybatis
3.5.2
org.mybatis
mybatis-spring
2.0.6
org.springframework
spring-jdbc
5.3.14
javax.servlet
servlet-api
2.5
javax.servlet.jsp
jsp-api
2.2
provided
javax.servlet
jstl
1.2
src/main/resources
**/*.properties
**/*.xml
true
src/main/java
**/*.properties
**/*.xml
true
UTF-8
编写我们的books列表对应的Books类,因为我们的项目是对图书进行操作,所以此处我们实体类的属性和我们books列表的列是一一对应的,这里注意字段的类型和名称要和数据库中的表一致。
public class Books {
private int bookID;
private String bookName;
private int bookCounts;
private String detail;
public Books() {}
@Override
public String toString() {
return "Books{" +
"bookID=" + bookID +
", bookName='" + bookName + '\'' +
", bookCounts=" + bookCounts +
", detail='" + detail + '\'' +
'}';
}
public int getBookID() {
return bookID;
}
public void setBookID(int bookID) {
this.bookID = bookID;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public int getBookCounts() {
return bookCounts;
}
public void setBookCounts(int bookCounts) {
this.bookCounts = bookCounts;
}
public String getDetail() {
return detail;
}
public void setDetail(String detail) {
this.detail = detail;
}
public Books(int bookID, String bookName, int bookCounts, String detail) {
this.bookID = bookID;
this.bookName = bookName;
this.bookCounts = bookCounts;
this.detail = detail;
}
}
public interface BookMapper {
//增加一本书
public int addBook(Books books);
//更新一本书
public int updateBook(Books books);
//删除一本书
public int deleteBookById(@Param("bookId") int id);
//查询一本书
public Books queryBookById(@Param("bookId") int id);
//查询全部书
public List queryAllBooks();
}
这里注意以下@Param()注解,一般对于基本数据类型我们都会加上这个注解,之后mapper.xml文件中就按照注解括号中的名称进行匹配。
这里需要注意的就是命名空间一定要对应好,然后就是在编写mapper接口中方法对应的SQL语句,注意id要和方法名一一对应。
insert into ssmbuild.books(bookName, bookCounts, detail)
values(#{bookName}, #{bookCounts}, #{detail})
update ssmbuild.books set bookName=#{bookName}, bookCounts=#{bookCounts}, detail=#{detail}
where bookID=#{bookID}
delete from ssmbuild.books where bookID=#{bookId}
由于和spring整合了,所以我们很多原先单穿mybatis的配置可以直接整合到spring的配置文件中,在mybatis核心配置文件中,我们只做两件事,一是进行了别名的设置,这样我们在编写mapper.xml文件时,其中的paramtype时就可以不用类的全限定名,而是直接用别名,默认的别名就是类名,首字母大小写均可
在这个配置文件中,我们主要做了下列事情:
public interface BookService {
//增加一本书
public int addBook(Books books);
//更新一本书
public int updateBook(Books books);
//删除一本书
public int deleteBookById(int id);
//查询一本书
public Books queryBookById(int id);
//查询全部书
public List queryAllBooks();
}
这里需要注意的是咱们的service层要完成业务必然是要调用咱们的mapper层,所以要在此处设置bookmapper字段并给出我们set方法,这样才能实现bean的注入
public class BookServiceImpl implements BookService{
//service要调用DAO层
private BookMapper bookMapper;
public void setBookMapper(BookMapper bookMapper) {
this.bookMapper = bookMapper;
}
@Override
public int addBook(Books books) {
return bookMapper.addBook(books);
}
@Override
public int updateBook(Books books) {
return bookMapper.updateBook(books);
}
@Override
public int deleteBookById(int id) {
return bookMapper.deleteBookById(id);
}
@Override
public Books queryBookById(int id) {
return bookMapper.queryBookById(id);
}
@Override
public List queryAllBooks() {
return bookMapper.queryAllBooks();
}
}
这里我们要做的就是两件事,一是将我们所有的业务层都注入到IOC容器中并配置上事务;
这里需要注意我们此时编写的是spring-service.xml需要将该配置文件与之前编写的spring-dao.xml放在同一个上下文中,这是我们可以创建一个总的spring配置文件applicationContext.xml文件并其中导入我们的其他层的spring层的配置文件即可。
这一层的任务就是根据客户端的请求调用service层完成相应的任务
@Controller
@RequestMapping("/book")
public class BookController {
//以下两个注解配合实现我们的bookService字段的自动装配
@Autowired
@Qualifier("BookServiceImpl")
private BookService bookService;
//查询全部的数据并且返回到书籍展示页面
@RequestMapping("/allBook")
public String list(Model model) {
List books = bookService.queryAllBooks();
model.addAttribute("list", books);
return "allBook";
}
@RequestMapping("/toAddBook")
public String toaddBook() {
return "addBook";
}
@RequestMapping("/addBook")
//当传入的参数是个对象时,将会与对象的字段名进行匹配
public String addBook(Books book) {
bookService.addBook(book);
return "redirect:/book/allBook";
}
@RequestMapping("/del/{bookID}")
public String delBook(@PathVariable("bookID") int id) {
bookService.deleteBookById(id);
return "redirect:/book/allBook";
}
@RequestMapping("/toUpdateBook")
public String toUpdate(Model model, int id) {
Books book = bookService.queryBookById(id);
model.addAttribute("book", book);
return "updateBook";
}
@RequestMapping("updateBook")
public String updateBook(Books books) {
bookService.updateBook(books);
return "redirect:/book/allBook";
}
}
这个配置文件做了下列事
这里主要做了两件事
springmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:applicationContext.xml
1
springmvc
/
encoding
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
encoding
/*
15
addbook.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
新增书籍
新增书籍
allBook
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
书籍列表
updateBook
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
修改信息
修改信息
index
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
首页
点击进入列表页