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、整合步骤

首先对SSM框架有一个相应的认识:


SpringMVC:

  SpringMVC:主要进行页面的 请求接受与响应。

  组件包括:前端控制器,处理器映射器,处理器适配器,视图解析器,处理器Handler,视图View。其中,只有处理器Handler和视图View需要程序员开发。

View是一个接口,实现类支持不同的View类型(jsp,freemarker,pdf等)。另外,处理器Handler就是Controller。


Service:

  Service层功能:注入dao,调用dao方法。


Mybatis:

  开始Mybatis时要记住最终目的,我们要对数据库的数据进行操作,所以你只需要记住,他的使用很方便,很方便,方便,即可。

  

  最后我们的开发思路就很明确了,从页面获取数据到Controller层,然后传递到service层进行相关操作(调用方法等),然后再传递到持久层对数据库进行相应增删改查即可。

2.1、整合准备

  整合内容:

    整合架构:Spring、SpringMVC以及MyBatis的整合。

    数据库:MySQL

    连接池:C3P0或Druid

  整合工具:

    整合工具为:Eclipse

    Jar管理工具:Maven

    项目类型为:Maven Pproject

2.2 创建项目

  使用eclipse,创建一个maven project,建立好相应的目录结构,步骤如下:

  1、New --> Maven Project --> Create a simple project and location;

  2、填入GAV坐标(Group Id、Artifact Id、Version),选择war包,点击finish;

    注意:此处会报错:web.xml is missing and <failOnMissingWebXml> is set to true。因为默认没有生成web.xml文件,需手动创建。

  3、在项目名上右键,选择Properties --> Project Facets.

    先勾掉Dynamic Web Services,点击Apply,再勾选Dynamic Web Services,选择版本2.5,点击下方Further configuration available…,手动创建web文件的目录,即在directory处输入src/main/webapp,apply --> 确定 即可,此时WEB-INF下会创建web.xml文件。

  web.xml是整个项目的核心配置文件,也可以理解为Web程序访问的入口,

此时文件目录结构中各自作用如下:

 文件名

 作用

src

  根目录,没什么好说的,下面有main和test。

main

  主要目录,可以放java代码和一些资源文件。

java

  存放我们的java代码,这个文件夹要使用Build Path -> Use as Source Folder,这样看包结构会方便很多,新建的包就相当于在这里新建文件夹咯。

resources

  存放资源文件,譬如各种的spring,mybatis,log配置文件。

mapper

  存放dao中每个方法对应的sql,在这里配置,无需写daoImpl。

spring

  这里当然是存放spring相关的配置文件,有dao service web三层。

sql

  其实这个可以没有,但是为了项目完整性还是加上吧。

webapp

  这个貌似是最熟悉的目录了,用来存放我们前端的静态资源,如jsp js css。

resources

  这里的资源是指项目的静态资源,如js css images等。

WEB-INF

  很重要的一个目录,外部浏览器无法访问,只有羡慕内部才能访问,可以把jsp放在这里,另外就是web.xml了。你可能有疑问了,为什么上面java中的resources里面的配置文件不妨在这里,那么是不是会被外部窃取到?你想太多了,部署时候基本上只有webapp里的会直接输出到根目录,其他都会放入WEB-INF里面,项目内部依然可以使用classpath:XXX来访问,好像IDE里可以设置部署输出目录,这里扯远了~

test

  这里是测试分支。

java

  测试java代码,应遵循包名相同的原则,这个文件夹同样要使用Build Path -> Use as Source Folder,这样看包结构会方便很多。

resources

  没什么好说的,好像也很少用到,但这个是maven的规范。

2.3 引入jar包依赖

  <dependencies>
