ssm框架环境搭建
ssm环境搭建
环境要求
- IDEA
- MySQL 8.0.22
- Tomcat 9.0.40
- Maven 3.6.3
数据库搭建
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,'从进门到进牢');
基本环境搭建
-
建立maven项目,添加web的支持
添加web支持 : 右键项目 -> 添加框架支持 -> 勾选Web Application -> 确定
-
导入pom依赖
junit junit 4.12 mysql mysql-connector-java 5.1.47 com.mchange c3p0 0.9.5.2 javax.servlet servlet-api 2.5 javax.servlet.jsp jsp-api 2.2 javax.servlet jstl 1.2 org.mybatis mybatis 3.5.2 org.mybatis mybatis-spring 2.0.2 org.springframework spring-webmvc 5.1.9.RELEASE org.springframework spring-jdbc 5.1.9.RELEASE -
添加Maven资源过滤设置(在pom文件中dependencies标签的后面)
src/main/java **/*.properties **/*.xml false src/main/resources **/*.properties **/*.xml false -
建立基本结构和配置框架
-
com.hjq.pojo
-
com.hjq.dao
-
com.hjq.service
-
com.hjq.controller
-
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?> -
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
-
Mybatis层
-
database.properties
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=utf8&allowPublicKeyRetrieval=true jdbc.username=root jdbc.password=qaz123456 -
IDEA关联数据库
ps:先默认连接上总的数据库,然后测试连接成功后,在架构(Schemas)栏下选择要链接的database
-
编写Mybatis的核心配置文件(mybatis-config.xml)
<?xml version="1.0" encoding="UTF-8" ?> -
编写数据库对应的实体类 com.hjq.pojo.Books
ps:这里可以使用lombok插件省去getter/setter等代码的编写,但是为了稳定,这里使用idea的自动补全功能生成了正式代码,故篇幅较长。
package com.hjq.pojo; public class Books { private int bookID; private String bookName; private int bookCounts; private String detail; public Books(){ } public Books(int bookID, String bookName, int bookCounts, String detail) { this.bookID = bookID; this.bookName = bookName; this.bookCounts = bookCounts; this.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; } } -
编写Dao层的 Mapper接口!
package com.hjq.dao; import com.hjq.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集合 ListqueryAllBook(); } -
编写接口对应的 Mapper.xml 文件。需要导入MyBatis的包;
<?xml version="1.0" encoding="UTF-8" ?>insert into ssmbuild.books(bookName,bookCounts,detail) values (#{bookName}, #{bookCounts}, #{detail}) delete from ssmbuild.books where bookID=#{bookID} update ssmbuild.books set bookName = #{bookName},bookCounts = #{bookCounts},detail = #{detail} where bookID = #{bookID} -
编写Service层的接口和实现类
-
接口
package com.hjq.service; import com.hjq.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集合 ListqueryAllBook(); } -
实现类
package com.hjq.service; import com.hjq.pojo.Books; import com.hjq.dao.BookMapper; 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 ListqueryAllBook() { return bookMapper.queryAllBook(); } }
-
Spring层
Spring IOC : 控制反转,指的是在配置文件中实现对参数的配置,而不是把参数写在代码中,例如这里的spring-dao里面的c3p0连接池的参数设置,这样一来,用户就可以在不修改代码的情况下实现控制。
Spring AOP : 面向切面编程,程序在运行时,动态地将代码切入到类的指定方法、指定位置上。
1、配置Spring整合MyBatis,我们这里数据源使用c3p0连接池;
2、我们去编写Spring整合Mybatis的相关的配置文件;spring-dao.xml
? Spring-dao.xml : spring整合dao的文件,此文件通过spring把dao层的类实体化注入到容器中,以及配置一些参数等
<?xml version="1.0" encoding="UTF-8"?>
3、Spring整合service层 , spring-service.xml
? spring-service.xml :spring整合service的文件,此文件通过spring把service层的类实体化注入到容器中,以及实现横切事务等
? 这里注意,之所以在这个项目中即注入dao层对象,还要注入service层对象,是因为dao层的东西都是一个项目最基本的,对应了一个实体类的CRUD操作,如果想要配置复杂的方法,比如不同的类之间的关联操作,那就需要在service层中同时引用不同的dao的方法,而且还可以增加实现别的功能的代码,所以dao和service层的意义在于此,这也是为什么两个层都需要注入到Spring中的原因。
<?xml version="1.0" encoding="UTF-8"?>
Spring就是一个大杂烩,一个容器, 所有的对象注入Spring中由Spring管理。
SpringMVC层
1、web.xml
<?xml version="1.0" encoding="UTF-8"?>
DispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:applicationContext.xml
1
DispatcherServlet
/
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
encodingFilter
/*
15
2、spring-mvc.xml
<?xml version="1.0" encoding="UTF-8"?>
3、Spring配置整合文件,applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
至此,配置地狱完成配置
Controller 和 视图层编写
? WEB-INF下新建一个目录“jsp”
1、BookController 类编写 , 方法一:查询全部书籍
@Controller
@RequestMapping("/book")
public class BookController {
@Autowired
@Qualifier("BookServiceImpl")
private BookService bookService;
@RequestMapping("/allBook")
public String list(Model model) {
List list = bookService.queryAllBook();
model.addAttribute("list", list);
return "allBook";
}
}
2、编写首页 index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
首页
点击进入列表页
3、书籍列表页面 allBook.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
书籍列表
4、BookController 类编写 , 方法二:添加书籍
@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
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
新增书籍
新增书籍
6、BookController 类编写 , 方法三:修改书籍
@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
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
修改信息
修改信息
8、BookController 类编写 , 方法四:删除书籍
@RequestMapping("/del/{bookId}")
public String deleteBook(@PathVariable("bookId") int id) {
bookService.deleteBookById(id);
return "redirect:/book/allBook";
}
配置Tomcat,进行运行!
注:
-
如果项目运行出错,可以尝试 -> 打开在IDEA右上角的“项目结构” -> "项目设置"下的"构件" -> 在WEB-INF下新建一个目录叫"lib" -> 选中"lib",点击+号 -> 点击"库文件",选择所有的包 -> 确认
-
部署tomcat时,在"部署"找到"应用程序上下文",输入"/",应用并确认。
注:是在“Deployment”下的“Deploy at the server startup"中点击”+“,然后点击”Artifact“,然后配好,然后在下面的”Application context“那里把内容给位”/“,点击应用,就行了
后续问题详解:
-
关于请求这个项目的接口,如果不想走jsp,那么要这样配
@RestController //让所有请求不走视图解析器 public class UserController { @Autowired//自动注入 private UserService userService; @RequestMapping("/t1")//设置请求资源名称 public String queryAllUser(){ return JSON.toJSONString(userService.queryAllUser()); } } -
关于json,想要使用就要在pom里多加这些
com.alibaba fastjson 1.2.47 javax.xml.bind jaxb-api 2.3.0 com.sun.xml.bind jaxb-impl 2.3.0 com.sun.xml.bind jaxb-core 2.3.0 javax.activation activation 1.1.1 -
json格式传到前端出现中文不能显示的问题,在spring-mvc中添加标签如下即可
application/json;charset=UTF-8