这次 , 说说 三大框架整合过程 。集体认为应用框架并不是很难,要害要了解其思维,这对于咱们进步编程程度很有帮忙。不过,如果用都不会,谈思维就变成夸夸其谈了!!! 先技术,再思维。实际出真知。上面就一起学习!!!
无关SSM整合不懂得能够观看此视频教程:https://www.bilibili.com/video/BV1Ug4y1i7W7
一、基本概念
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 )的容器框架。
2、SpringMVC
Spring MVC 属于 SpringFrameWork 的后续产品,曾经交融在 Spring Web Flow 外面。 Spring MVC 拆散了控制器、模型对象、分派器以及处理程序对象的角色,这种拆散让它们更容易进行定制。
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 对象)映射成数据库中的记录。
二、开发环境搭建
三、Maven Web我的项目创立
四、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
1、Maven引入须要的JAR包
为了不便前面说的时候不须要引入JAR包,我这里 间接给出所有须要的JAR包,这都是根本的JAR包 ,每个包的是干什么的都有正文,就不再多说了。
pom.xml
<properties> <!-- spring版本号 --> <spring.version>4.0.2.RELEASE</spring.version> <!-- mybatis版本号 --> <mybatis.version>3.2.6</mybatis.version> <!-- log4j日志文件治理包版本 --> <slf4j.version>1.7.7</slf4j.version> <log4j.version>1.2.17</log4j.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <!-- 示意开发的时候引入,公布的时候不会加载此包 --> <scope>test</scope> </dependency> <!-- spring外围包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-oxm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <!-- mybatis外围包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <!-- mybatis/spring包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.2</version> </dependency> <!-- 导入java ee jar 包 --> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> </dependency> <!-- 导入Mysql数据库链接jar包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.30</version> </dependency> <!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 --> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.2.2</version> </dependency> <!-- JSTL标签类 --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- 日志文件治理包 --> <!-- log start --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <!-- 格式化对象,不便输入日志 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.1.41</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <!-- log end --> <!-- 映入JSON --> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency> <!-- 上传组件包 --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.9</version> </dependency> </dependencies>
2、Spring与MyBatis的整合
所有须要的 JAR 包都引入当前,首先进行 Spring 与 MyBatis 的整合,而后再进行 JUnit 测试,先看一个我的项目结构图:
1)建设JDBC属性文件
jdbc.properties (文件编码批改为 utf-8 )
driver=com.mysql.jdbc.Driverurl=jdbc:mysql://10.221.10.111:8080/db_zslusername=demaopassword=demao#定义初始连接数initialSize=0#定义最大连接数maxActive=20#定义最大闲暇maxIdle=20#定义最小闲暇minIdle=1#定义最长等待时间maxWait=60000
2)建设spring-mybatis.xml配置文件
这个文件就是用来实现spring和mybatis的整合的。这外面也没多少行配置,次要的就是 主动扫描,主动注入,配置数据库 。正文也很具体,大家看看就明确了。
spring-mybatis.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: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"> <!-- 主动扫描 --> <context:component-scan base-package="com.cn.hnust" /> <!-- 引入配置文件 --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:jdbc.properties" /> </bean> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> <!-- 初始化连贯大小 --> <property name="initialSize" value="${initialSize}"></property> <!-- 连接池最大数量 --> <property name="maxActive" value="${maxActive}"></property> <!-- 连接池最大闲暇 --> <property name="maxIdle" value="${maxIdle}"></property> <!-- 连接池最小闲暇 --> <property name="minIdle" value="${minIdle}"></property> <!-- 获取连贯最大等待时间 --> <property name="maxWait" value="${maxWait}"></property> </bean> <!-- spring和MyBatis完满整合,不须要mybatis的配置映射文件 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <!-- 主动扫描mapping.xml文件 --> <property name="mapperLocations" value="classpath:com/cn/hnust/mapping/*.xml"></property> </bean> <!-- DAO接口所在包名,Spring会主动查找其下的类 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.cn.hnust.dao" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> </bean> <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> </beans>
3)Log4j的配置
为了不便调试,个别都会应用日志来输入信息, Log4j是 Apache 的一个凋谢源代码我的项目,通过应用Log4j,咱们能够管制 日志 信息输送的目的地是 控制台 、文件、GUI 组件,甚至是套接口服务器、 NT 的事件记录器、 UNIX Syslog 守护过程等;咱们也能够管制每一条日志的输入格局;通过定义每一条日志信息的级别,咱们可能更加粗疏地管制日志的生成过程。
上面给出配置文件目录:
#定义LOG输入级别log4j.rootLogger=INFO,Console,File#定义日志输入目的地为控制台log4j.appender.Console=org.apache.log4j.ConsoleAppenderlog4j.appender.Console.Target=System.out#能够灵便地指定日志输入格局,上面一行是指定具体的格局log4j.appender.Console.layout = org.apache.log4j.PatternLayoutlog4j.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 = ALLlog4j.appender.File.layout = org.apache.log4j.PatternLayoutlog4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
4)JUnit测试
通过以上步骤(到4.2.2,log4j不配也没影响),咱们 曾经实现了Spring和mybatis的整合 ,这样咱们就能够编写一段测试代码来试试是否胜利了。
创立测试用表
既然咱们须要测试,那么咱们就须要建设在数据库中建设一个测试表,这个表建的很简略, 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);
利用MyBatis Generator主动创立代码
这个可依据表主动创立实体类、 MyBatis 映射文件以及 DAO 接口,当然,我 习惯将生成的接口名改为 IUserDao ,而不是间接用它生成的 UserMapper 。如果不想麻烦就 能够不改 。实现后将文件复制到工程中。如图
- 建设Service接口和实现类
目录构造:
上面给出具体的内容:
IUserService.java
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); } }
建设测试类
测试类 在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的整合。
3、整合SpringMVC
下面曾经实现了2大框架的整合,SpringMVC的配置文件独自放,而后在web.xml中配置整合。
1)配置spring-mvc.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: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"> <!-- 主动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 --> <context:component-scan base-package="com.cn.hnust.controller" /> <!--防止IE执行AJAX时,返回JSON呈现下载文件 --> <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> </bean> <!-- 启动SpringMVC的注解性能,实现申请和注解POJO的映射 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="mappingJacksonHttpMessageConverter" /> <!-- JSON转换器 --> </list> </property> </bean> <!-- 定义跳转的文件的前后缀 ,视图模式配置--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 这里的配置我的了解是主动给前面action的办法return的字符串加上前缀和后缀,变成一个 可用的url地址 --> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean> <!-- 配置文件上传,如果没有应用文件上传能够不必配置,当然如果不配,那么配置文件中也不用引入上传组件包 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 默认编码 --> <property name="defaultEncoding" value="utf-8" /> <!-- 文件大小最大值 --> <property name="maxUploadSize" value="10485760000" /> <!-- 内存中的最大值 --> <property name="maxInMemorySize" value="40960" /> </bean> </beans>
2)配置web.xml文件
这里面对spring-mybatis.xml的引入以及配置的spring-mvc的Servlet就是为了实现SSM整合,之前2框架整合不须要在此处进行任何配置。配置一样有具体正文,不多解释了。
web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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"> <display-name>Archetype Created Web Application</display-name> <!-- Spring和mybatis的配置文件 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mybatis.xml</param-value> </context-param> <!-- 编码过滤器 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <async-supported>true</async-supported> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- Spring监听器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 避免Spring内存溢出监听器 --> <listener> <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> </listener> <!-- Spring MVC servlet --> <servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> <async-supported>true</async-supported> </servlet> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <!-- 此处能够能够配置成*.do,对应struts的后缀习惯 --> <url-pattern>/</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>/index.jsp</welcome-file> </welcome-file-list> </web-app>
3)测试
至此曾经实现了SSM三大框架的整合了,接下来测试一下,如果胜利了,那么祝贺你,如果失败了,持续调试吧, 作为程序员就是不停的与BUG做奋斗 !
- 新建jsp页面
showUser.jsp 此页面仅输入一下用户名,实现一个 残缺的简略流程 。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>测试</title> </head> <body> ${user.userName} </body></html>
- 建设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"; }}
- 部署我的项目
输出地址: localhost:8080/ 项目名称 /user/showUser?id=1
至此,SSM三大框架的整合就实现了,在此基础上可再增加其余性能。