springMVC++Mybatis整合
  
整个项目在mysql IDEA 开发环境
 需要的jar包
 1.spring
 2.mybatis
 3.mybatis-spring整合包
 4.数据库驱动包
 5.json依赖包
 
 Dao层:
1、SqlMapConfig.xml,空文件即可,但是需要文件头。

a) 数据库 jdbc.properties

mysql.dirver=com.mysql.jdbc.Driver
mysql.username=root
mysql.password=root
mysql.url=jdbc:mysql://127.0.0.1:3306/test?userUnicode=true&characterEncoding=utf-8

b) SqlSessionFactory对象,需要spring和mybatis整合包下的。
c) 配置mapper文件扫描器。Mapper动态代理开发

Service层:
1、applicationContext.xml包扫描器,扫描@service注解的类。
<context:component-scan base-package="com.soft863">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    <!--加载jdbc.properties配置文件-->
    <context:property-placeholder location="classpath:jdbc.properties" file-encoding="UTf-8" order="1"/>
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="${mysql.dirver}"/>
        <property name="url" value="${mysql.url}"/>
        <property name="username" value="${mysql.username}"/>
        <property name="password" value="${mysql.password}"/>
    </bean>
    <!--配置事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!--配置事务切点-->
    <aop:config>
        <aop:pointcut id="txCut" expression="execution(* com.soft863.service..*.*(..))"></aop:pointcut>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txCut"></aop:advisor>
    </aop:config>
 
2、applicationContext-trans.xml配置事务。

Controller层:
1、Springmvc.xml
a) 包扫描器,扫描@Controller注解的类。
  <!--扫描控制层packe-->
  <context:component-scan base-package="com.soft863.contorller"/>

b) 配置注解驱动  
    <!--开启springmvc注解驱动,代表使用注解方式映射核处理器并加载很多配置-->
    <mvc:annotation-driven conversion-service="myDateConversionService" validator="validator"/>
 
c) 配置视图解析器
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/items/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

Web.xml文件:
1、配置spring监听器
 
 
2、配置前端控制器。

 
第一步  配置springmvc 前端控制器web.xml
  修改<!--默认读取的配置文件在WEB-INF/servlet名字-servlet.xml(springmvc-servlet.xml)-->
第二步 配置tomcat
  springMVC一般都是用注解  一般我们只配置 mvc标签
     使用 mvc:annotation-driven代替上边注解映射器和注解适配器配置
  mvc:annotation-driven默认加载很多的参数绑定方法,比如json转换解析器就默认加载了,
  如果使用mvc:annotation-driven不用配置上边的RequestMappingHandlerMapping和RequestMappingHandlerAdapter
  实际开发时使用mvc:annotation-driven 
  <!-- <mvc:annotation-driven></mvc:annotation-driven> -->
  开启springmvc注解驱动,代表使用注解方式映射核处理器并加载很多配置
  <mvc:annotation-driven></mvc:annotation-driven>
第三步  一般为了我们的工作我们都会,配置视图解析器-->
  配置applicationContext.xml 来连接数据库  之后配置集成文件  配置web.xml文件
  
      
 一.定义控制器方法返回值 
   string  
     1)返回物理视图的路径    
  2)返回跳转资源路径  
       
   ModelAndView: 
    
   void: 使用servlet跳转方式
         通过response指定相应结果,例如响应json数据
 二.跳转 
   forward:  redirect: 以及原始servlet 都不会经过视图解析器
  (404找不到类
  400 传递参数有问题
  500服务器配置错误)
 
 1 前台传递参数参数
 
    1.1 后台接受可以跟前台传过来的名字相同
    1.2 名字不相同我们可以加注解@RequestParam("id") Integer  items_id,
        当前台不传值可以加注解设置默认值required = true(true必须要传,不传报400),defaultValue = "1" 默认传参 value=1   
    1.3 使用pojo对象接受参数参数是pojo对象属性名
    1.4 值对像接受参数(vo)
     CustomerItems citems
     items.id=1000&items.name=xxx&address=helloworld
    1,5 集合或者数组接受参数在方法参数声明 int[] ids
     前台传值 ids=1&ids=2.....
      
       Ⅱ 把值放入页面
       ①我们吧值放入ModlMap
       ②调用modlMap.addAttribute("items",items);
 
  3 日期格式不对的时候需要配置日期转换器 (springmvc.xml)
       3.1 <bean id="myDateConversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
   <property name="converters">
    <list>
     <bean class="com.soft863.mydataCortorller.MydataCortorller"/>
    </list>
   </property>
     </bean>
     然后写一个日期转化得类MydataCortorller,指定日期格式如 yyyy-MM-dd hh-mm-ss
  3.2 在方法加注解 @DateTimeFormat(pattern="yyyy-MM-dd HH-mm-ss") Date date   或者在pojo类中
       可以再实体类属性上加注解 @DateTimeFormat(pattern= "yyyy-MM-dd HH-mm-ss")  
  
4 出现乱码 
      4.1 我们可以配置过滤器
      4.2 File->stting->fileEncoding   全部设置:utf-8
   4.3 在web.xml文件中配置文件
       <!--spring 编码过滤器-->
   <filter>
    <filter-name>encodFilter</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>
   </filter>
   4.4 在tomcat文件中server.xml设置Connection 设置属性URIEncoding="utf-8"
   4.5 设置XXX.jsp的页面编码
   4.6 如果前台参数传递到前台到数据库乱码 在url test?userUnicode=true&characterEncodong=utf-8
  
   5 文件上传(步骤)
      5.1 更改form属性,method=post,entype=multipart/form-data
      5.2 配置springmvc多部见解析器
      <!--上传文件,文件上传有固定写法 不用关联映射配置器-->
  <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
   <property name="maxInMemorySize">
    <value>10485760</value>
   </property>
  </bean>
  5.3 配置tomcat虚拟目录 并导入项目
  5.4 导入相应的架包
 
6 spring高级校验
  使用hibernate校验框架
  导入架包-
  思路
  1. 页面提交参数请求contorller方法中
  配置前步骤
  1. 配置校验器springmvc
   <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
   <!--校验厂商-->
   <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
   <property name="validationMessageSource" ref="errorMessage"/>
  </bean>
  <!--校验错误信息-->
  <bean id="errorMessage" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
   <property name="basenames">
    <list>
     <!--校验源文件路径-->
     <value>classpath:validationMessages</value>
    </list>
   </property>
  2. 注入校验器
      BindingResult bindingResult
  3. 在pojo类中添加校验规则
        @Size(min = 3,max = 30,message = "{itemes.name.length.error}",groups = Mygroup1.class) 
  4. 分组异常 (在pojo类属性上直接加校验) 
 
7. 异常处理
     系统dao
  我们自定义一个异常继承 Exception
   写一个实现HandlerExceptionResolver 方法
   配置springmvc 
   <bean class="com.soft863.execption.ExceptionResolver"></bean>
 
 8. jsonSpringMVC的json解析
   
 json是一个非常重要的数据格式
 它是一个非常轻量级的,解析起来非常方便的对象

 通过@RequestBody可以接受前台传送的json对象并自动封装成一个Javabean
 9. @ModelAttribute("mm")
   把值放入request域 在 前台取值