SSM框架整合教程(Spring+SpringMVC+MyBatis)

2023-05-16

SSM框架

1、ssm在各层中的作用

ssm框架与ssh框架类似,使用springmvc代替strusts2、mybatis代替hibernate

Spring:

主要作用是依赖注入、控制反转以达到解耦的目的,用于对整个应用中的bean实例进行管理,作用于ssm各个层;(aop用于复杂的业务交叉开发)

SpringMVC:

整个应用架构的骨架,负责应用中mvc模型的实现,向下层传递前端请求,向上层传递服务响应,主要作用于action层;

Mybatis:

主要用于数据库操作,提供了便捷的数据库操作框架,主要作用于dao层;

2、ssm注解框架整合配置

前置:eclipse javaee +mysql5.7+tomcat9.0

新建maven项目:

创建相应目录如图:


com.zhangteng.controller

控制层

com.zhangteng.dao

Dao层

com.zhangteng.mapping

Mybatis映射文件

com.zhangteng.pojo

实体

com.zhangteng.service

业务层

com.zhangteng.springAOPTest

Aop demo代码

resources.jdbc.properties

Jdbc配置信息

resources.log4j.properties

Log配置信息

resources.spring-mvc.xml

Spring-mvc配置信息

resources.spring-mybatis.xml

Spring与mybatis配置信息

logs

日志

mybatis-auto-libs

Mybatis自动生成实体、dao、映射的lib

ssm配置信息:

pom:

 

<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>test</groupId>

    <artifactId>ssmDemo</artifactId>

    <packaging>war</packaging>

    <version>0.0.1-SNAPSHOT</version>

    <name>ssmDemoMaven Webapp</name>

    <url>http://maven.apache.org</url>

 

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

        <!-- aspectj jar -->

        <dependency>

            <groupId>org.aspectj</groupId>

            <artifactId>aspectjrt</artifactId>

            <version>1.8.9</version>

        </dependency>

        <dependency>

            <groupId>org.aspectj</groupId>

            <artifactId>aspectjtools</artifactId>

            <version>1.8.9</version>

        </dependency>

        <dependency>

            <groupId>org.aspectj</groupId>

            <artifactId>aspectjweaver</artifactId>

            <version>1.7.4</version>

        </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>

        <!-- 导入Mysql数据库链接jar -->

        <dependency>

            <groupId>mysql</groupId>

            <artifactId>mysql-connector-java</artifactId>

            <version>5.1.37</version>

        </dependency>

        <!-- 导入dbcpjar包,用来在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>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 -->

 

        <!-- 上传组件包 -->

        <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>org.codehaus.jackson</groupId>

            <artifactId>jackson-mapper-asl</artifactId>

            <version>1.9.4</version>

        </dependency>

        <!-- <dependency><groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId>

            <version>1.1.41</version></dependency> <dependency> <groupId>commons-codec</groupId>

            <artifactId>commons-codec</artifactId><version>1.9</version> </dependency> -->

    </dependencies>

    <build>

        <finalName>ssmDemo</finalName>

    </build>

</project>

 

Jdbc.properties:

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/test

jdbc.username=root

jdbc.password=root

#定义初始连接数 

jdbc.initialSize=0

#定义最大连接数 

jdbc.maxActive=20

#定义最大空闲 

jdbc.maxIdle=20

#定义最小空闲 

jdbc.minIdle=1

#定义最长等待时间 

jdbc.maxWait=60000

 

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-ddHH\:mm\:ss}][%c]%m%n 

 

spring-mvc.xml:

<?xmlversion="1.0"encoding="UTF-8"?>

