大家好,又见面了,我是你们的朋友全栈君。
文章目录:
1.SSM整合思路
1.1 两个容器的创建
1.2 SSM整合开发的步骤
2.SSM整合开发
2.1 项目的大体结构
2.2 使用Navicat创建一个表(student2)
2.3 IDEA中使用maven创建一个web项目
2.4 在pom.xml文件中添加相关依赖
2.5 在web.xml文件中。声明容器对象
2.6 创建项目中特定的包(entity、dao、service、controller)
2.7 编写mybatis、spring、springmvc的配置文件
2.7.1 mybatis
2.7.2 spring
2.7.3 springmvc
2.8 编写Java代码(实体类、dao接口和对应的mapper文件、service类、controller类)
2.8.1 创建一个实体类
2.8.2 创建实体类对应的dao接口和接口对应的mapper文件
2.8.3 创建dao接口对应的service接口和实现类
2.8.4 创建一个控制器类(接收并处理请求)
2.9 创建视图文件(jsp)
2.9.1 首页(index.jsp)
2.9.2 注册学生页面(addStudent.jsp)
2.9.3 注册成功和失败的页面(success.jsp、fail.jsp)
2.9.4 查询学生页面(queryStudent.jsp)
2.10 为项目配置tomcat,启动测试!!!
2.10.1 注册学生的测试结果
2.10.2 查询学生的测试结果
3.写在结尾!!!
1.SSM整合思路
SSM:Spring SpringMVC MyBatis,就是使用这三个框架的优势功能来完成一些项目的构建。三个框架分别对应了三层架构中的每一层。Spring: 业务逻辑层;SpringMVC:视图层;MyBatis:持久层。 SSM整合了话,就需要把对象交给容器,让容器去创建项目中要使用的Java对象,目前有两个容器。 第一个:Spring容器,Spring容器管理的是service和dao等对象,是业务逻辑层对象的容器。 第二个:SpringMVC容器,这个容器管理的是控制器对象,也就是视图层的对象。
1.1 两个容器的创建
Spring容器的创建:在web.xml文件中声明 监听器 ContextLoaderListener ,这个功能框架中已经写好了,就是创建Spring的容器对象 WebApplicationContext,在创建 WebApplicationContext 对象时,读取Spring的配置文件,遇到<bean>标签或者注解,就可以创建service、dao等对象,这些对象最终都放在Spring容器中。 SpringMVC容器的创建:在web.xml文件中声明 中央调度器 DispatcherServlet,在这个servlet的 init() 方法中,创建了容器对象WebApplicationContext,在创建 WebApplicationContext 对象时,读取SpringMVC的配置文件,如果遇到相应的注解,则创建控制器对象,创建好的对象放在SpringMVC容器中。
1.2 SSM整合开发的步骤
- 使用Navicat创建一个要操作的表。(也可以直接在IDEA中写sql语句来创建)
- IDEA中使用maven创建一个web项目。
- 在pom.xml文件中添加相关依赖。(spring、spring事务、springmvc、mybatis、mybatis-spring、mysql驱动、servlet、jsp、jackson、druid)
- 在web.xml文件中声明容器对象
1)声明spring的监听器 ContextLoaderListener:创建spring容器对象(service、dao)。 2)声明springmvc的中央调度器 DispatcherServlet:创建springmvc容器对象(controller)。 3)声明字符集过滤器 CharacterEncodingFilter,解决post请求乱码的问题。
- 创建项目中特定的包:entity、dao、service、controller。(package)
- 编写mybatis配置文件、spring配置文件、springmvc配置文件。(xml)
- 编写Java代码:实体类、dao接口和对应的mapper文件、service类、controller类,使用注解声明对象、给对象赋值。
- 创建视图文件。(各种 jsp 页面,发起请求)
- 启动 tomcat,测试!!!
2.SSM整合开发
2.1 项目的大体结构
在这个SSM整合开发的项目中,用到了这些内容(JavaSE就不多说了。。。Java Web相关的有:JDBC、HTML、JS、json、jQuery、Ajax、Tomcat、Servlet、JSP、EL,最后是框架:MyBatis、Spring、SpringMVC) 。
2.2 使用Navicat创建一个表(student2)
2.3 IDEA中使用maven创建一个web项目
2.4 在pom.xml文件中添加相关依赖
代码语言:javascript复制依赖项比较多,毕竟是三个框架整合在一起了!!!
<!-- servlet依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
代码语言:javascript复制 <!-- jsp依赖 -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2.1-b03</version>
<scope>provided</scope>
</dependency>
代码语言:javascript复制 <!-- jackson依赖 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0</version>
</dependency>
代码语言:javascript复制 <!-- spring依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
代码语言:javascript复制 <!-- spring事务依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
代码语言:javascript复制 <!-- springmvc依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
代码语言:javascript复制 <!-- mybatis依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
代码语言:javascript复制 <!-- mybatis-spring集成依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
代码语言:javascript复制 <!-- mysql驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
代码语言:javascript复制 <!-- druid连接池依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
2.5 在web.xml文件中。声明容器对象
代码语言:javascript复制<!-- 声明spring监听器 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/conf/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
代码语言:javascript复制<!-- 声明springmvc的中央调度器 -->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/conf/dispatcherServlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
代码语言:javascript复制<!-- 声明字符集过滤器 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2.6 创建项目中特定的包(entity、dao、service、controller)
2.7 编写mybatis、spring、springmvc的配置文件
2.7.1 mybatis
代码语言:javascript复制jdbc.url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=12345678
代码语言:javascript复制<?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">
<configuration>
<!-- 设置日志 -->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<mappers>
<!-- 加载dao包下的所有mapper文件 -->
<package name="com.songzihao.dao"/>
</mappers>
</configuration>
2.7.2 spring
代码语言:javascript复制<?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: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/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- spring配置文件:声明service、dao、工具类、事务配置 -->
<!-- 加载外部属性配置文件 -->
<context:property-placeholder location="classpath:/conf/jdbc.properties" />
<!-- 声明组件扫描器 -->
<context:component-scan base-package="com.songzihao.service" />
<!-- 创建数据源 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!-- 创建SqlSessionFactory对象 -->
<bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:/conf/mybatis.xml" />
</bean>
<!-- 创建SqlSession对象,通过反射机制加载dao接口对应的mapper文件 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="factory" />
<property name="basePackage" value="com.songzihao.dao" />
</bean>
<!-- 事务配置 -->
</beans>
2.7.3 springmvc
代码语言:javascript复制<?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:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- springmvc配置文件:声明controller、视图解析器等web开发中的对象 -->
<!-- 声明组件扫描器 -->
<context:component-scan base-package="com.songzihao.controller" />
<!-- 声明视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
<!-- 声明springmvc注解驱动 -->
<mvc:annotation-driven />
</beans>
2.8 编写Java代码(实体类、dao接口和对应的mapper文件、service类、controller类)
2.8.1 创建一个实体类
代码语言:javascript复制package com.songzihao.entity;
/**
*
*/
public class Student {
private Integer id;
private String name;
private Integer age;
//getter and setter
//toString
}
2.8.2 创建实体类对应的dao接口和接口对应的mapper文件
代码语言:javascript复制package com.songzihao.dao;
import com.songzihao.entity.Student;
import java.util.List;
/**
*
*/
public interface StudentDao {
int insertStudent(Student student);
List<Student> selectStudent();
}
代码语言:javascript复制<?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.songzihao.dao.StudentDao">
<!-- 使用insert、update、delete、select标签编写sql语句 -->
<insert id="insertStudent">
insert into student2(name,age) values (#{name},#{age})
</insert>
<select id="selectStudent" resultType="com.songzihao.entity.Student">
select id,name,age from student2 order by id asc
</select>
</mapper>
2.8.3 创建dao接口对应的service接口和实现类
代码语言:javascript复制package com.songzihao.service;
import com.songzihao.entity.Student;
import java.util.List;
/**
*
*/
public interface StudentService {
int addStudent(Student student);
List<Student> queryStudent();
}
代码语言:javascript复制package com.songzihao.service.impl;
import com.songzihao.dao.StudentDao;
import com.songzihao.entity.Student;
import com.songzihao.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
*
*/
@Service
public class StudentServiceImpl implements StudentService {
/**
* studentDao是引用类型,其对象是在spring配置文件中创建
* 引用类型自动注入,这里使用注解 @Autowired 或者 @Resource
*/
@Autowired
private StudentDao studentDao;
@Override
public int addStudent(Student student) {
int rows=studentDao.insertStudent(student);
return rows;
}
@Override
public List<Student> queryStudent() {
List<Student> list=studentDao.selectStudent();
return list;
}
}
2.8.4 创建一个控制器类(接收并处理请求)
代码语言:javascript复制package com.songzihao.controller;
import com.songzihao.entity.Student;
import com.songzihao.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import java.util.List;
/**
*
*/
@Controller
@RequestMapping(value = "/student")
public class StudentController {
/**
* 声明service对象,调用其中的方法
* 引用类型自动注入,这里使用注解 @Autowired 或者 @Resource
*/
@Autowired
private StudentService studentService;
//添加学生
@RequestMapping(value = "/addStudent.do")
public ModelAndView addStudent(Student student) {
ModelAndView mv=new ModelAndView();
//调用service,处理业务逻辑方法,把处理结果返回给用户
int rows=studentService.addStudent(student);
String msg="";
if (rows>0) {
msg="注册成功!!!";
mv.addObject("msg",student.getName() "," student.getAge());
mv.setViewName("success");
}else {
msg="注册失败!!!";
mv.addObject("msg",msg);
mv.setViewName("fail");
}
return mv;
}
//查询学生
@RequestMapping(value = "/queryStudent.do")
@ResponseBody
public List<Student> queryStudent() {
List<Student> list=studentService.queryStudent();
return list;
}
}
2.9 创建视图文件(jsp)
2.9.1 首页(index.jsp)
代码语言:javascript复制<%@ page contentType="text/html;charset=utf-8" language="java" %>
<%
String basePath=request.getScheme() "://" request.getServerName()
":" request.getServerPort() request.getContextPath() "/";
%>
<html>
<head>
<base href="<%=basePath%>">
<title>SSM</title>
</head>
<body>
<div align="center">
<p>SSM整合开发的例子</p>
<table>
<tr>
<td><a href="addStudent.jsp">注册学生</a></td>
<td><br/></td>
<td><a href="queryStudent.jsp">查询学生</a></td>
</tr>
</table>
</div>
</body>
</html>
2.9.2 注册学生页面(addStudent.jsp)
代码语言:javascript复制<%@ page contentType="text/html;charset=utf-8" language="java" %>
<html>
<head>
<title>添加学生</title>
</head>
<body>
<div align="center">
<p>注册学生</p>
<form action="student/addStudent.do" method="post">
<table>
<tr>
<td>姓名:</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>年龄:</td>
<td><input type="text" name="age"></td>
</tr>
<tr>
<td>提交:</td>
<td><input type="submit" value="注册"></td>
</tr>
</table>
</form>
</div>
</body>
</html>
2.9.3 注册成功和失败的页面(success.jsp、fail.jsp)
代码语言:javascript复制<%@ page contentType="text/html;charset=utf-8" language="java" %>
<html>
<head>
<title>$</title>
</head>
<body>
<h3>结果:${msg}</h3>
</body>
</html>
代码语言:javascript复制<%@ page contentType="text/html;charset=utf-8" language="java" %>
<html>
<head>
<title>$</title>
</head>
<body>
<h3>结果:${msg}</h3>
</body>
</html>
2.9.4 查询学生页面(queryStudent.jsp)
代码语言:javascript复制<%@ page contentType="text/html;charset=utf-8" language="java" %>
<%
String basePath=request.getScheme() "://" request.getServerName()
":" request.getServerPort() request.getContextPath() "/";
%>
<html>
<head>
<base href="<%=basePath%>">
<title>查询学生</title>
<script type="text/javascript" src="js/jquery-3.6.0.js"></script>
<script type="text/javascript">
$(function () {
$("#myBtn").on("click",function () {
$.ajax({
url: "student/queryStudent.do",
dataType: "json",
success: function (resp) {
$("#stuinfo").empty();
$.each(resp,function (i,n) {
$("#stuinfo").append("<tr><td>" n.id "</td>"
"<td>" n.name "</td>"
"<td>" n.age "</td></tr>");
})
}
})
})
})
</script>
</head>
<body>
<div align="center">
<p>查询学生 <button id="myBtn">获取学生信息</button></p>
<table>
<thead>
<tr>
<td>id</td>
<td>姓名</td>
<td>年龄</td>
</tr>
</thead>
<tbody id="stuinfo">
</tbody>
</table>
</div>
</body>
</html>
2.10 为项目配置tomcat,启动测试!!!
2.10.1 注册学生的测试结果
2.10.2 查询学生的测试结果
3.写在结尾!!!
以上就是整个SSM整合开发的详细步骤,在这当中,只是简单的实现了注册学生、查询学生的功能,还有很多的漏洞、功能不足的地方。。。 毕竟我也是初学者,还希望大佬们勿喷!!!(