<!-- 1 Spring核心包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
<!-- 关系型数据库整合时需配置,包含Spring对DAO特性集进行了扩展,使其支持 Mybatis、JDO等。
此jar文件里大部分类都要依赖spring-dao.jar里的类,用这个包时需要同时包含spring-dao.jar包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.0.0.RELEASE</version>
</dependency> <!-- 2 SpringMVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.0.0.RELEASE</version>
</dependency> <!-- 3 MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<!-- 3.1 MyBatis/Spring包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<!-- MyBatis中延迟加载需要使用Cglib,即启用懒加载 -->
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2</version>
</dependency> <!-- 4 数据库连接 -->
<!-- 4.1 MySQL数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
</dependency>
<!-- C3P0数据库连接池 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.2</version>
</dependency>
<!-- 或者使用 -->
<!-- dbcp连接池 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency> <!-- 5 Servlet、jsp、jstl依赖 -->
<!-- provided表明该包只在编译和测试的时候用,而Tomcat中也有servlet-api包,所以当启动tomcat的时候,就不会冲突了 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1.3-b06</version>
<scope>provided</scope>
</dependency>
<!-- JSTL标签类 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency> <!-- 6 辅助 --> <!-- 6.1 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<!-- 表示开发的时候引入,发布的时候不会加载此包 -->
<scope>test</scope>
</dependency> <!-- 6.2 日志文件管理包 -->
<!-- log4j是具体的实现(即怎么来打印日志等),和logback是一样的。 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- slf4j是日志的接口(只定义了一些方法而没有去实现),和commons-logging一样。 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
</dependency> <!-- 6.3 格式化对象工具包,方便输出日志 -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.4</version>
</dependency> <!-- 6.4 上传组件包 -->
<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.5</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency> <!-- 6.5 代码生成器(逆向工程) -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.3</version>
</dependency> <!-- 6.6 Apache提供的包含StringUtils工具类的Jar包 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.2</version>
</dependency> <!-- 其余辅助 -->
<!-- springmvc默认使用的是jackson来解析json的 -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.11</version>
</dependency> <!-- 各种集合类和集合工具类的封装类库 -->
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.1</version>
</dependency> <!-- json需使用的包 -->
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency> <!-- jedis包 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency> </dependencies>

在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署。目前<scope>可以使用5个值: 
    * compile,缺省值,适用于所有阶段,会随着项目一起发布。 
    * provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。 
    * runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。 
    * test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。 
    * system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。

2.4 集成Spring框架

  Spring框架是整个系统架构的核心,将前端请求数据的处理以及数据库的数据操作整合在一起,非常重要。

  在web.xml文件中增加配置信息集成Spring框架:

 <web-app>
...
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring-*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
...
</web-app>

  Spring环境构建时需要读取web应用的初始化参数contextConfigLocation, 从classpath中读取配置文件spring/spring-*.xml在项目src/main/resources目录中增加spring文件夹,并在其中增加spring-context.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:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> </beans>

  Spring框架的核心是构建对象,整合对象之间的关系(IOC)及扩展对象功能(AOP),所以需要在spring-context.xml配置文件中增加业务对象扫描的相关配置。扫描后由Spring框架进行管理和组合。

 <beans>
...
<context:component-scan base-package="com.getmymoney.*" >
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
...
</beans>

扫描配置中为什么要排除Controller注解

  Controller注解的的作用是声明控制器(处理器)类。从数据流转的角度,这个类应该是由SpringMVC框架进行管理和组织的,所以不需要由Spring框架扫描。

2.4 集成SpringMVC框架

  SpringMVC框架用于处理系统中数据的流转及控制操作。(从哪里来,到哪里去。多么有哲理的一句话。)

  集成SpringMVC框架,需要在web.xml文件中增加配置信息。

 <web-app>
...
<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/springmvc-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
...
</web-app>

  SpringMVC环境构建时需要读取servlet初始化参数init-param, 从classpath中读取配置文件spring/springmvc-context.xml

  

  在项目src/main/resources/spring目录中,增加springmvc-context.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:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> </beans>

  SpringMVC框架的核心是处理数据的流转,所以需要在springmvc-context.xml配置文件中增加控制器对象(Controller)扫描的相关配置。扫描后由SpringMVC框架进行管理和组合。

 <!-- 1、包扫描 -->
<context:component-scan base-package="com.getmymoney.controller" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
<context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice" />
</context:component-scan>

静态资源如何不被SpringMVC框架进行拦截

  在配置文件中增加<mvc:default-servlet-handler/><mvc:annotation-driven />即可,在实际的项目中静态资源不会和动态资源放在一起,也就意味着不会放置在服务器中,所以这些配置可以省略。

  如果SpringMVC框架数据处理为页面跳转,那么需要配置相应的视图解析器ViewResolver

 <!-- 2、视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"></property>