<beansxmlns="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-scanbase-package="com.zhangteng.controller"/>

    <!-- don't handle the static resource -->

    <mvc:default-servlet-handler/>

 

    <!-- if you use annotation you must configurefollowing setting -->

    <mvc:annotation-driven/>

 

    <!--避免IE执行AJAX时,返回JSON出现下载文件 -->

    <beanid="mappingJacksonHttpMessageConverter"

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

        <propertyname="supportedMediaTypes">

            <list>

                <value>text/html;charset=UTF-8</value>

            </list>

        </property>

    </bean>

    <!-- 启动SpringMVC的注解功能,完成请求和注解POJO的映射 -->

    <bean

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

        <propertyname="messageConverters">

            <list>

                <refbean="mappingJacksonHttpMessageConverter"/><!-- JSON转换器 -->

            </list>

        </property>

    </bean>

 

    <!-- 定义跳转的文件的前后缀,视图模式配置 -->

    <bean

        class="org.springframework.web.servlet.view.InternalResourceViewResolver">

        <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个可用的url地址 -->

        <propertyname="prefix"value="/WEB-INF/jsp/"/>

        <propertyname="suffix"value=".jsp"/>

    </bean>

 

    <!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 -->

    <beanid="multipartResolver"

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

        <!-- 默认编码 -->

        <propertyname="defaultEncoding"value="utf-8"/>

        <!-- 文件大小最大值 -->

        <propertyname="maxUploadSize"value="10485760000"/>

        <!-- 内存中的最大值 -->

        <propertyname="maxInMemorySize"value="40960"/>

    </bean>

 

</beans> 

 

spring-mabatis.xml:

<?xmlversion="1.0"encoding="UTF-8"?>

<beansxmlns="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"

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

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

        http://www.springframework.org/schema/beans/spring-beans-4.1.xsd

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

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

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

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

    <!-- 自动扫描 -->

    <context:component-scanbase-package="com.zhangteng"/>

    <!-- aop 自动代理配置 -->

    <!-- <aop:aspectj-autoproxy proxy-target-class="true"/> -->

 

    <!-- 引入配置文件 -->

    <beanid="propertyConfigurer"

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

        <propertyname="location"value="classpath:jdbc.properties"/>

    </bean>

 

    <beanid="dataSource"class="org.apache.commons.dbcp.BasicDataSource"

        destroy-method="close">

        <propertyname="driverClassName"value="${jdbc.driver}"/>

        <propertyname="url"value="${jdbc.url}"/>

        <propertyname="username"value="${jdbc.username}"/>

        <propertyname="password"value="${jdbc.password}"/>

        <!-- 初始化连接大小 -->

        <propertyname="initialSize"value="${jdbc.initialSize}"></property>

        <!-- 连接池最大数量 -->

        <propertyname="maxActive"value="${jdbc.maxActive}"></property>

        <!-- 连接池最大空闲 -->

        <propertyname="maxIdle"value="${jdbc.maxIdle}"></property>

        <!-- 连接池最小空闲 -->

        <propertyname="minIdle"value="${jdbc.minIdle}"></property>

        <!-- 获取连接最大等待时间 -->

        <propertyname="maxWait"value="${jdbc.maxWait}"></property>

    </bean>

 

    <!-- springMyBatis完美整合,不需要mybatis的配置映射文件 -->

    <beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">

        <propertyname="dataSource"ref="dataSource"/>

        <!-- 自动扫描mapping.xml文件 -->

        <propertyname="mapperLocations"value="classpath:com/zhangteng/mapping/*.xml"></property>

    </bean>

 

    <!-- DAO接口所在包名,Spring会自动查找其下的类 -->

    <beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer">

        <propertyname="basePackage"value="com.zhangteng.dao"/>

        <propertyname="sqlSessionFactoryBeanName"value="sqlSessionFactory"></property>

    </bean>

 

    <!-- (事务管理)transaction manager, use JtaTransactionManager for globaltx-->

    <beanid="transactionManager"

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

        <propertyname="dataSource"ref="dataSource"/>

    </bean>

 

</beans> 

web.xml:

<?xmlversion="1.0"encoding="UTF-8"?> 

<web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

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

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

    version="3.0"> 

   <display-name>Archetype Created Web Application</display-name> 

   <!-- Springmybatis的配置文件 --> 

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

 

Mybatis自动生成dao、map、pojo

目录结构:

配置信息generatorConfig.xml:

