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.iws.controller" />
<!-- 加載註解(如@controller)驅動 -->
<mvc:annotation-driven />
<!-- 國際化攔截器 ???用於不同國家語言切換-->
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
</mvc:interceptors>
<!-- ???此處考慮用那種方式設置國際化 -->
<!-- <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" /> -->
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="messages" />
<property name="defaultEncoding" value="UTF-8"/>
<property name="useCodeAsDefaultMessage" value="true" />
</bean>
<!--避免IE執行AJAX時,返回JSON出現下載文件,例如在百度上點擊一個連接,你無法確定該鏈接點擊後是跳轉到另一個頁面還是自動下載頁面,而該配置則將頁面限定爲text/html頁面-->
<!-- 此處不需修改 -->
<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的映射,將json字符串形式的變量轉換爲類直接調用,例如ItsmOrderController中的queryItsmOrderDo方法中傳入的ItsmOrderSearchParameter 原本傳入的是json字符串,現在可以當做類來用
@RequestMapping(value="/queryItsmOrderDo")
@ResponseBody
public DataGrid<ItsmOrderInfoBean> queryItsmOrderDo(HttpServletRequest request,HttpServletResponse response,ItsmOrderSearchParameter itsmOrderSearchParameter)
{
-->
<!-- 此處不需修改 -->
<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的字符串加上前綴和後綴,例如在String foward = "admin/itsmorder/ItsmOrder";該字符串加上前後綴,變成一個 可用的url地址/WEB-INF/jsp/admin/itsmorder/ItsmOrder.jsp,這裏涉及到訪問的安全性問題 -->
<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>
Spring-Mybatis.xml中看到,如
<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 自動掃描mapping.xml文件 -->
<property name="mapperLocations" value="classpath:com/iws/mapping/*.xml"></property>
</bean>
(4)接下來重點查看下ItsmOrderMapper.xml文件,主要看select方法爲例,其他update和delete類似:
<!-- select中id對應Dao接口中的方法名-->
<select id="queryItsmOrderByParameter" resultMap="BaseResultMap" parameterType="com.iws.pojo.itsmorder.ItsmOrderDto">
SELECT * FROM (
SELECT tt.*, ROWNUM AS rowno FROM (
select <!-- 這裏可以發現數據庫查詢條件嵌套了三個select,-->
<if test="itsmOrderInfoBean.uuid != null">
uuid,
</if>
<if test="itsmOrderInfoBean.att3 != null">
att3,
</if>
1 <!-- 這裏可以看到多出一個1,這個1的目的就是填補判斷條件“ att3,”後面的那個逗號,這樣數據庫查詢語句就不會報錯了-->
from
itsmorder where 1 = 1 <!-- 這裏的 “where 1 = 1”對應<include refid="whereSql"></include>中的and uuid = 中的and對應變成“where 1 = 1 and uuid=”這樣防止語句報錯 -->
<include refid="whereSql"></include>
<!-- start of special -->
<if test="itsmOrderSearchParameter.sort != null and itsmOrderSearchParameter.sort != ''">
order by ${itsmOrderSearchParameter.sort} ${itsmOrderSearchParameter.order}
</if>
<!-- end of special -->
) tt
WHERE ROWNUM <
(#{itsmOrderSearchParameter.start}+#{itsmOrderSearchParameter.number})
) table_alias WHERE
table_alias.rowno >=
#{itsmOrderSearchParameter.start}
</select>
<update id="batchModifyItsmOrder" parameterType="com.iws.pojo.itsmorder.ItsmOrderDto">
update itsmorder
<set>
<if test="itsmOrderInfoBean.orId != null">
orId = #{itsmOrderInfoBean.orId,jdbcType=VARCHAR},
</if>
</set>
where 1=1
<include refid="whereSql"></include>
</update>
外界在調用你的update接口的時候,必須判斷調用之前用戶是否在itsmOrderSearchParameter傳入了一個Orid(這裏是考慮安全性問題),如果沒有,用戶傳入的是createTime,如調用的語句是update itsmorder
set orid="1" where createTime<Tomorow,則createTime<Tomorow的數據的orid值全部被set爲1,如果有在查詢條件中加入orid,則修改的是一條記錄,而不是全部。