SSM框架——詳細(xì)整合教程(Spring+SpringMVC+MyBatis)

摘要: 基本概念 1.1捶障、Spring spring是一個開源框架,Spring是于2003 年興起的一個輕量級的Java開發(fā)框架瓤荔,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中闡述的部分理念和原型衍生而來愚隧。它是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情洪乍。然而,Spring的用途不僅限于服務(wù)器端的開發(fā)稍算。從簡單性典尾、可測試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益糊探。 簡單來說,Spring是一個輕量級的控制反轉(zhuǎn)(IoC)和面向切面(A

1河闰、基本概念

1.1科平、Spring

spring是一個開源框架,Spring是于2003?年興起的一個輕量級的Java開發(fā)框架姜性,由Rod?Johnson?在其著作Expert?One-On-One?J2EE?Development?and?Design中闡述的部分理念和原型衍生而來瞪慧。它是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情部念。然而弃酌,Spring的用途不僅限于服務(wù)器端的開發(fā)。從簡單性儡炼、可測試性和松耦合的角度而言妓湘,任何Java應(yīng)用都可以從Spring中受益。?簡單來說乌询,Spring是一個輕量級的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架榜贴。

1.2、SpringMVC

Spring?MVC屬于SpringFrameWork的后續(xù)產(chǎn)品妹田,已經(jīng)融合在Spring?Web?Flow里面唬党。Spring?MVC?分離了控制器鹃共、模型對象、分派器以及處理程序?qū)ο蟮慕巧还埃@種分離讓它們更容易進(jìn)行定制霜浴。

1.3、MyBatis

MyBatis?本是apache的一個開源項目iBatis,?2010年這個項目由apache?software?foundation?遷移到了google?code蓝纲,并且改名為MyBatis?阴孟。MyBatis是一個基于Java的持久層框架。iBATIS提供的持久層框架包括SQL?Maps和Data?Access?Objects(DAO)MyBatis?消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及結(jié)果集的檢索驻龟。MyBatis?使用簡單的?XML或注解用于配置和原始映射温眉,將接口和?Java?的POJOs(Plain?Old?Java?Objects,普通的?Java對象)映射成數(shù)據(jù)庫中的記錄翁狐。

2类溢、開發(fā)環(huán)境搭建

技術(shù)選型(只列了一部分技術(shù))

1、后端

服務(wù)框架:Dubbo露懒、zookeeper闯冷、Rest服務(wù)

緩存:Redis、ehcache

消息中間件:ActiveMQ

負(fù)載均衡:Nginx

分布式文件:FastDFS

數(shù)據(jù)庫連接池:Alibaba Druid 1.0

核心框架:Spring framework

安全框架:Apache Shiro 1.2

視圖框架:Spring MVC 4.0

服務(wù)端驗證:hibernateValidator 5.1

布局框架:SiteMesh 2.4

工作流引擎:Activiti 5.15

任務(wù)調(diào)度:quartz 1.8.5

持久層框架:MyBatis 3.2

日志管理:SLF4J 1.7懈词、Log4j

工具類:Apache Commons蛇耀、Jackson 2.2、Xstream 1.4坎弯、Dozer 5.3纺涤、POI

2、前端

js框架:jQuery1.9抠忘。

CSS框架: Bootstrap 4 metronic

客戶端驗證:jqueryValidation Plugin撩炊。

富文本:CKEcitor

文件管理:CKFinder

動態(tài)頁簽:Jerichotab

數(shù)據(jù)表格:jqGrid

對話框:jQuery jBox

樹結(jié)構(gòu)控件:jQuery zTree

其他組件:Bootstrap 4 metronic

3、支持

服務(wù)器中間件:Tomcat 6崎脉、7拧咳、Jboss 7、WebLogic 10囚灼、WebSphere 8

數(shù)據(jù)庫支持:目前僅提供MySQL數(shù)據(jù)庫的支持骆膝,但不限于數(shù)據(jù)庫,下個版本升級多數(shù)據(jù)源切換和數(shù)據(jù)庫讀寫分離: 如:Oracle灶体、SqlServer阅签、H2等

支持開發(fā)環(huán)境:Eclipse、MyEclipse赃春、Ras愉择、Idea等

經(jīng)典介紹:

源碼結(jié)構(gòu)

歡迎大家一起學(xué)習(xí)研究相關(guān)技術(shù)愿意了解框架技術(shù)或者源碼的朋友直接加求求(企鵝):2042849237

更多詳細(xì)源碼參考來源:http://minglisoft.cn/technology

3、Maven Web項目創(chuàng)建

4、SSM整合

