SSM三大框架整合詳細教程(Spring+SpringMVC+MyBatis)【轉】

使用SSM(Spring、SpringMVC和Mybatis)已經有三個多月了,項目在技術上已經沒有什么難點了,基于現有的技術就可以實現想要的功能,當然肯定有很多可以改進的地方。之前沒有記錄SSM整合的過程,這次剛剛好基于自己的一個小項目重新搭建了一次,而且比項目搭建的要更好一些。以前解決問題的過程和方法并沒有及時記錄,以后在自己的小項目中遇到我再整理分享一下。這次,先說說三大框架整合過程。個人認為使用框架并不是很難,關鍵要理解其思想,這對于我們提高編程水平很有幫助。不過,如果用都不會,談思想就變成紙上談兵了?。。∠燃夹g,再思想。實踐出真知。(可通過圖片水印查看博客地址)

1、基本概念

1.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)的容器框架。

1.2、SpringMVC

Spring?MVC屬于SpringFrameWork的后續產品,已經融合在Spring?Web?Flow里面。Spring?MVC?分離了控制器、模型對象、分派器以及處理程序對象的角色,這種分離讓它們更容易進行定制。

1.3、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、開發環境搭建

3、Maven Web項目創建

4、SSM整合

下面主要介紹三大框架的整合,至于環境的搭建以及項目的創建,參看上面的博文。這次整合我分了2個配置文件,分別是spring-mybatis.xml,包含spring和mybatis的配置文件,還有個是spring-mvc的配置文件,此外有2個資源文件:jdbc.propertis和log4j.properties。完整目錄結構如下:

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

Spring?4.0.2?RELEASE

Spring?MVC?4.0.2?RELEASE

MyBatis?3.2.6

4.1、Maven引入需要的JAR包

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

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}

4.2、Spring與MyBatis的整合

所有需要的JAR包都引入以后,首先進行Spring與MyBatis的整合,然后再進行JUnit測試,先看一個項目結構圖:

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

#定義初始連接數

initialSize=0

#定義最大連接數

maxActive=20

#定義最大空閑

maxIdle=20

#定義最小空閑

minIdle=1

#定義最長等待時間

maxWait=60000

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

這個文件就是用來完成spring和mybatis的整合的。這里面也沒多少行配置,主要的就是自動掃描,自動注入,配置數據庫。注釋也很詳細,大家看看就明白了。

為了方便調試,一般都會使用日志來輸出信息,Log4j是Apache的一個開放源代碼項目,通過使用Log4j,我們可以控制日志信息輸送的目的地是控制臺、文件、GUI組件,甚至是套接口服務器、NT的事件記錄器、UNIX?Syslog守護進程等;我們也可以控制每一條日志的輸出格式;通過定義每一條日志信息的級別,我們能夠更加細致地控制日志的生成過程。

Log4j的配置很簡單,而且也是通用的,下面給出一個基本的配置,換到其他項目中也無需做多大的調整,如果想做調整或者想了解Log4j的各種配置,參看我轉載的一篇博文,很詳細:

http://blog.csdn.net/zhshulin/article/details/37937365

下面給出配置文件目錄:

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

#文件大小到達指定尺寸的時候產生一個新的文件

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測試

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

4.2.4.1、創建測試用表

既然我們需要測試,那么我們就需要建立在數據庫中建立一個測試表,這個表建的很簡單,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自動創建代

這個可根據表自動創建實體類、MyBatis映射文件以及DAO接口,當然,我習慣將生成的接口名改為IUserDao,而不是直接用它生成的UserMapper。如果不想麻煩就可以不改。完成后將文件復制到工程中。如圖:

4.2.4.3、建立Service接口和實現類

目錄結構:

下面給出具體的內容:

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接口對象注入,就可以進行測試了。

如果測試成功,表示Spring和Mybatis已經整合成功了。輸出信息使用的是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));

}

}

測試結果:

至此,完成Spring和mybatis這兩大框架的整合,下面在繼續進行SpringMVC的整合。

4.3、整合SpringMVC

上面已經完成了2大框架的整合,SpringMVC的配置文件單獨放,然后在web.xml中配置整合。

4.3.1、配置spring-mvc.xml

配置里面的注釋也很詳細,在此就不說了,主要是自動掃描控制器,視圖模式,注解的啟動這三個。

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框架整合不需要在此處進行任何配置。配置一樣有詳細注釋,不多解釋了。

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

4.3.3、測試

至此已經完成了SSM三大框架的整合了,接下來測試一下,如果成功了,那么恭喜你,如果失敗了,繼續調試吧,作為程序員就是不停的與BUG做斗爭!

4.3.3.1、新建jsp頁面

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

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

測試

${user.userName}

4.3.3.2、建立UserController類

UserController.java ?控制器

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";

}

}

4.3.3.3、部署項目

輸入地址:localhost:8080/項目名稱/user/showUser?id=1

至此,SSM三大框架的整合就完成了,在此基礎上可再添加其他功能。

核心技術:Maven,Springmvc mybatis shiro, Druid, Restful,

Dubbo, ZooKeeper,Redis,FastDFS,ActiveMQ,Nginx

1.?????項目核心代碼結構截圖

項目模塊依賴

特別提醒:開發人員在開發的時候可以將自己的業務REST服務化或者Dubbo服務化

2.????項目依賴介紹

2.1?后臺管理系統、Rest服務系統、Scheculer定時調度系統依賴如下圖:

2.2?Dubbo獨立服務項目依賴如下圖:

3.??項目功能部分截圖:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容