1.先进行思维导图的设计,设计出整体的框架结构,页面关系
2.依据导图分析数据库中的表格,利用PD设计表格,添加联系,注意主键,外键的设置
3.导出PD的SQL文件,根据文件导入navicat创建对应的表格。
4.创建一个maven的webapp的项目
5.配置ssm依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ssm</groupId>
<artifactId>student_system</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<spring.version>5.2.7.RELEASE</spring.version>
</properties>
编译器的版本要改成1.8
spring的版本写到上面,便于整体修改
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
Spring的依赖,spring-mvc的依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
mybatis包相关整合
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
-mybatis-spring桥接包
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.5</version>
</dependency>
</dependencies>
<build>
<finalName>student_system</finalName>
</build>
</project>
在编辑的时候把mapper文件给漏掉没有出现,会报Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid 错误,所以这时应该在依赖中加入以下依赖,手动导入xml文件,同时clean
静态资源导出模板
<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>
"**" 表示任意级目录
"*" 表示任意文件
意思就是把所有 /src/main/java 中所有 xml 文件也打包进包中,
当使用 mybatis 这种需要写 xml 的框架的时候会要用到
以下可以删除
<name>test_ssm01 Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
6.确定项目的文件结构,创建完成一些基本文件夹
6.配置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"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
</beans>
7.配置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:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
</beans>
8.部署tomcat服务器
部署时要选择探索版,然后域名要简单一下,然年后选择时时更新类。
9.在web.xml中挂载spring,springmvc, 过滤器
<?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_3_1.xsd"
version="3.1">
<servlet>
<!-- 1、配置前端控制器DispatcherServlet 加载Spring-mvc.xml配置文件,否则不会载入-->
<servlet-name>student_system</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 前端控制器参数-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<!-- 启动时立刻加载-->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 配置Servlet映射-->
<servlet-mapping>
<servlet-name>student_system</servlet-name>
<url-pattern>/</url-pattern>
<!--/*拦截很多,/拦截一部分-->
</servlet-mapping>
<!-- 加载spring配置文件-->
<!-- 上下文参数-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 编码过滤器-->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!-- spring已经写好的类-->
<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>
</web-app>
不在这里配置,是不会挂载的,注意监听器不要写错
10.写一个测试类查看是否web.xml载入成功
在控制台打印出来,说明测试成功!
11.配置数据库信息db.properties(根据mysql-connector-java版本采用不同格式)
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/student_system?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
jdbc.username=root
jdbc.password=111111
注意driver格式,url的正确性,以及参数
打开Database配置好,然后可以查看url地址
12.配置mybatis(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">
<!--mybatis配置文件-->
<configuration>
</configuration>
为了配合mybatis补充applicationContext
操作步骤
1、在applicationContex中加载db.properties
这样/src/main/resources/*.properties文件就会被spring加载
如果想使用多个配置文件,可以添加order字段来进行排序
<context:property-placeholder location="classpath:db.properties" />
2、在applicationContex中,配置数据源,配置前需要加入数据池依赖
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
3、在applicationContex中,获取SqlSessionFactory工厂
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
<property name="mapperLocations">
<list>
<value>classpath:com/ssm/dao/*.xml</value>
</list>
</property>
<!--配置分页插件-->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<value>
helperDialect=mysql
</value>
</property>
</bean>
</array>
</property>
</bean>
4、在applicationContex中,配置扫描Mapper文件,dao层的映射
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.ssm.dao"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
注意:application映射dao层,如果出现Could not autowire. No beans of 'UserDao' type found. 错误很有可能就是映射路径不对。
数据库驱动以及数据池依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.7.0</version>
</dependency>
插件需要导入分页插件的依赖,
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.2.0</version>
</dependency>
10.补充两个映射,完善一个User
①创建User实体类
package com.ssm.entity;
public class User {
private Integer id;
private String userName;
private String userPwd;
private String name;
private String remark;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", userName='" + userName + '\'' +
", userPwd='" + userPwd + '\'' +
", name='" + name + '\'' +
", remark='" + remark + '\'' +
'}';
}
}
②创建UserDao接口(方法名称要和xml的id相对应)
package com.ssm.dao;
import com.ssm.entity.User;
public interface UserDao {
public int create(User user);
}
insert的结果,如果成功返回的是1(可能是这个1是影响的条数),失败返回的是exception,而不是0。
③创建UserMapper.xml进行绑定
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.ssm.dao.UserDao">
<insert id="create" parameterType="com.ssm.entity.User" useGeneratedKeys="true" keyProperty="id">
insert into tb_user(user_name,user_pwd,name,remark) values(#{userName},#{userPwd},#{name},#{remark})
</insert>
</mapper>
useGeneratedKeys="true" keyProperty="id"是把数据库自动生成的id加入实体类中。
④实现业务层(创建dao对象,对方法进行调用)
package com.ssm.service;
import com.ssm.dao.UserDao;
import com.ssm.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserDao userDao;
public int create(User user) {
return userDao.create(user);
}
}
⑤实现控制层(确保所有请求经过,并且转发调用相应的服务层)
package com.ssm.controller;
import com.ssm.entity.User;
import com.ssm.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/create")
public void create(User user)
{
userService.create(user);
}
}
11.检查映射情况
①在UserMapper.xml中应该有对dao层的映射
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.ssm.dao.UserDao">
<insert id="create" parameterType="com.ssm.entity.User" useGeneratedKeys="true" keyProperty="id">
insert into tb_user(user_name,user_pwd,name,remark) values(#{userName},#{userPwd},#{name},#{remark})
</insert>
</mapper>
②在applicationContext.xml开头有对db.properties和Service层的映射
<context:component-scan base-package="com.ssm.service"/>
<context:property-placeholder location="classpath:db.properties" />
结尾有对dao的映射
<!-- 4、在applicationContex中,配置扫描Mapper文件,dao层的映射-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.ssm.dao"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
③spring-mvc中有对控制层的映射
<context:component-scan base-package="com.ssm.controller"/>
12.测试框架运行情况(可以使用postman)
明显当postman出现404,但是插入成功时,SSM搭建成功了。
启动不成功:Cannot resolve reference to bean 'sqlSesssionFactory' while setting bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'sqlSesssionFactory' available
找了很久的错误,注意服务器日志,然后自己阅读,仔细思考报错的意思是什么,才能更快更准找到错误。