下面主要介紹三大框架的整合锥涕,至于環(huán)境的搭建以及項目的創(chuàng)建衷戈,參看上面的博文。這次整合我分了2個配置文件层坠,分別是spring-mybatis.xml殖妇,包含spring和mybatis的配置文件,還有個是spring-mvc的配置文件破花,此外有2個資源文件:jdbc.propertis和log4j.properties谦趣。完整目錄結(jié)構(gòu)如下(最后附上源碼下載地址,不建議直接使用源碼座每,因為此教程已經(jīng)有了全部代碼):

使用框架都是較新的版本:

Spring?4.0.2?RELEASE

Spring?MVC?4.0.2?RELEASE

MyBatis?3.2.6

4.1前鹅、Maven引入需要的JAR包

為了方便后面說的時候不需要引入JAR包,我這里直接給出所有需要的JAR包峭梳,這都是基本的JAR包舰绘,每個包的是干什么的都有注釋,就不再多說了葱椭。

pom.xml

4.0.2.RELEASE

3.2.6

1.7.7

1.2.17

junit

junit

4.11

test

org.springframework

spring-core

${spring.version}

org.springframework

spring-web

${spring.version}

org.springframework

spring-oxm

${spring.version}

org.springframework

spring-tx

${spring.version}

org.springframework

spring-jdbc

${spring.version}

org.springframework

spring-webmvc

${spring.version}

org.springframework

spring-aop

${spring.version}

org.springframework

spring-context-support

${spring.version}

org.springframework

spring-test

${spring.version}

org.mybatis

mybatis

${mybatis.version}

org.mybatis

mybatis-spring

1.2.2

javax

javaee-api

7.0

mysql

mysql-connector-java

5.1.30

commons-dbcp

commons-dbcp

1.2.2

jstl

jstl

1.2

log4j

log4j

${log4j.version}

com.alibaba

fastjson

1.1.41

org.slf4j

slf4j-api

${slf4j.version}

org.slf4j

slf4j-log4j12

${slf4j.version}

org.codehaus.jackson

jackson-mapper-asl

1.9.13

commons-fileupload

commons-fileupload

1.3.1

commons-io

commons-io

2.4

commons-codec

commons-codec

1.9

4.2捂寿、Spring與MyBatis的整合

所有需要的JAR包都引入以后,首先進(jìn)行Spring與MyBatis的整合孵运,然后再進(jìn)行JUnit測試秦陋,先看一個項目結(jié)構(gòu)圖:

4.2.1、建立JDBC屬性文件

jdbc.properties(文件編碼修改為utf-8)

driver=com.mysql.jdbc.Driver

url=jdbc:mysql://10.221.10.111:8080/db_zsl

username=demao

password=demao

#定義初始連接數(shù)

initialSize=0

#定義最大連接數(shù)

maxActive=20

#定義最大空閑

maxIdle=20

#定義最小空閑

minIdle=1

#定義最長等待時間

maxWait=60000

4.2.2治笨、建立spring-mybatis.xml配置文件

這個文件就是用來完成spring和mybatis的整合的驳概。這里面也沒多少行配置,主要的就是自動掃描旷赖,自動注入抡句,配置數(shù)據(jù)庫。注釋也很詳細(xì)杠愧,大家看看就明白了。

spring-mybatis.xml

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"?xmlns:p="http://www.springframework.org/schema/p"

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-3.1.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.1.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

destroy-method="close"

class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

4.2.3逞壁、Log4j的配置

為了方便調(diào)試流济,一般都會使用日志來輸出信息,Log4j是Apache的一個開放源代碼項目腌闯,通過使用Log4j绳瘟,我們可以控制日志信息輸送的目的地是控制臺、文件姿骏、GUI組件糖声,甚至是套接口服務(wù)器、NT的事件記錄器、UNIXSyslog守護(hù)進(jìn)程等蘸泻;我們也可以控制每一條日志的輸出格式琉苇;通過定義每一條日志信息的級別,我們能夠更加細(xì)致地控制日志的生成過程悦施。

Log4j的配置很簡單并扇,而且也是通用的,下面給出一個基本的配置抡诞,換到其他項目中也無需做多大的調(diào)整穷蛹,如果想做調(diào)整或者想了解Log4j的各種配置,參看我轉(zhuǎn)載的一篇博文昼汗,很詳細(xì):

下面給出配置文件目錄:

log4j.properties

#定義LOG輸出級別

log4j.rootLogger=INFO,Console,File

#定義日志輸出目的地為控制臺

log4j.appender.Console=org.apache.log4j.ConsoleAppender

log4j.appender.Console.Target=System.out

#可以靈活地指定日志輸出格式肴熏,下面一行是指定具體的格式

log4j.appender.Console.layout?=?org.apache.log4j.PatternLayout

log4j.appender.Console.layout.ConversionPattern=[%c]?-?%m%n

#文件大小到達(dá)指定尺寸的時候產(chǎn)生一個新的文件

log4j.appender.File?=?org.apache.log4j.RollingFileAppender

