哈喽~大家好,之前已经记录了Spring、SpringMvc、Mybatis等框架的学习,对于这些框架的 xx 文件配置还是很多的,所以专门写了一篇关于一些常用配置的文,也为后面的SpringBoot 作出铺垫。
🥇个人主页:个人主页
🥈 系列专栏:【Java框架】
🥉与这篇相关的文章:
【JAVAEE框架】MyBatis与Spring的整合(上) 【JAVAEE框架】MyBatis与Spring的整合(上)_程序猿追的博客-CSDN博客 【JAVAEE框架】浅谈 AOP 及代码实现 【JAVAEE框架】浅谈 AOP 及代码实现_程序猿追的博客-CSDN博客 【JAVAEE框架】浅谈 Spring 框架的两大核心思想 AOP 与 IOP 【JAVAEE框架】浅谈 Spring 框架的两大核心思想 AOP 与 IOP_程序猿追的博客-CSDN博客
目录
3、InternalResourceViewResolver 视图解析器
4、CommonsMultipartResolver 文件上传解析器
5、ConversionServiceFactoryBean
一、MyBatis 文件配置
configuration 配置文件的根元素 settings 定义mybatis的一些全局属性
<settings>
<setting name="logImpl" value="LOG4J"/>
<setting name="autoMappingBehavior" value="FULL"/>
<setting name="jdbcTypeForNull" value="NULL"/>
<setting name="cacheEnabled" value="true"/>
</settings>
PARTIAL[默认],FULL[全匹配],NONE[不匹配] logImpl 是打印日志,日志可以帮我们把重要的信息输出出来,这样出错的时候,可以借助日志可以查看哪里有问题 jdbcTypeForNull 原因:mybatis insert空值报空值异常,但是在pl/sql不会提示错误,主要原因是mybatis无法进行转换,在执行SQL时MyBatis会自动通过对象中的属性给SQL中参数赋值,它会自动将Java类型转换成数据库的类型。而一旦传入的是null它就无法准确判断这个类型应该是什么,就有可能将类型转换错误,从而报错。 解决方法:使用<if> </if>对参数进行NULL判断,针对这些可能为空的字段,通过jdbcType属性手动指定其转换时用到的类型。一般情况下,我们没有必要对每个字段去识别/判断它是否可以为空,而是将所有的字段都当做可以为空,全部手动设置转换类型。
<!-- 配置别名-->
<typeAliases>
<package name="com.itxzw.user.model"/>
</typeAliases>
1、动态SQL
在 MyBatis 的 sql 映射配置文件中,需要使用 paramterType、resultType 来设置 sql 语句的输入输出参数,一般参数都是基本的数据类型或封装类型,但都需要声明该类型的全路径,java.lang.String,或者 cn.com.mybatis.pojo.User, 这时就可以通过 typeAliases 别名来设置,简化复杂度。 eg:没有配置typeAliases的动态sql
<select id="findUserByUsername" parameterType="java.lang.String" resultType="com.itxzw.user.model.User">
SELECT * FROM USER WHERE username LIKE '%${value}%'
</select>
配置了之后
<select id="findUserByUsername" parameterType="java.lang.String" resultType="User">
SELECT * FROM USER WHERE username LIKE '%${value}%'
</select>
直接减少 resultType 里面的代码量 配置某某插件 eg:
<!-- 配置分页插件-->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<property name="helperDialect" value="mysql"/>
</plugin>
</plugins>
二、Spring 文件配置
Spring 引入外部文件
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="jdbc.properties" />
</bean>-->
或者以这种形式
<context:property-placeholder location="classpath:jdbc.properties" system-properties-mode="NEVER"/>
说明
只需要在spring的配置文件里添加一句:<context:property-placeholder?location="classpath:jdbc.properties"/>?即可, 这里location值为参数配置文件的位置,参数配置文件通常放在src目录下,而参数配置文件的格式跟java通用的参数配置文件相同,即键值对的形式
配置数据源(记得要导入pom依赖)
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${driverClassName}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</bean>
1、SqlSessionFactoryBean
<!-- 在基础的 MyBatis 用法中,是通过 SqlSessionFactoryBuilder 来创建 SqlSessionFactory 的, 而在 MyBatis-Spring 中,则使用 SqlSessionFactoryBean 来创建--> <!-- sqlSessionFactory是mybatis中的一个中要的对象,通俗讲它是用来创建sqlSession对象的,而sqlSession用来操作数据库的。--><bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="configLocation" value="classpath:mybatis-config.xml"/> <property name="mapperLocations"> <list> <value>classpath:com/itxzw/*/dao/mapper/*.xml</value> </list> </property> </bean>
2、MapperScannerConfigurer
<!--4、配置MapperScannerConfigurer,自动扫描指定包下的Mapper接口,并将它们直接注册为MapperFactoryBean-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.itxzw.*.dao"/>
</bean>
<!--配置事务--> <!--配置事务管理Bean--> <!-- 对JDBC(Java Data Base Connectivity,java数据库连接)进行事务管理,在spring中是对JdbcTemplate进行事务管理-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- <tx:annotation-driven/> 是开启事务注解扫描 --> <tx:annotation-driven transaction-manager="transactionManager"/> <!-- spring注解扫描--> <!-- 对于spring 不用管理控制层的东西,都交给springmvc,里面的都要com.itxzw,除了com.itxzw.util,com.itxzw.config,Controller--><context:component-scan base-package="com.itxzw"> <context:exclude-filter type="regex" expression="com.itxzw.util,com.itxzw.config"/> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan>
3、InternalResourceViewResolver 视图解析器
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/jsp/"/> <property name="suffix" value=".jsp" /> </bean> 当处理器返回“index”时,InternalResourceViewResolver解析器会自动添加前缀和后缀:/WEB-INF/jsp/index.jsp 如果要使用 .html文件的话,要加上 <!--mvc静态资源放行--> <mvc:resources location="/static/" mapping="/static/**"/>
SimpleMappingExceptionResolver的作用:对所有的异常进行统一处理,他将异常类名映射为视图名,即发生异常时,使用对应的视图显示异常;
简称页面不显示报错信息,只显示一个自定义的错误页面,如:“您访问的页面去了火星了,呜呜呜”等类似的页面
<!--全局异常解析器-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionAttribute" value="message" />
<property name="exceptionMappings">
<props>
<prop key="java.lang.RuntimeException">error</prop>
</props>
</property>
</bean>
4、CommonsMultipartResolver 文件上传解析器
<!--文件上传解析器-->
<!--bean的id就叫multipartResolver,因为有其他的bean通过这个名字依赖-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--设置上传的文件每个允许大小-->
<property name="maxUploadSizePerFile" value="1000000"/>
<!--设置上传的文件编码格式-->
<property name="defaultEncoding" value="utf8"/>
</bean>
MultipartResolver 用于处理文件上传,当收到请求时 DispatcherServlet 的 checkMultipart() 方法会调用 MultipartResolver 的 isMultipart() 方法判断请求中是否包含文件。如果请求数据中包含文件,则调用 MultipartResolver 的 resolveMultipart() 方法对请求的数据进行解析,然后将文件数据解析成 MultipartFile 并封装在 MultipartHttpServletRequest (继承了 HttpServletRequest) 对象中,最后传递给 Controller
5、ConversionServiceFactoryBean
ConversionServiceFactoryBean 格式转换器, 用于SpringMVC 绑定的格式转换
<bean id="conversionService2" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.itxzw.config.StringToDateConvertor">
<property name="pattern" value="yyyy-MM-dd"/>
</bean>
</set>
</property>
</bean>
这里是时间转换的格式效果,设置好了之后我们就要把它配置到你的注解驱动属性里面去
eg:
<!--启动SpringMVC注解 -->
<!--启动SpringMVC注解,注解驱动属性-->
<mvc:annotation-driven conversion-service="conversionService2">
<!-- <mvc:annotation-driven>-->
<mvc:message-converters>
<!--消息转换器StringHttpMessageConverter,设置字符编码为UTF-8-->
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=utf8</value>
</list>
</property>
</bean>
<!--消息转换器FastJson-->
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=utf8</value>
</list>
</property>
<property name="fastJsonConfig">
<bean class="com.alibaba.fastjson.support.config.FastJsonConfig">
<property name="serializerFeatures">
<list>
<!--yyyy-MM-dd HH:mm:ss-->
<value>WriteDateUseDateFormat</value>
<!--禁止循环引用的-->
<value>DisableCircularReferenceDetect</value>
</list>
</property>
</bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
三、SpringMvc 文件配置
1、StringHttpMessageConverter
SpringMVC使用@ResponseBody注解,可以直接返回字符串,非常适合于响应ajax请求。但是,有时候直接返回时,会出现乱码问题。防止乱码的产生,就要加上StringHttpMessageConverter。同时设置 ajax 的消息转换器——FastJson
2、配置springmvc拦截器
HandlerInterceptorAdapter
Interceptor定义: 拦截器是在面向切面编程中应用的,就是在你的service或者一个方法前调用一个方法,或者在方法后调用一个方法。是基于JAVA的反射机制
1.拦截器(Interceptor)执行顺序:
-
请求到达 DispatcherServlet
-
DispatcherServlet 发送至 Interceptor ,执行 preHandle
-
请求达到 Controller
-
请求结束后,postHandle 执行
2.拦截器(Interceptor)和过滤器(Filter)的执行顺序 过滤前->拦截前->Action处理->拦截后->过滤后
3、如何自定义拦截器?
public class LoginInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
Object loginUser = session.getAttribute("loginUser");
if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))){
if (loginUser == null){
response.setHeader("Content-Type","text/plain;charset=utf8");
response.getWriter().write("FAILURE");
return false;
}
}
if (loginUser == null){
response.sendRedirect(request.getContextPath() + "/login.jsp");
return false;
}
return true;
}
}
继承与 HandlerInterceptorAdapter 这个类,重写 preHandle 方法,并且拦截页面请求的方式(扩: 使用XMLHttpRequest (XHR)对象可以与服务器交互。您可以从URL获取数据,而无需让整个的页面刷新。这使得Web页面可以只更新页面的局部,而不影响用户的操作。XMLHttpRequest在 ajax 编程中被大量使用。)
我们这个自定义的类叫 LoginInterceptor ,所以在SpringMVC 里面的配置是:
<!-- 配置springmvc拦截器--> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <mvc:exclude-mapping path="/static/**"/> <mvc:exclude-mapping path="/user/login"/> <bean class="com.itxzw.interceptor.LoginInterceptor"/> </mvc:interceptor> </mvc:interceptors>
4、通过interceptor类设置拦截器
<!--mvc静态资源放行--> <mvc:resources location="/static/" mapping="/static/**"/> <!--spring注解扫描,对弈springmvc,在com.itxzw里面,我们只要 include里面的,其他的都不要--> <context:component-scan base-package="com.itxzw" use-default-filters="true"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan>
四、web.xml 文件配置
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springMVC.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<filter>
<filter-name></filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
1、dispatcherServlet: 视图解析器
characterEncodingFilter 是spring内置过滤器的一种,用来指定请求或者响应的编码格式。
contextConfigLocation: 在web.xml中通过contextConfigLocation配置spring,contextConfigLocation参数定义了要装入的 Spring 配置文件。
不积跬步无以至千里,趁年轻,使劲拼,给未来的自己一个交代!向着明天更好的自己前进吧!