12SSM整合
- u 三大框架基本概念
spring、SpringMVC、Mybatis
- u 整合思路
- u 环境准备
- u 工程结构
- u SPRING + SPING MVC + MYBATIS 三大框架整合
- ü Mybatis和spring进行整合
- ü Spring整合service
- ü 整合springMVC
- ü 配置前端控制器
- ü 编写登录页面
- ü 数据库配置和日志配置
- ü 项目部署
1 三大框架基本概念
- spring:
Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
- SpringMVC:
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
- Mybatis:
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。MyBatis是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
2 整合思路
SSM系统架构 :

spring将各层进行整合
- 通过spring管理持久层的mapper(相当于dao接口)
- 通过spring管理业务层service,service中可以调用mapper接口。
- spring进行事务控制。
- 通过spring管理表现层Handler,Handler中可以调用service接口。
mapper、service、Handler都是javabean。
第一步:整合dao层
ü mybatis和spring整合,通过spring管理mapper接口。
ü 使用mapper的扫描器自动扫描mapper接口在spring中进行注册。
第二步:整合service层
ü 通过spring管理service接口。
ü 使用配置方式将service接口配置在spring配置文件中。
ü 实现事务控制。
第三步:整合springMVC
ü 由于springMVC是spring的模块,不需要和spring整合,直接把springMVC加入到项目中即可。
下面通过SSM框架实现一个登录样例,以更好理解框架整合。
3 环境准备
数据库环境:oracle 11g
准备一个用户表,如“userssm”有用户名和用户密码字段,表里插入几条用户数据,供登录验证使用。
java环境:jdk1.6
springMVC版本:spring 3.2
所需要的jar包:
数据库驱动包:ojdbc14.jar
mybatis的jar包
mybatis和spring整合包
log4j包
dbcp数据库连接池包
spring4.1.6所有jar包
jstl包


4 工程结构

5 SPRING + SPING MVC + MYBATIS 三大框架整合
5.1 Mybatis和spring进行整合
1.sqlMapConfig.xml:mybatis自己的配置文件
<?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>
<!-- 配置别名 -->
<typeAliases>
<!-- 批量扫描别名 -->
<package name="com.inspur.ssm.pojo"></package>
</typeAliases>
<!-- 配置mapper:由于使用spring和mybatis的整合包进行mapper扫描,这里就不需要配置了,必须遵循:mapper.xml和mapper.java文件同名且在同一个目录 -->
<!-- <mapper></mapper> -->
</configuration>
2.applicationContext-dao.xml:(1)数据源(2)SqlSessionFactory(3)mapper扫描器
<!-- 加载配置文件db.properties中的内容,db.properties文件中key命名要有一定命名规则 -->
<context:property-placeholder location="classpath:db.properties" />
<!-- 数据源,使用dbcp -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="maxActive" value="10" />
<property name="maxIdle" value="5" />
</bean>
<!-- sqlSessionfactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 加载mybatis的配置文件 -->
<property name="configLocation" value="classpath:mybatis/sqlMapConfig.xml"></property>
<!-- 数据源 -->
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- mapper批量扫描 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 扫描包路径,如果需要扫描多个包,中间使用半角逗号隔开 -->
<property name="basePackage" value="com.inspur.ssm.mapper"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
3.pojo类
public class Userssm {
private String id;
private String username;
private String password;
……
get/set……
}
4.Mapper.java