#指定輸出目錄

log4j.appender.File.File?=?logs/ssm.log

#定義文件最大大小

log4j.appender.File.MaxFileSize?=?10MB

#?輸出所以日志,如果換成DEBUG表示輸出DEBUG以上級別日志

log4j.appender.File.Threshold?=?ALL

log4j.appender.File.layout?=?org.apache.log4j.PatternLayout

log4j.appender.File.layout.ConversionPattern?=[%p]?[%d{yyyy-MM-dd?HH\:mm\:ss}][%c]%m%n

4.2.4顷窒、JUnit測試

經(jīng)過以上步驟(到4.2.2蛙吏,log4j不配也沒影響),我們已經(jīng)完成了Spring和mybatis的整合蹋肮,這樣我們就可以編寫一段測試代碼來試試是否成功了出刷。

4.2.4.1、創(chuàng)建測試用表

既然我們需要測試坯辩,那么我們就需要建立在數(shù)據(jù)庫中建立一個測試表馁龟,這個表建的很簡單,SQL語句為:

DROP?TABLE?IF?EXISTS?`user_t`;

CREATE?TABLE?`user_t`?(

`id`?int(11)?NOT?NULL?AUTO_INCREMENT,

`user_name`?varchar(40)?NOT?NULL,

`password`?varchar(255)?NOT?NULL,

`age`?int(4)?NOT?NULL,

PRIMARY?KEY?(`id`)

)?ENGINE=InnoDB?AUTO_INCREMENT=2?DEFAULT?CHARSET=utf8;

/*Data?for?the?table?`user_t`?*/

insert??into?`user_t`(`id`,`user_name`,`password`,`age`)?values?(1,'測試','sfasgfaf',24);

4.2.4.2漆魔、利用MyBatis Generator自動創(chuàng)建代碼

這個可根據(jù)表自動創(chuàng)建實體類坷檩、MyBatis映射文件以及DAO接口,當(dāng)然改抡,我習(xí)慣將生成的接口名改為IUserDao矢炼,而不是直接用它生成的UserMapper。如果不想麻煩就可以不改阿纤。完成后將文件復(fù)制到工程中句灌。如圖:

4.2.4.3、建立Service接口和實現(xiàn)類

目錄結(jié)構(gòu):

下面給出具體的內(nèi)容:

IUserService.jave

package?com.cn.hnust.service;

import?com.cn.hnust.pojo.User;

public?interface?IUserService?{

public?User?getUserById(int?userId);

}

UserServiceImpl.java

package?com.cn.hnust.service.impl;

import?javax.annotation.Resource;

import?org.springframework.stereotype.Service;

import?com.cn.hnust.dao.IUserDao;

import?com.cn.hnust.pojo.User;

import?com.cn.hnust.service.IUserService;

@Service("userService")

public?class?UserServiceImpl?implements?IUserService?{

@Resource

private?IUserDao?userDao;

@Override

public?User?getUserById(int?userId)?{

//?TODO?Auto-generated?method?stub

return?this.userDao.selectByPrimaryKey(userId);

}

}

4.2.4.4欠拾、建立測試類

測試類在src/test/java中建立胰锌,下面測試類中注釋掉的部分是不使用Spring時,一般情況下的一種測試方法藐窄;如果使用了Spring那么就可以使用注解的方式來引入配置文件和類资昧,然后再將service接口對象注入,就可以進(jìn)行測試了荆忍。

如果測試成功格带,表示Spring和Mybatis已經(jīng)整合成功了撤缴。輸出信息使用的是Log4j打印到控制臺。

package?org.zsl.testmybatis;

import?javax.annotation.Resource;

import?org.apache.log4j.Logger;

import?org.junit.Before;

import?org.junit.Test;

import?org.junit.runner.RunWith;

import?org.springframework.context.ApplicationContext;

import?org.springframework.context.support.ClassPathXmlApplicationContext;

import?org.springframework.test.context.ContextConfiguration;

import?org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import?com.alibaba.fastjson.JSON;

import?com.cn.hnust.pojo.User;

import?com.cn.hnust.service.IUserService;

@RunWith(SpringJUnit4ClassRunner.class)?????//表示繼承了SpringJUnit4ClassRunner類

@ContextConfiguration(locations?=?{"classpath:spring-mybatis.xml"})

public?class?TestMyBatis?{

private?static?Logger?logger?=?Logger.getLogger(TestMyBatis.class);

//??private?ApplicationContext?ac?=?null;

@Resource

private?IUserService?userService?=?null;

//??@Before

//??public?void?before()?{

//??????ac?=?new?ClassPathXmlApplicationContext("applicationContext.xml");

//??????userService?=?(IUserService)?ac.getBean("userService");

//??}

@Test

public?void?test1()?{

User?user?=?userService.getUserById(1);

//?System.out.println(user.getUserName());

//?logger.info("值:"+user.getUserName());

logger.info(JSON.toJSONString(user));

}

}