<?xmlversion="1.0"encoding="UTF-8"?>   

<!DOCTYPEgeneratorConfiguration   

  PUBLIC "-//mybatis.org//DTDMyBatis Generator Configuration 1.0//EN"   

  "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">   

<generatorConfiguration>   

<!-- 数据库驱动-->   

   <classPathEntry location="mysql-connector-java-5.1.25.jar"/>   

   <contextid="DB2Tables" targetRuntime="MyBatis3">   

        <commentGenerator>   

            <propertyname="suppressDate"value="true"/>   

            <!-- 是否去除自动生成的注释 true:是 false: -->   

            <propertyname="suppressAllComments"value="true"/>   

        </commentGenerator>   

        <!--数据库链接URL,用户名、密码 -->   

        <jdbcConnectiondriverClass="com.mysql.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/test"userId="root"password="root">   

        </jdbcConnection>   

        <javaTypeResolver>   

            <propertyname="forceBigDecimals"value="false"/>   

        </javaTypeResolver>   

        <!-- 生成模型的包名和位置-->   

        <javaModelGeneratortargetPackage="test.domain"targetProject="src">   

            <propertyname="enableSubPackages"value="true"/>   

            <propertyname="trimStrings"value="true"/>   

        </javaModelGenerator>   

        <!-- 生成映射文件的包名和位置-->   

        <sqlMapGeneratortargetPackage="test.mapping"targetProject="src">   

            <propertyname="enableSubPackages"value="true"/>   

        </sqlMapGenerator>   

        <!-- 生成DAO的包名和位置-->   

        <javaClientGeneratortype="XMLMAPPER"targetPackage="test.IDao"targetProject="src">   

            <propertyname="enableSubPackages"value="true"/>   

        </javaClientGenerator>   

        <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->   

        <tabletableName="user_t"domainObjectName="User"enableCountByExample="false"enableUpdateByExample="false"enableDeleteByExample="false"enableSelectByExample="false"selectByExampleQueryId="false"></table> 

   </context>   

</generatorConfiguration>   

运行:

控制台输入以下命令自动构建mbatis 实体类、dao及map

java -jar mybatis-generator-core-1.3.2.jar-configfile generatorConfig.xml-overwrite

注解标签:

Spring:

1、使用@Repository、@Service、@Controller和 @Component 将类标识为Bean
2、使用 @PostConstruct 和@PreDestroy 指定生命周期回调方法
3、使用 @Required 进行Bean 的依赖检查
4、使用 @Resource、@Autowired和 @Qualifier 指定Bean 的自动装配策略
5、使用 @Configuration 和@Bean 进行 Bean 的声明
# @Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。

 

共同点

 

两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。

 

不同点

 

(1)@Autowired

 

@Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入。

@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。如下:

 

publicclass TestServiceImpl {

    @Autowired

    @Qualifier("userDao")

    private UserDao userDao;

}

(2)@Resource

 

@Resource默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。

注:最好是将@Resource放在setter方法上,因为这样更符合面向对象的思想,通过set、get去操作属性,而不是直接去操作属性。

 

@Resource装配顺序:

 

①如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。

 

②如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。

 

③如果指定了type,则从上下文中找到类似匹配的唯一bean进行装配,找不到或是找到多个,都会抛出异常。

 

④如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。

 

@Resource的作用相当于@Autowired,只不过@Autowired按照byType自动注入。

 

Spring-mvc:

1、@Controller

在SpringMVC 中,控制器Controller负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@RequestParam 等一些注解用以定义URL 请求和Controller 方法之间的映射,这样的Controller 就能被外界访问到。此外Controller 不会直接依赖于HttpServletRequest 和HttpServletResponse 等HttpServlet 对象,它们可以通过Controller 的方法参数灵活的获取到。

 