5.Mapper.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.inspur.ssm.mapper.UserssmMapper" >
<select id="findUser" resultType="userssm" parameterType="userssm" >
select t1.id,
t1.username,
t1.role,
t1.realname,
t1.password
from USERSSM t1
where username = #{username}
and password = #{password}
</select>
</mapper>
5.2 Spring整合service
让spring管理service接口
1.定义service接口
@Resource
public interface LoginService {
//用户查询列表
public Userssm findUser(Userssm userssm)throws Exception;
}
2.定义service实现类
@Service("loginService")
public class LoginServiceImpl implements LoginService{
@Autowired
private UserssmMapper userssmMapper;
@Override
public Userssm findUser(Userssm userssmQuery) throws Exception {
Userssm userssm = userssmMapper.findUser(userssmQuery);
if(userssm == null){
throw new Exception("用户信息不存在");
}else{
return userssm;
}
}
}
3.在spring容器配置service(applicationContext-service.xml)
<!– 原来service配置方式 --> <bean id=“loginService" class="com.inspur.ssm.service.impl.LoginServiceImpl"></bean>
注:后续整合springMVC,可以使用包扫描器将service配置取代。该步骤可以省略。
4.事务控制(applicationContext-transaction.xml)
<!-- 事务管理器
对mybatis操作数据库的事务控制,spring使用jdbc的事务控制类 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 数据源
DataSource在applicationContext-dao.xml中配置了 -->
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 通知 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="insert*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="select*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>
<!-- aop -->
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="execution(* com.inspur.ssm.service.impl.*.*(..))"/>
</aop:config>
5.3 整合springMVC
1.SpringMVC配置
创建springmvc.xml文件,配置处理器映射器、适配器、视图解析器。
<!-- 可以扫描controller、service、... 这里让扫描controller,指定controller的包 -->
<context:component-scan base-package="com.inspur.ssm.*"></context:component-scan>
<!-- 静态资源解析 包括:js,css,img,html... -->
<mvc:resources location="/js/" mapping="/js/**"></mvc:resources>
<mvc:resources location="/css/" mapping="/css/**"></mvc:resources>
<mvc:resources location="/images/" mapping="/images/**"></mvc:resources>
<mvc:resources location="/html/" mapping="/html/**"></mvc:resources>
<!-- 使用 mvc:annotation-driven代替上边注解映射器和注解适配器配置-->
<mvc:annotation-driven />
<!-- 视图解析器:解析jsp,默认使用jstl标签,classpath下的有jstl的包 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/" />
<property name="suffix" value=".jsp" />
</bean>
2.编写Controller(就是Handler)
LoginController.java
@Controller
public class LoginController {
@Autowired
private LoginService loginService;
//登录
@RequestMapping("/login")
public String login(HttpServletRequest request, Userssm userssm) throws Exception{
Userssm user = null;
try{
//调用service进行用户身份验证
user = loginService.findUser(userssm);
}catch(Exception e){
e.printStackTrace();
request.setAttribute("message", e.getMessage());
}
if(user!=null){
HttpSession session = request.getSession();
//在session中保存用户身份信息
session.setAttribute("user", user);
//重定向到登录成功页面
return "success";
}
return "login";
}}
5.4 配置前端控制器 (web.xml)
1.Spring配置
<!-- 加载spring容器 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/spring/applicationContext-*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
2.SpringMVC配置
<!-- springMVC前端控制器DispatcherServlet -->
<servlet>
<servlet-name>springmvc_rest</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/spring/springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc_rest</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
3.spring 提供的解决乱码方式
<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>
5.5 编写登录页面
注:success.jsp省略
5.6 数据库配置和日志配置
数据库配置示范:
jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:xe
jdbc.username=zhou
jdbc.password=123456
日志配置示范:
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p [%t] %c{1}:%L - %m%n
#在开发环境下日志级别要设置成DEBUG,生产环境设置成info或error
log4j.rootLogger=DEBUG, stdout
6 项目部署
浏览器中输入访问地址 :http://localhost:8088/SSM/

