摘要: 基本概念 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河闰、基本概念
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)的容器框架榜贴。
Spring?MVC屬于SpringFrameWork的后續(xù)產(chǎn)品妹田,已經(jīng)融合在Spring?Web?Flow里面唬党。Spring?MVC?分離了控制器鹃共、模型對象、分派器以及處理程序?qū)ο蟮慕巧还埃@種分離讓它們更容易進(jìn)行定制霜浴。
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ù)庫中的記錄翁狐。
技術(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、前端
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
下面主要介紹三大框架的整合锥涕,至于環(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
為了方便后面說的時候不需要引入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
所有需要的JAR包都引入以后,首先進(jìn)行Spring與MyBatis的整合孵运,然后再進(jìn)行JUnit測試秦陋,先看一個項目結(jié)構(gòu)圖:
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">
為了方便調(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
經(jīng)過以上步驟(到4.2.2蛙吏,log4j不配也沒影響),我們已經(jīng)完成了Spring和mybatis的整合蹋肮,這樣我們就可以編寫一段測試代碼來試試是否成功了出刷。
既然我們需要測試坯辩,那么我們就需要建立在數(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ù)制到工程中句灌。如圖:
目錄結(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?{
private?IUserDao?userDao;
public?User?getUserById(int?userId)?{
//?TODO?Auto-generated?method?stub
return?this.userDao.selectByPrimaryKey(userId);
}
}
測試類在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的整合。
上面已經(jīng)完成了2大框架的整合凉袱,SpringMVC的配置文件單獨放,然后在web.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">
這里面對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
至此已經(jīng)完成了SSM三大框架的整合了岂昭,接下來測試一下,如果成功了狠怨,那么恭喜你约啊,如果失敗了,繼續(xù)調(diào)試吧佣赖,作為程序員就是不停的與BUG做斗爭恰矩!
showUser.jsp?? 此頁面僅輸出一下用戶名憎蛤,完成一個完整的簡單流程外傅。
<%@?page?language="java"?import="java.util.*"?pageEncoding="utf-8"%>
測試
${user.userName}
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