1、SSM原理图
首先前端页面发送请求,然后通过前端控制器找到对应的Controller,Controller调用Service的方法,Service调用Dao层的方法,Dao方法对数据库操作,将查询的值返回到Controller进行处理。最后响应页面。 Controller、Service、Dao分别对应springMVC、spring、mybatis框架。这也是MVC三层模型的基本思想。 分别用spring去整合mybatis和springMVC。
2、SSM各文件的关系
由于这里的配置比较多,所以大家要明确这里的配置文件之间的关系。下面就一个一个来说如何配置。下面的配置可以结合这个图来看。
3、各配置文件
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 xmlns = " http://java.sun.com/xml/ns/javaee"
xmlns: xsi= " http://www.w3.org/2001/XMLSchema-instance"
xsi: schemaLocation= " http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version = " 3.0" >
< display-name> Archetype Created Web Application</ display-name>
< 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:springmvc.xml
classpath:applicationContext.xml
</ param-value>
</ init-param>
< load-on-startup> 1</ load-on-startup>
</ servlet>
< servlet-mapping>
< servlet-name> dispatcherServlet</ servlet-name>
< url-pattern> /</ url-pattern>
</ servlet-mapping>
< 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> forceEncoding</ param-name>
< param-value> true</ param-value>
</ init-param>
</ filter>
< filter-mapping>
< filter-name> characterEncodingFilter</ filter-name>
< url-pattern> /*</ url-pattern>
</ filter-mapping>
</ web-app>
这里的web.xml文件时tomcat启动时,就加载的文件。一切的请求都由前端控制器支配,初始化时,加载springMVC.xml和applicationContext.xml文件。这里还有一个编码的配置器。
springMVC.xml文件
<?xml version="1.0" encoding="UTF-8"?>
< beans xmlns = " http://www.springframework.org/schema/beans"
xmlns: mvc= " http://www.springframework.org/schema/mvc"
xmlns: context= " http://www.springframework.org/schema/context"
xmlns: xsi= " http://www.w3.org/2001/XMLSchema-instance"
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
" >
< context: component-scan base-package = " com.maven.controller" />
< mvc: annotation-driven/>
< bean id = " internalResourceViewResolver" class = " org.springframework.web.servlet.view.InternalResourceViewResolver" >
< property name = " prefix" value = " /WEB-INF/pages/" > </ property>
< property name = " suffix" value = " .jsp" > </ property>
</ bean>
< bean class = " org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
< bean class = " org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />
< mvc: default-servlet-handler/>
</ beans>
注解扫描需要用base-package指定我们要扫描的包路径,一般指向controller。 开启springMVC框架的注解的支持,是固定写法。 internalResourceViewResolver视图解析器,两个property配置的是文件的路径以及后缀名。 映射处理器和处理器适配器一般直接加上就可以了。 释放静态资源,可以这样写,当然还有另一种写法<mvc:resource…。指定对应的静态资源。html、css、js之类的。
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: aop= " http://www.springframework.org/schema/aop"
xmlns: context= " http://www.springframework.org/schema/context"
xmlns: tx= " http://www.springframework.org/schema/tx"
xsi: schemaLocation= " http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd" >
< bean id = " dataSource" class = " com.mchange.v2.c3p0.ComboPooledDataSource" >
< property name = " driverClass" value = " com.mysql.jdbc.Driver" />
< property name = " jdbcUrl" value = " jdbc:mysql://localhost:3306/maven?useUnicode=true& characterEncoding=utf8" />
< property name = " user" value = " root" />
< property name = " password" value = " 111111" />
</ bean>
< bean id = " sqlSessionFactoryBean" class = " org.mybatis.spring.SqlSessionFactoryBean" >
< property name = " dataSource" ref = " dataSource" />
</ bean>
< bean id = " mapperScanner" class = " org.mybatis.spring.mapper.MapperScannerConfigurer" >
< property name = " sqlSessionFactoryBeanName" value = " sqlSessionFactoryBean" />
< property name = " basePackage" value = " com.maven.dao" />
</ bean>
< context: component-scan base-package = " com.maven.service" />
< bean id = " dataSourceTransactionManager" class = " org.springframework.jdbc.datasource.DataSourceTransactionManager" >
< property name = " dataSource" ref = " dataSource" > </ property>
</ bean>
< tx: advice id = " advice" transaction-manager = " dataSourceTransactionManager" >
< tx: attributes>
< tx: method name = " save*" propagation = " REQUIRED" />
< tx: method name = " update*" propagation = " REQUIRED" />
< tx: method name = " delete*" propagation = " REQUIRED" />
< tx: method name = " find*" read-only = " true" />
</ tx: attributes>
</ tx: advice>
< aop: config>
< aop: pointcut id = " pointcut" expression = " execution(* com.maven.service.Impl.*.*(..))" />
< aop: advisor advice-ref = " advice" pointcut-ref = " pointcut" />
</ aop: config>
</ beans>
数据库的配置信息、配置sqlSession对象的工厂、配置accountDao接口所在的包,这里都可以依据自己的数据库信息修改。 然后是开启spring注解扫描、配置事务管理器、配置事务通知、配置切面。
完整项目目录
IUserDao接口
package com. maven. dao;
import com. maven. domain. User;
public interface IUserDao {
public User findAllById ( int id) ;
}
<?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.maven.dao.IUserDao" >
< select id = " findAllById" parameterType = " int" resultType = " com.maven.domain.User" >
select * from user where id = #{id};
</ select>
</ mapper>
User实体类
package com. maven. domain;
public class User {
private int id;
private String name;
private int age;
}
IUserService
package com. maven. service;
import com. maven. domain. User;
import org. springframework. stereotype. Service;
public interface IUserService {
public User findAllById ( int id) ;
}
serServiceImpl
package com. maven. service. Impl;
import com. maven. dao. IUserDao;
import com. maven. domain. User;
import com. maven. service. IUserService;
import org. springframework. beans. factory. annotation. Autowired;
import org. springframework. stereotype. Service;
@Service
public class UserServiceImpl implements IUserService {
@Autowired
private IUserDao userDao;
public User findAllById ( int id) {
return userDao. findAllById ( id) ;
}
}
UserController
package com. maven. controller;
import com. maven. domain. User;
import com. maven. service. IUserService;
import com. maven. service. Impl. UserServiceImpl;
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 javax. annotation. Resource;
@Controller
@RequestMapping ( "/user" )
public class UserController {
@Autowired
private IUserService userService;
@RequestMapping ( "/test" )
public String findDetail ( Model model) {
User user = userService. findAllById ( 1 ) ;
System. out. println ( user) ;
model. addAttribute ( "" , user) ;
return "success" ;
}
}
测试类,这个大家可以自己写。
jsp
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2019/8/7
Time: 13:29
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
< html>
< head>
< title> Title</ title>
</ head>
< body>
< a href = " user/test" > 点击我</ a>
</ body>
</ html>
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2019/8/7
Time: 13:28
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
< html>
< head>
< title> Title</ title>
</ head>
< body>
< p> success</ p>
</ body>
</ html>
最后