<property name="suffix" value=".jsp"></property>
</bean>

如果有多个视图解析器怎么办?

SpringMVC框架中允许存在多个视图解析器,框架会按照配置声明顺序,依次进行解析。

  

  如果SpringMVC框架数据处理为响应JSON字符串,那么为了浏览器方便对响应的字符串进行处理,需要明确字符串的类型及编码方式。

 <!--字符编码方式-->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" >
<property name="messageConverters" >
<list>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" >
<property name="supportedMediaTypes" >
<list>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</list>
</property>
</bean>

  如果项目中含有文件上传业务,还需要增加文件上传解析器MultipartResolver

 <!-- 3、SpringMVC上传文件时,需要配置MultipartResolver处理器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8" />
<!-- 指定所上传文件的总大小,单位字节。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 -->
<property name="maxUploadSize" value="10240000" />
</bean>

  springmvc启用注解

 <!-- 4、启动注解 -->
<mvc:annotation-driven />
<mvc:default-servlet-handler />

2.5 集成Mybatis框架

  Mybatis框架主要处理业务和数据库之间的数据交互,所以创建对象和管理对象生命周期的职责可以委托Spring框架完成。如:创建Mybatis核心对象。

    <!-- 3.配置SqlSessionFactory对象 -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据库连接池 -->
<property name="dataSource" ref="dataSource" />
<!-- 配置MyBaties全局配置文件:mybatis-config.xml -->
<property name="configLocation" value="classpath:mybatis-config.xml" />
</bean>
<!-- 4.配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 注入sqlSessionFactory -->
<property name="basePackage" value="com.getmymoney.mapper" />
<!-- 给出需要扫描Dao接口包 -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean" />
</bean>

  既然需要和数据库进行关联,那么Mybatis核心对象就需要依赖于数据库连接池,所以在Spring配置文件中增加相应的配置。

    <!-- 2.数据库连接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<!-- 配置连接池属性 -->
<property name="driverClassName" value="${driverClassName}" />
<property name="url" value="${url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>

  在Spring配置文件开头增加properties属性

    <!-- 1.配置数据库相关参数properties的属性:${url} -->
<context:property-placeholder location="classpath:dbConfig.properties" />

  在项目src/main/resources/spring目录中,增加dbConfig.properties配置文件。

 driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF8
jdbc.username=root
jdbc.password=abc123

  集成Mybatis框架时同时还需要增加核心配置文件mybatis/config.xml

 <?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>
<mappers>
</mappers> </configuration>

  及SQL映射文件mybatis/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.getmymoney.mapper.AreaMapper"> </mapper>

  为了保证数据操作的一致性,必须在程序中增加事务处理。Spring框架采用声明式事务,通过AOP的方式将事务增加到业务中。所以需要在Spring配置文件中增加相关配置

 <!--事务管理-->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean> <tx:advice transaction-manager="txManager" id="txAdvice">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
</tx:attributes>
</tx:advice> <aop:config>
<aop:pointcut expression="execution(* com.getmymoney.service.*.*(..))" id="pointcut" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut" />
</aop:config>

2.6 总结

web.xml配置文件

  1、配置Spring配置文件路径(contextConfigLocation);

  2、配置监听器(ContextLoaderListener);

  3、配置DispatcherServlet,SpringMVC配置文件路径;

  4、配置servlet映射规则(servlet-mapping)。

applicationcontext.xml Spring配置文件

  1、读入数据库连接相关参数(即引入配置文件);

  2、配置Spring扫描的包;

  3、配置数据连接池的连接属性;

  4、配置SqlSessionFactory对象(mybatis);

  5、扫描dao层(Mapper)接口,动态实现Mapper接口。

spring-mvc.xml SpringMVC配置文件

  1、配置SpringMVC扫描的包;

  2、静态资源默认servlet配置(可选,多不写)

    ①加入对静态资源的处理:js,gif,png

    ②允许使用 "/" 做整体映射

  3、配置jsp显示ViewResolver(视图解析器);

  4、开启SpringMVC注解模式

    ①自动注册DefaultAnootationHandlerMapping,AnotationMethodHandlerAdapter

    ②提供一些列:数据绑定,数字和日期的format @NumberFormat, @DateTimeFormat, xml,json默认读写支持

