一、SSM各部分负责的功能
SpringMVC:负责MVC设计模式的实现。也就是客户端与Java程序之间的交互
Mybatis:负责数据持久层的实现。也就是Java程序与数据库的交互
Spring:负责管理SpringMVC和Mybatis相关对象的创建和依赖注入,同时将我们写的类交给Spring来管理
二、Maven整合SSM过程
1、创建maven工程
2、在pom,xml中添加相关的依赖
org.springframework
spring-webmvc
5.0.11.RELEASE
org.springframework
spring-jdbc
5.0.11.RELEASE
org.springframework
spring-aop
5.0.11.RELEASE
org.springframework
spring-aspects
5.0.11.RELEASE
org.mybatis
mybatis
3.4.5
org.mybatis
mybatis-spring
1.3.1
mysql
mysql-connector-java
8.0.11
c3p0
c3p0
0.9.1.2
jstl
jstl
1.2
javax.servlet
javax.servlet-api
3.1.0
junit
junit
4.11
test
3、web.xml中配置SpringMVC、Spring、字符编码过滤器、加载静态资源。
Archetype Created Web Application
contextConfigLocation
classpath:spring.xml
org.springframework.web.context.ContextLoaderListener
dispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc.xml
dispatcherServlet
/
characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
characterEncodingFilter
/*
default
*.js
default
*.css
default
*.jpg
4、在spring.xml中配置Mybatis和Spring的整合
5、在mybatisConfig.xml中配置一些Mybatis的辅助信息,比如打印SQL等。
6、配置springmvc.xml
7、创建数据库表并输入测试数据
8、编写实体类dao与数据表做ORM映射
public class Customer {
private Integer id;
private String name;
private Integer age;
@Override
public String toString() {
return "Customer{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
public void setId(Integer id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
public Integer getId() {
return id;
}
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
}
9、编写mapping.xml文件
10、编写mapper文件与mapping做映射
public interface CustomerRepository {
public List findAll();
}
11、编写服务类接口,方便管理
public interface CustomerService {
public List findAll();
}
12、编写服务类接口实现类
@Service
public class CustomerServiceImpl implements CustomerService {
@Autowired
private CustomerRepository customerRepository;
@Override
public List findAll() {
return customerRepository.findAll();
}
}
13、编写Controller,映射请求
@Controller
@RequestMapping("/customer")
public class CustomerHandler {
@Autowired
private CustomerService customerService;
@RequestMapping("/findAll")
public ModelAndView findAll(){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("showMessage");
modelAndView.addObject("list",customerService.findAll());
System.out.println(customerService.findAll());
return modelAndView;
}
}
14、编写结果展示页面showMessage.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page isELIgnored="false" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
Title
${customer.id}-----${customer.name}--------${customer.age}
15、将项目部署到tomcat上去
16、启动Tomcat,访问http://localhost:8080/SSMProject_war/customer/findAll
也可以在部署项目的时候修改项目的根路径
重启Tomcat服务器,访问地址http://localhost:8080/SSMProject_war/customer/findAll改为http://localhost:8080/customer/findAll
三、启动服务器运行时可能出现的问题
1、mapper接口与mapping.xml配置文件无效绑定问题。
使用maven或Jenkins打包部署到远程服务器上时出现的绑定错误,异常信息为: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
首先,给定的异常提示信息并不精准,有多个错误原因都会抛出该异常。mybatis出现这个问题,通常是由Mapper interface和对应的xml文件的定义对应不上引起的,这时就需要仔细检查对比包名、xml中的namespace、接口中的方法名称等是否对应。
我之前就因为称忘记在xml标签的id属性中添加方法名或写错方法名而出现这个错误。
出现这个错误时,按以下步骤检查一般就会解决问题: 1:检查xml文件所在package名称是否和Mapper interface所在的包名一一对应; 2:检查xml的namespace是否和xml文件的package名称一一对应; 3:检查方法名称是否对应; 通过使用maven构建项目,并将项目war包部署到Tomcat时里面缺少Mapper对应的xml文件,也就是没有把xml文件打包进去。解决办法是,在pom.xml文件中的build标签中添加如下代码,显示的强制将xml文件打到war包中:
src/main/java
**/*.xml
true
2、解决无法获取数据库连接 java.sql.SQLException: Connections could not be acquired from the underlying database
由于使用的mysql是5.6.24版本,而在pom.xml中配置的是版本是8.0.11,导致驱动版本与mysql版本不一致出现无法获取sql的底层连接
修改驱动版本为当前MySQL版本以下即可解决
mysql mysql-connector-java 5.1.49
但是此时要注意修改spring.xml中的数据库驱动信息
MySQL6之后的版本都是要指定时区serverTimezone的
spring: datasource: driverClassName: com.mysql.cj.jdbc.Driver url: jdbc:mysql://192.168.0.100:3306/easyexcel?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false username: root password: 123456
3、控制台输出的SQL语句出现中文乱码
首先修改IDEA的编码格式为UTF-8
其次修改Tomcat的参数编码格式为UTF-8:-Dfile.encoding=UTF-8
然后重启Tomcat即可