12SSM整合的更多相关文章
- 分享知识-快乐自己:SpringMvc中的四种数据源及相关配置(整合快速集成开发)
数据库连接: jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://39.105.105.186:3306/SpringMybatis?us ...
- [原创]mybatis中整合ehcache缓存框架的使用
mybatis整合ehcache缓存框架的使用 mybaits的二级缓存是mapper范围级别,除了在SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓 ...
- kindeditor4整合SyntaxHighlighter,让代码亮起来
这一篇我将介绍如何让kindeditor4.x整合SyntaxHighlighter代码高亮,因为SyntaxHighlighter的应用非常广泛,所以将kindeditor默认的prettify替换 ...
- spring源码分析之freemarker整合
FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具. 它不是面向最终用户的,而是一个Java类库,是一款程 ...
- FullCalendar应用——整合农历节气和节日
FullCalendar用来做日程管理功能非常强大,但是唯一不足的地方是没有将中国农历历法加进去,今天我将结合实例和大家分享如何将中国农历中的节气和节日整合到FullCalendar中,从而增强其实用 ...
- SAP CRM 将组件整合至导航栏中
到现在,我们已经可以让组件独立地显示.我们只是运行它.让它显示在Web UI中.让我们把组件整合进导航栏,使我们可以在正常登录Web UI时访问它. 步骤一: 为你的UI组件主窗体创建一个内向插件. ...
- Atitit.你这些项目不都是模板吗?不是原创 集成和整合的方式大总结
Atitit.你这些项目不都是模板吗?不是原创 集成和整合的方式大总结 1.1. 乔布斯的名言:创新即整合(Creativity is just connecting things).1 1.2. ...
- github入门到上传本地项目【网上资源整合】
[在原文章的基础上,修改了描述的不够详细的地方,对内容进行了扩充,整合了网上的一些资料] [内容主要来自http://www.cnblogs.com/specter45/p/github.html#g ...
- 三大框架SSH整合
三大框架SSH整合 -------------------------------Spring整合Hibernate------------------------------- 一.为什么要整合Hi ...
随机推荐
- [App Store Connect帮助]二、 添加、编辑和删除用户(2)查看并编辑您的个人帐户
您可以在 App Store Connect 的“编辑个人资料”中查看和编辑个人信息.如果您的 Apple ID 与多个帐户相关联,您可以在您的用户帐户之间切换. 查看您的个人帐户 在任意 App S ...
- 开源矿工README
点击加入 NTMiner官方QQ群: 863725136 开源矿工内置的所有内核均为原版,开源矿工永远不会额外增加矿工支出: 开源矿工永远开源: 开源矿工永远不会去破解国人开发的内核: 下载地址 阿里 ...
- SQL数据库还原的二种方式和区别
1.数据库还原 在SQL中,直接选择选择“还原数据库”:选中.bak 文件即可. 2.生成脚本 新建同样的DB名字,在SQL打开脚本,执行脚本语言.数据库里面就会自动填充内容.
- [转]mysql视图学习总结
转自:http://www.cnblogs.com/wangtao_20/archive/2011/02/24/1964276.html 一.使用视图的理由是什么?1.安全性.一般是这样做的:创建一个 ...
- [ BZOJ 4318 & 3450 / CodeForces 235 B ] OSU!
\(\\\) \(Description\) 一共进行\(N\)次操作,生成一个长度为\(N\)的\(01\)序列,成功对应\(1\),失败对应\(0\),已知每一次操作的成功率\(p_i\). 在这 ...
- [ SDOI 2011 ] 打地鼠
\(\\\) \(Description\) 给出一个\(N\times M\)的矩阵,你可以自由确定一个\(R\times C(R,C>0)\)的矩形,使得可以多个用矩形覆盖整个矩阵,覆盖的定 ...
- ArcGIS Android工程迁移到其他电脑不能打开的问题
问题描述:当我把已经做好的ArcGIS Android工程想在其他电脑运行时,总是会提示报错.而报错的地方,正是出现在下面这条语句上. compile 'com.esri.arcgisruntime: ...
- ibatis知识点
1:ibatis是apache的一个开源的项目,是一个O/R mapping解决方案,优点,小巧,灵活.2:搭建环境:导入ibatis相关jar包,jdbc驱动包等3:配置文件: jdbc连接的属性文 ...
- cmd 切换目录和配置环境变量
记录一下: 在用cmd进行切换盘符的时候, 如果是从 C盘切换到其他盘的话: D:直接回车就行了. 如果是在同一个盘符内切换文件夹的话,cd D:\ComputerSoft\curl\curl-7.6 ...
- mac中显示隐藏文件和.开头的文件
在控制台中执行一下命令,即可在finder中看到此类文件: defaults write com.apple.Finder AppleShowAllFiles YES killall Finder