关于一些常用的配置

一、扫描包:   当然不写.*也是可以的

    <context:component-scan base-package="com.atguigu.atcrowdfunding.*">
        <context:exclude-filter type="anntation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

这里重点说一下<context:exclude-filter和context:include-filter,在配置中,很多时候我们希望把context和springmvc分开进行配置,这个时候我们就需要,对于扫描controller的类,需要包括controller注解

<!-- 扫描@Controller注解 -->
<context:component-scan base-package="com.fq.controller">
    <context:include-filter type="annotation"
        expression="org.springframework.stereotype.Controller" />
</context:component-scan>
<!-- 配置扫描注解,不扫描@Controller注解 -->
<context:component-scan base-package="com.fq">
    <context:exclude-filter type="annotation"
        expression="org.springframework.stereotype.Controller" />
</context:component-scan>

对于springcontext配置文件,不需要我们的controller注解

二、加载外部配置文件

两种方式

	<context:property-placeholder location="classpath:conf/resource.properties" ignore-unresolvable="true" />

或者是

<bean id="Locations" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations" value="classpath:config/jdbc.properties"></property>
	</bean>

第一种本质也是调用了第二种的类进行加载文件。

三、数据库连接池

c3po连接池

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver}"></property>
        <property name="jdbcUrl" value="${jdbc.url}"></property>
        <property name="user" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>

druid连接池 

	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
		destroy-method="close">
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		<property name="driverClassName" value="${jdbc.driver}" />
		<property name="maxActive" value="10" />
		<property name="minIdle" value="5" />
	</bean>

四.mybatis配置

配置sessionfactory

 <bean id="sessionfactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml" />
    </bean>

配置mybatis的扫描器

 	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="cn.tlj.mapper" />
	</bean> 

地址可以改为cn.tlj.**.mapper表示为中间可以由子包组成

或者是 cn.tlj.mapper,cn.zxk.mapper 指定扫描哪几个包下的内容

 	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="cn.tlj.**.mapper" />
	</bean> 

sqlmapconfig.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>
<!-- 配置pagehelper(需要先将pagehepler安装到本地仓库) -->
	<plugins>
		<plugin interceptor="com.github.pagehelper.PageHelper">
		 <!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库-->        
          	 <property name="dialect" value="mysql"/> 
		</plugin>
	</plugins>
</configuration>

或者 将扫描器配置在sqlsessionFactory  classpath*: 表示从依赖的项目打的jar包中进行扫描,加载配置,不加*表示从当前项目类路径进行加载配置文件。

	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	    <property name="configLocation" value="classpath:/mybatis/mybatis-config.xml"></property>
	    <property name="dataSource" ref="dataSource"></property>
	    <property name="mapperLocations">
	        <list>	
	        	<!-- classpath* 表示从依赖的项目打的jar包中进行扫描,加载配置,不加*表示从当前项目类路径进行加载配置文件。 -->
	            <value>classpath*:/mybatis/mapper-*.xml</value>
	        </list>
	    </property>
	    <property name="typeAliasesPackage" value="com.atguigu.atcrowdfunding.bean"></property>
	</bean>

这里讲一下 typeAliasesPackage和typeAliases的用法与区别

typeAliasesPackage用于扫描指定包下的类可以作为返回值类型,比如你在我们的mapper里面resultType就无需使用使用全类名进行书写了,直接写扫描到类的名称即可

typeAliases:数组类型,用来指定别名的。指定了这个属性后,Mybatis会把这个类型的短名称作为这个类型的别名,前提是该类上没有标注@Alias注解,否则将使用该注解对应的值作为此种类型的别名。(value的值一定要是类的完全限定名)

<property name="typeAliases">  
    <array>  
        <value>com.tiantian.mybatis.model.Blog</value>  
        <value>com.tiantian.mybatis.model.Comment</value>  
    </array>  
</property>  

resultType和resultMap

resultType和resultMap都是可以映射我们的接受类的,但是resultType只能根据字段进行简单的映射,而resultMap中的数据,可以使集合或者是对象。这里主要说一下resultMap,

参考:https://blog.csdn.net/qq_42780864/article/details/81429114

五.事务管理器 

