SSM框架——整合ssm
SSM整合
1.准备工作
新建一个普通的Maven项目
建好所有需要的架构层
向pom.xml中导入所有的依赖
com.mchange
c3p0
0.9.5.2
mysql
mysql-connector-java
5.1.47
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
javax.servlet
servlet-api
2.5
javax.servlet.jsp
jsp-api
2.2
javax.servlet
jstl
1.2
junit
junit
4.13.2
org.projectlombok
lombok
1.18.12
provided
尝试在idea内连接数据库
2.配置MyBatis层
- 编写ORM实体类
package mycode.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @classname
* @Author 姬如千泷
* @Date 2021/7/25 23:01
* @Version 1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Book {
private int bookID;
private String bookName;
private int bookCounts;
private String detail;
}
- 编写dao层业务接口(为简便,以一个举例)
package mycode.dao;
import mycode.pojo.Book;
import java.util.List;
/**
* @classname
* @Author 姬如千泷
* @Date 2021/7/25 23:03
* @Version 1.0
*/
public interface BookMapper {
//获取全部书籍信息
List getBooks();
}
- 编写Mapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
- 编写登录.properties文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ssmbuild?useUnicode=true&characterEncoding=utf8&useSSL=false&severTimezone=GMT%2B8&allowPublicKeyRetrieval=true
username=root
password=123456
- 编写Mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
3. 配置Spring层
- 编写业务抽象接口,只是为了给代理类提供接口
package mycode.service;
import mycode.pojo.Book;
import java.util.List;
/**
* @classname
* @Author 姬如千泷
* @Date 2021/7/25 23:35
* @Version 1.0
*/
public interface BookService {
List getBooks();
}
- 编写服务代理类
package mycode.service;
import mycode.dao.BookMapper;
import mycode.pojo.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @classname
* @Author 姬如千泷
* @Date 2021/7/25 23:36
* @Version 1.0
*/
@Service
public class BookImpl implements BookService{
private BookMapper mapper;
public void setBookMapper(BookMapper bookMapper) {
this.mapper = bookMapper;
}
@Override
public List getBooks() {
return mapper.getBooks();
}
}
- 编写spring-dao.xml,用spring对接数据库连接
<?xml version="1.0" encoding="UTF-8"?>
- 编写spring-service.xml,用spring对接dao层服务和事务
<?xml version="1.0" encoding="UTF-8"?>
4.配置Spring-MVC层(注解实现)
- 将maven项目升级为web项目
- 编写spring-mvc.xml
<?xml version="1.0" encoding="UTF-8"?>
- 编写applicationContext.xml整合xml配置
<?xml version="1.0" encoding="UTF-8"?>
- 配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
DispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:resources/applicationContext.xml
1
DispatcherServlet
/
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
encodingFilter
/*
15
到这里基本配置就已经完成了,只需要再对接一下前端就可以了
5. 一个业务实例(取自狂神说java)
- 首页jsp页面
<%--
Created by IntelliJ IDEA.
User: 姬如千泷
Date: 2021/7/26
Time: 0:24
To change this template use File | Settings | File Templates.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
首页
点击进入列表页
- 跳转jsp页面
<%--
Created by IntelliJ IDEA.
User: 姬如千泷
Date: 2021/7/26
Time: 0:33
To change this template use File | Settings | File Templates.
--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
书籍列表
书籍列表 —— 显示所有书籍
书籍编号
书籍名字
书籍数量
书籍详情
操作
${book.getBookID()}
${book.getBookName()}
${book.getBookCounts()}
${book.getDetail()}
- 编写控制类
package mycode.controller;
import mycode.pojo.Book;
import mycode.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.RequestMapping;
import java.util.List;
/**
* @classname
* @Author 姬如千泷
* @Date 2021/7/26 0:29
* @Version 1.0
*/
@Controller
public class BookController {
@Autowired
@Qualifier("BookImpl")
private BookService bookService;
@RequestMapping("/allBook")//代表入口url
public String list(Model model) {
List list = bookService.getBooks();
model.addAttribute("list", list);
return "allBook";
}
}
- 配置tomcat启动项目
6. 可能出现的问题
6.1 java代码变成.java不可执行文件
这说明项目的资源路径配置是存在问题的,我在开发过程中这种问题出现了不下3次,一般如果不及时处理,会报出io错误找不到xml配置文件
解决办法是重新配置资源路径
删除掉原有的资源路径配置
在新建一个即可,一般idea会重新智能匹配资源类型,如果没有自动匹配的话,重新为每一个文件选择对应类型即可
6.2 无法启动tomcat
可能是war包缺失导致,tomcat的war包是项目输出的主要包,必须提前配置好
用idea的Fix自动修复war包
或者自己新建一个war包
加入war包后,依然无法启动的话,检测out输出项目中是否含有lib目录,如果没有,则加入
将依赖全都导入进去
6.3 无法连接数据库问题(即错误中出现jdbc关键字的大部分错)
可能是由于.properties文件的编码问题导致,可以明显在错误中看到root用户名乱码
Access denied for user '?§??|?????3·'@'local......
解决方案一是直接不使用properties导入,明文,但这样安全系数低一些
解决方案二是在idea中设置Properties的编码方式,设置为和idea编码格式一致,一般是utf-8
6.4 如果报错文件指向mapper.xml,那么一般是sql语句出了错误,这时候一般会检查返回类型(如果是返回集合的话,返回值类型要设置为集合元素的类型)、参数类型(多个参数要加@Param注解等)
6.5 如果报一些资源未找到问题
先检测输出文件中有没有对应资源,如xml文件、Properties文件等,如果项目中有,而实际输出文件中没有的话,极有可能是文件被过滤了,这时候需要在pom.xml中设置文件过滤器跳过哪些文件
src/main/resources
**/*.xml
**/*.properties
false
src/main/java
**/*.xml
**/*.properties
false