@Controller用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping 注解。@Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器。单单使用@Controller 标记在一个类上还不能真正意义上的说它就是SpringMVC 的一个控制器类,因为这个时候Spring 还不认识它。那么要如何做Spring 才能认识它呢?这个时候就需要我们把这个控制器类交给Spring 来管理。有两种方式:

 

  (1)在SpringMVC 的配置文件中定义MyController的bean 对象。

 

  (2)在SpringMVC 的配置文件中告诉Spring该到哪里去找标记为@Controller 的Controller 控制器。

 

<!--方式一-->

<beanclass="com.host.app.web.controller.MyController"/>

<!--方式二-->

<context:component-scan base-package = "com.host.app.web" />//路径写到controller的上一层(扫描包详解见下面浅析)

2、@RequestMapping

RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

 

RequestMapping注解有六个属性,下面我们把她分成三类进行说明(下面有相应示例)。

 

1、 value, method;

 

value:     指定请求的实际地址,指定的地址可以是URITemplate 模式(后面将会说明);

 

method:  指定请求的method类型, GET、POST、PUT、DELETE等;

 

2、consumes,produces

 

consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json,text/html;

 

produces:    指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

 

3、params,headers

 

params: 指定request中必须包含某些参数值是,才让该方法处理。

 

headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。

 

3、@ModelAttribute和 @SessionAttributes

代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法,可用于注解和方法参数中,可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。

 

 @SessionAttributes即将值放到session作用域中,写在class上面。

 

具体示例参见下面:使用@ModelAttribute 和 @SessionAttributes 传递和保存数据

 

4、@PathVariable

用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。

5、@requestParam

@requestParam主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter("name"),它有三个常用参数:defaultValue= "0", required = false, value = "isApp";defaultValue表示设置默认值,required 铜过boolean设置是否是必须要传入的参数,value 值表示接受的传入的参数类型。

 

6、@ResponseBody

作用: 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。

 

使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;

 

Mabatis:

由spring管理

源码地址:

https://github.com/duoluo9/ssmDemo

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SSM框架整合教程(Spring+SpringMVC+MyBatis) 的相关文章