測試結(jié)果:

至此叽唱,完成Spring和mybatis這兩大框架的整合屈呕,下面在繼續(xù)進(jìn)行SpringMVC的整合。

4.3尔觉、整合SpringMVC

上面已經(jīng)完成了2大框架的整合凉袱,SpringMVC的配置文件單獨放,然后在web.xml中配置整合侦铜。

4.3.1专甩、配置spring-mvc.xml

配置里面的注釋也很詳細(xì),在此就不說了钉稍,主要是自動掃描控制器涤躲,視圖模式,注解的啟動這三個贡未。

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"?xmlns:p="http://www.springframework.org/schema/p"

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-3.1.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.1.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">

text/html;charset=UTF-8

class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">

class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

4.3.2种樱、配置web.xml文件

這里面對spring-mybatis.xml的引入以及配置的spring-mvc的Servlet就是為了完成SSM整合,之前2框架整合不需要在此處進(jìn)行任何配置俊卤。配置一樣有詳細(xì)注釋嫩挤,不多解釋了。

web.xml

xmlns="http://java.sun.com/xml/ns/javaee"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee?http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

version="3.0">

Archetype?Created?Web?Application

contextConfigLocation

classpath:spring-mybatis.xml

encodingFilter

org.springframework.web.filter.CharacterEncodingFilter

true

encoding

UTF-8

encodingFilter

/*

org.springframework.web.context.ContextLoaderListener

org.springframework.web.util.IntrospectorCleanupListener

SpringMVC

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:spring-mvc.xml

1

true

SpringMVC

/

/index.jsp

4.3.3消恍、測試

至此已經(jīng)完成了SSM三大框架的整合了岂昭,接下來測試一下,如果成功了狠怨,那么恭喜你约啊,如果失敗了,繼續(xù)調(diào)試吧佣赖,作為程序員就是不停的與BUG做斗爭恰矩!

4.3.3.1、新建jsp頁面

showUser.jsp?? 此頁面僅輸出一下用戶名憎蛤,完成一個完整的簡單流程外傅。

<%@?page?language="java"?import="java.util.*"?pageEncoding="utf-8"%>

測試

${user.userName}

4.3.3.2、建立UserController類

package?com.cn.hnust.controller;

import?javax.annotation.Resource;

import?javax.servlet.http.HttpServletRequest;

import?org.springframework.stereotype.Controller;

import?org.springframework.ui.Model;

import?org.springframework.web.bind.annotation.RequestMapping;

import?com.cn.hnust.pojo.User;

import?com.cn.hnust.service.IUserService;

@Controller

@RequestMapping("/user")

public?class?UserController?{

@Resource

private?IUserService?userService;

@RequestMapping("/showUser")

public?String?toIndex(HttpServletRequest?request,Model?model){

int?userId?=?Integer.parseInt(request.getParameter("id"));

User?user?=?this.userService.getUserById(userId);

model.addAttribute("user",?user);

return?"showUser";

}

}

歡迎大家一起學(xué)習(xí)研究相關(guān)技術(shù)愿意了解框架技術(shù)或者源碼的朋友直接加求求(企鵝):2042849237

更多詳細(xì)源碼參考來源:http://minglisoft.cn/technology

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末俩檬,一起剝皮案震驚了整個濱河市栏豺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌豆胸,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件巷疼,死亡現(xiàn)場離奇詭異晚胡,居然都是意外死亡灵奖,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門估盘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瓷患,“玉大人,你說我怎么就攤上這事遣妥∩帽啵” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵箫踩,是天一觀的道長爱态。 經(jīng)常有香客問我,道長境钟,這世上最難降的妖魔是什么锦担? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮慨削,結(jié)果婚禮上洞渔,老公的妹妹穿的比我還像新娘。我一直安慰自己缚态,他們只是感情好磁椒,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著玫芦,像睡著了一般浆熔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上姨俩,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天蘸拔,我揣著相機與錄音,去河邊找鬼环葵。 笑死调窍,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的张遭。 我是一名探鬼主播邓萨,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼菊卷!你這毒婦竟也來了缔恳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤洁闰,失蹤者是張志新(化名)和其女友劉穎歉甚,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扑眉,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡纸泄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年赖钞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片聘裁。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡雪营,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出衡便,到底是詐尸還是另有隱情献起,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布镣陕,位于F島的核電站谴餐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏茁彭。R本人自食惡果不足惜总寒,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望理肺。 院中可真熱鬧摄闸,春花似錦、人聲如沸妹萨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽乎完。三九已至熏兄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間树姨,已是汗流浹背摩桶。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留帽揪,地道東北人硝清。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像转晰,于是被迫代替她去往敵國和親芦拿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容