SSM三大框架详细整合流程的更多相关文章

  1. SSM三大框架的整合

    好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航 在Java后端开发领域,Spri ...

  2. 20 SSM三大框架的整合

    1.SSM整合的相关概念 (1)整合说明:SSM整合可以使用多种方式,优先使用XML + 注解的方式(2)整合的思路 1.先搭建整合的环境 2.先把Spring的配置搭建完成 3.再使用Spring整 ...

  3. SSM三大框架的运行流程、原理、核心技术详解

    一.Spring部分1.Spring的运行流程第一步:加载配置文件ApplicationContext ac = new ClassPathXmlApplicationContext("be ...

  4. SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)【转】

    使用SSM(Spring.SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没有记录SSM整合 ...

  5. SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)(转)

    使用 SSM ( Spring . SpringMVC 和 Mybatis )已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没 ...

  6. SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)

    使用 SSM ( Spring . SpringMVC 和 Mybatis )已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没 ...

  7. SSM三大框架整合详细教程

    使用SSM(Spring.SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没有记录SSM整合 ...

  8. SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis

    原博主链接:( http://blog.csdn.net/zhshulin ) 使用 SSM ( Spring . SpringMVC 和 Mybatis )已经有三个多月了,项目在技术上已经没有什么 ...

  9. SSM三大框架整合详细总结(Spring+SpringMVC+MyBatis)(山东数漫江湖)

    使用 SSM ( Spring . SpringMVC 和 Mybatis )已经很久了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没有记录 ...

随机推荐

  1. 考虑以下 Python 代码,如果运行结束,命令行中的运行结果是什么?

    l = [] for i in xrange(10):  l.append({‘num’:i}) print l在考虑以下代码,运行结束后的结果是什么? l = [] a = {‘num’:0} fo ...

  2. linux判断httpd端口是否打开

    判断端口是否打开 lsof -i:80 判断端口打开了几个 lsof -i:80 | wc -l

  3. Elastic Stack学习

    原文链接 Elastic Stack简称ELK,在本教程你将学习如何快速搭建并运行Elastic Stack. 首先你要安装核心开源产品: Elasticsearch: Kibana: Beats: ...

  4. 【内部】Fiddler设置代理请求的方式

    1.2 打开Fiiddler,设置如图步骤: 3.添加规则: 4.这里选择第三个选项: 5.选中^开始,空格结束的如图内容.复制你要代理的地址.如:http://wap.cmread.com/nap/ ...

  5. python学习之网络基础

    七 网络编程 7.1 C/S B/S架构 7.1.1 认识 Client : 客户端 Browser :浏览器 Server :服务器端 C/S:客户端与服务器之间的构架 B/S:浏览器与服务器之间的 ...

  6. 【Qt开发】QTableWidget的详细设置

    在使用Qt不多的日子里,已经两次用到了QTableWidget这个控件,也慢慢的习惯和喜欢上了它.再使用QTableWidget的时候,已不像刚开始使用时的迷茫.嗯嗯.现在就来总结总结我与QTable ...

  7. 联盟周赛2019810 csgo (动态规划、不下降子序列)

    今天起晚了...就做了俩题 难受的一批... 题目描述 著名第一人称射击游戏 csgo 因其优秀的平衡性,爽快的射击感和科学的战术配比赢得了世界广大玩家的好评. 在一局游戏中,分为两个阵营,他们的目标 ...

  8. List<HashMap<String,String>> list, 根据hashmap中的某个键的值排序

    来源https://blog.51cto.com/zhaodan/1725249 //可以使用Collections.sort(List list, Comparator c)来实现 这里举例hash ...

  9. JSP的9大内置对象和4打作用域对象

    一.9大内置对象 二.4大内置作用域对象

  10. jQuery改变元素class属性

    //去掉class属性 $(this).parent('li').removeClass("prev_selected"); //去掉同兄弟的class属性. $(this).pa ...