随机推荐

  • 知识图谱技术路线

    知识图谱技术路线 知识图谱知识表示含义分类表示学习 构建模式架构分类 知识建模开放型知识图谱领域知识图谱建模方法 知识抽取结构化数据半结构化数据非 半结构化数据 知识融合方法单图谱跨图谱工具 知识存储RDF三元组水平存储属性存储垂直分割图存
  • 阿里P8大佬亲自讲解!写给程序员的Flutter详细教程,灵魂拷问

    我们程序员经常迷茫于有太多东西要学 xff0c 有些找不到方向 不知所措 很多程序员都愿意说 xff0c 我想变得更好 xff0c 但是更好是什么却很模糊 xff0c 同时我们又不知道该怎么样去做 我们的生命如此短暂 xff0c 作为程序员
  • Linux 环境下验证码无法正常显示,提示 Could not initialize class sun.awt.X11GraphicsEnvironment

    验证码无法正常显示 xff0c 提示 Could not initialize class sun awt X11GraphicsEnvironment 在 Linux 下部署项目时 xff0c 一直遇到一个验证码不显示 xff0c 看了日
  • ubuntu 安装python3.6

    一 运行命令 sudo add apt repository ppa jonathonf python 3 6 可能会出现Ubuntu无法找到add apt repository问题的解决方法 解决办法 xff1a 1 apt get in
  • MTK的android镜像 解包和打包( boot.img, system.img, userdata.img, or recovery.img)

    DESCRIPTION MTK codebase编译出来的image必须使用MTK codebase里的工具才能解开或打包 xff0c 网络上的打包 解包工具不能在MTK的image里使用 KEYWORD 打包 解包 diff pyc pa
  • android 抓完整的log的方式(包括logcat抓所有非内核log)

    log 分为 kernel main events radio 几种log kernel属于 linux内核的log xff0c 通过读取 proc kmsg 或者通过串口来抓取 USB连接手机抓取方式 xff1a adb shell ca
  • 字节4轮面试,3轮都问了RecyclerView

    阿里面试总共4轮 xff0c 其中有3轮面试都问到了RecyclerView的问题 面试的点各不相同 xff0c 有原理 嵌套问题 有缓存实现 xff0c 但是最终都是殊途同归 xff0c 所有的问题都汇集在 如何对RecyclerView
  • 重庆思庄Linux技术分享-创建容器对应的systemd服务并设置其开机自启动失败

    容器已启动 xff0c 服务文件也生成在user文件里 xff0c 运行systemctl user daemmon reload 命令重新加载失败 xff0c 在我退出服务端的时候 xff0c 重新用ssh 进入就解决了 要使用 syst
  • Linux下添加应用程序图标

    为没有快捷方式的程序生成快捷方式图标 以SecureCRT为例 生成 desktop图标 编辑文本文件 xff0c 命名为SecureCRT desktop 内容如下 xff1a Desktop Entry Name 61 SecureCR
  • 如何改变Debian桌面 或者 gnome桌面图标的大小

    要改变Debian桌面图标的size xff0c 我们在图标上点击右键 xff0c 会有一个stretch选项 xff0c 通过这个 xff0c 可以用托拽的方法 xff0c 一个一个来改变图标大小 但这个方法很费劲 xff0c 而且托拽的
  • gradle,gradle/wrapper,build.gradle区别

    1 gradle 跟 maven ant一样是构建工具 2 gradle wrapper Gradle Wrapper是Gradle项目的一部分 引入gradle wrapper xff0c 通过读取配置文件中gradle的版本 xff0c
  • AI一般是用来制作什么的

    AI一般用来制作logo 分页 xff0c 海报等等 面板堆栈的话就是很多功能堆放的位置 一般打印出来的话用cmyk模式 如果是在web端的话用RGB模式 xff0c 因为cmyk模式在你进行存储的过程中颜色可能会丢失 出血值就是在你打印东
  • NetworkX画图:nx.draw_networkx(函数详解)

    NetworkX画图 xff1a nx draw networkx 函数详解 draw networkx span class token punctuation span G span class token punctuation sp
  • 小程序代码构成

    了解项目的基本结构 1 pages xff1a 用来存放所有小程序的页面 2 utils xff1a 用来存放工具性质的模块 xff08 例如 xff1a 格式化事件的自定义模块 xff09 3 app js xff1a 小程序项目的入口文
  • 操作系统笔记

    第一章 xff1a 导论 1 计算机系统 的四个组成成分 xff1a 计算机硬件 操作系统 系统程序和用户 可以大致分为硬件 软件和数据 定义 xff1a 现代通用计算机系统由一个或多个CPU和若干设备控制器通过共同的总线相连而成 xff0
  • 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.2

    HP Socket 是一套通用的高性能 TCP UDP HTTP 通信框架 xff0c 包含服务端组件 客户端组件和 Agent 组件 xff0c 广泛适用于各种不同应用场景的 TCP UDP HTTP 通信系统 xff0c 提供 C C
  • java根据图片的url地址下载图片到本地

    java根据图片的url地址下载图片到本地 已知图片的url地址 xff0c 通过java代码下载到本地 xff0c 直接上代码 package demo import java io ByteArrayOutputStream impor
  • 【Android -- 动画】Lottie 动画的基本使用

    一 简介 Lottie 是 Airbnb 开源的一个面向 iOS Android React Native 的动画库 xff0c 能分析 Adobe After Effects 导出的动画 xff0c 并且能让原生 App 像使用静态素材一
  • 【Android Studio 使用教程】-- 配置 Kotlin

    简介 Kotlin 是一个基于 JVM 的新的编程语言 xff0c 由 JetBrains 开发 JetBrains xff0c 作为目前广受欢迎的 Java IDE IntelliJ 的提供商 xff0c 在 Apache 许可下已经开源
  • SSM框架整合教程(Spring+SpringMVC+MyBatis)

    SSM框架 1 ssm在各层中的作用 ssm框架与ssh框架类似 xff0c 使用springmvc代替strusts2 mybatis代替hibernate Spring xff1a 主要作用是依赖注入 控制反转以达到解耦的目的 xff0