整合SSM
动动手啊动动脚啊每天深呼吸只是一个简单的整合,项目中没有子模块IDEA+Spring+Spring mvc+Mybatis+MySQL+Maven准备什么叫整合SSM?有一种整合方式就是controller所在的mvc可以使用spring的IOC,事物可以控制mybatis的dao层在整合SSM之前,我们需要明白:单个的spring、spring mvc、mybatis...
·
动动手啊动动脚啊清晨深呼吸
只是一个简单的整合,项目中没有子模块
- IDEA+Spring+Spring mvc+Mybatis+MySQL+Maven
准备
什么叫整合SSM?
- 有一种整合方式就是controller所在的mvc可以使用spring的IOC,事物可以控制mybatis的dao层
在整合SSM之前,我们需要明白:
- 单个的spring、spring mvc、mybatis项目需要什么?
- pom中需要新增哪些包?
- 整合的时候配置文件做了哪些改动?
整合思路及各模块功能
spring
- 实现IOC和事物管理的AOP
- 通过applicationContext.xml的编写
- 扫描注解包,不扫描controller包
- 事物管理
spring mvc
- 完成视图层的请求和响应
- 通过web.xml配置过滤器来解决中文乱码,配置DispatcherServlet来加载spring-mvc.xml
- spring-mvc.xml用来扫描controller包,配置视图解析器,过滤静态资源,自动注解等
- spring和spring mvc整合通过web.xml配置的监听器加载applicationContext.xml来整合
- 此时,web的三大组件:servlet,filter,listener全部具备
mybatis
- 主要通过注解的形式来完成对数据库的操作
- 未整合之前需要配置一个SqlMapConfig.xml来配置关于mybatis相关的数据库连接,以及扫描的xml或注解
- spring和mybatis整合会消除SqlMapConfig.xml,把配置和applicationContext.xml放到一起
SSM整合实例
创建项目环境
- 项目的完整目录如下
- 在pom中导入jar包
<?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.zo10ng</groupId>
<artifactId>ssmDemo0.1</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>ssmDemo0.1 Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<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.0.2.RELEASE</spring.version>
</properties>
<dependencies>
<!--spring-->
<!--spring核心类-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<!--管理bean的类IOC-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<!--spring容器,提供扩展,支持IOC-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!--aop-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.8</version>
</dependency>
<!--spring aop,需要依赖core-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<!--事物管理-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<!--web引用开发用到的核心类,如监听器的ServletContext,外部依赖context和core-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<!--spring mvc框架使用-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!--对spring dao特性进行了扩展-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<!--spring jdbc template-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<!--和Junit配合使用-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!--测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--servlet-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!--jsp-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<!--jstl表达式解析-->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<!--连接池-->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<!--增强注解-->
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>jsr250-api</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<build>
<finalName>ssmDemo0.1</finalName>
<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>
</build>
</project>
- 在resources中的applicationContext.xml用来配置spring和mybatis
<?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:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://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/tx
http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--开启注解扫描,不希望处理controller-->
<context:component-scan base-package="zi10ng">
<!--不扫描Controller的注解-->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!--spring整合mybatis-->
<!--连接池-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/ssm1?useSSL=false&serverTimezone=Hongkong&characterEncoding=utf-8&autoReconnect=true"/>
<property name="user" value="root"/>
<property name="password" value="root"/>
</bean>
<!--SQLSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--包-->
<bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="zi10ng.dao"/>
</bean>
<!--spring声明式事物管理-->
<!--事物管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--事物通知-->
<tx:advice id="txAdvice">
<tx:attributes>
<tx:method name="find*" read-only="true"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<!--aop增强-->
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="execution(* zi10ng.service.impl.ProductServiceImpl.*(..))"/>
</aop:config>
</beans>
- 同时创建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:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
https://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
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--开启注解扫描,只扫描controller-->
<context:component-scan base-package="zi10ng.controller"/>
<!--配置视图解析器-->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--过滤静态资源-->
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:resources mapping="/js/**" location="/js/"/>
<mvc:resources mapping="/img/**" location="/img/"/>
<mvc:resources mapping="/plugins/**" location="/plugins/"/>
<!--spring mvc注解的支持-->
<mvc:annotation-driven/>
</beans>
- 上面两个xml文件都需要通过web.xml来加载
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!--配置监听器,加载application.xml。默认加载webapp里的application-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!--配置过滤器,解决中文乱码-->
<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>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<!--springMvc默认的servlet容器-->
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!--该容器需要再次加载资源包中的xml文件去读取注解等信息-->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
编写service,controller和dao
- dao
package zi10ng.dao;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Service;
import zi10ng.domian.Product;
import java.util.List;
/**
* @author Zi10ng
* @date 2019年7月18日16:15:25
*/
public interface ProductDao {
/**
* 查询所有产品
* @return list形式
*/
@Select("select * from product")
List<Product> findAll();
/**
* 通过id删除
* @param id id
*/
@Delete("delete from product where id = #{id}")
void deleteById(int id);
}
- service
package zi10ng.service;
import zi10ng.domian.Product;
import java.util.List;
/**
* @author zi10ng
* @date 2019年7月18日16:22:06
*/
public interface ProductService {
/**
* 查询所有产品
* @return list形式
*/
List<Product> findAll();
/**
* 通过id删除
* @param id id
*/
void deleteById(int id);
}
- controller
package zi10ng.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import zi10ng.domian.Product;
import zi10ng.service.ProductService;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
/**
* @author Zi10ng
* @date 2019年7月18日16:24:18
*/
@Controller
@RequestMapping("/product")
public class ProductController {
@Autowired
private ProductService productService;
private final String LIST = "list";
@RequestMapping("/findAll")
public String findAll(Model model){
List<Product> all = productService.findAll();
model.addAttribute("list",all);
return LIST;
}
@RequestMapping(value = "/delete",params = "id")
public void deleteById(int id, HttpServletRequest request, HttpServletResponse response) throws IOException {
productService.deleteById(id);
response.sendRedirect(request.getContextPath() + "/product/findAll");
}
}
项目结构
- 注:jsp那里写错了,应该是返回到过滤器,然后再监听,之后再发送给browser
更多推荐
已为社区贡献1条内容
所有评论(0)