<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<!-- 数据源 -->
		<property name="dataSource" ref="dataSource" />
	</bean>
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<!-- 传播行为 -->
			<tx:method name="save*" propagation="REQUIRED" />
			<tx:method name="insert*" propagation="REQUIRED" />
			<tx:method name="add*" propagation="REQUIRED" />
			<tx:method name="create*" propagation="REQUIRED" />
			<tx:method name="delete*" propagation="REQUIRED" />
			<tx:method name="update*" propagation="REQUIRED" />
			<tx:method name="find*" propagation="SUPPORTS" read-only="true" />
			<tx:method name="select*" propagation="SUPPORTS" read-only="true" />
			<tx:method name="get*" propagation="SUPPORTS" read-only="true" />
		</tx:attributes>
	</tx:advice>
	<!-- 切面 -->
	<aop:config>
	<!-- 第一个*表示不限制返回值 ..表示子包以及子包下所有的 *表示类 *表示方法括号中表示参数..为所有参数 -->
		<aop:advisor advice-ref="txAdvice"
			pointcut="execution(* cn.tlj..*.*(..))" />
	</aop:config>

tx:method中可以添加回滚错误方法

<tx:method name="add*" propagation="REQUIRED" rollback-for="java.lang.Exception" />


 六.springMVC

<!-- 注解 -->
    <mvc:annotation-driven></mvc:annotation-driven>
    <!-- 字符串字符编码转换 -->
    <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>

设置扫描包 

    <context:component-scan base-package="com.atguigu.atcrowdfunding.*" use-default-filters="false">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 如果是jsp那么自动转为JSTL视图 -->
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

默认解析出来就是internalResourceViewResolver视图,加了的话就是Jstl视图

    <!-- 异常解析器 -->
    <bean id="exceptionResolver"  
        class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">  
        <property name="exceptionMappings">  
            <props>
                <prop key="java.lang.Exception">error/error</prop>
            </props>  
        </property>  
    </bean>
	<!-- 文件上传解析器 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" p:defaultEncoding="UTF-8">
        <property name="maxUploadSize" value="2097152"/>
        <property name="resolveLazily" value="true"/>
    </bean>
<!-- 配置不拦截的静态资源 -->
    <mvc:resources location="/css/" mapping="/css/**"></mvc:resources>
    <mvc:resources location="/js/" mapping="/js/**"></mvc:resources>
    <mvc:resources location="/images/" mapping="/images/**"></mvc:resources>
    <mvc:resources location="/" mapping="/**"></mvc:resources>

七.web.xml配置

 配置我们自己写的 系统启动监听器 实现了servletContextListener接口

    <listener>
        <listener-class>com.atguigu.atcrowdfunding.listener.StartUpSystemListener</listener-class>
    </listener>

配置springmvc的控制器

	<servlet>
		<servlet-name>repairAndInstall</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<!-- contextConfigLocation不是必须的, 如果不配置contextConfigLocation, springmvc的配置文件默认在:WEB-INF/servlet的name+"-servlet.xml" -->
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:spring/springmvc.xml,classpath:spring/applicationContext-*.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>repairAndInstall</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

 注意:这里核心控制器是处理了所有的请求,这里可以配置多个url

	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>*.htm</url-pattern> <!-- 表示只调整页面,不调用业务层 -->
		<url-pattern>*.do</url-pattern> <!-- 表示调用业务层 -->
	</servlet-mapping>
  1. load-on-startup 元素标记容器是否应该在web应用程序启动的时候就加载这个servlet,(实例化并调用其init()方法)。
  2. 它的值必须是一个整数,表示servlet被加载的先后顺序。
  3. 如果该元素的值为负数或者没有设置,则容器会当Servlet被请求时再加载。
  4. 如果值为正整数或者0时,表示容器在应用启动时就加载并初始化这个servlet,值越小,servlet的优先级越高,就越先被加载。值相同时,容器就会自己选择顺序来加载。
	<!-- 字符编码过滤器 -->
	<filter>
		<filter-name>encoding</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<!-- 表示强制将响应字符编码设置与请求字符编码设置保持一致。 -->
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>encoding</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<!-- 支持REST风格,可以将POST请求转换为PUT或DELETE请求 servlet-name配置的是核心过滤器的名字-->
	<filter>
		<filter-name>HiddenHttpMethodFilter</filter-name>
		<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>HiddenHttpMethodFilter</filter-name>
		<servlet-name>springmvc</servlet-name>
	</filter-mapping>
	<!-- 会话超时时间,默认30分钟 -->
	<session-config>
		<session-timeout>60</session-timeout>
	</session-config>

猜你喜欢

转载自blog.csdn.net/afdasfggasdf/article/details/89306189