zoukankan      html  css  js  c++  java
  • SpringMVC与MyBatis整合方法

    一、springmvc+mybaits的系统架构:

    第一步:整合dao层

             mybatis和spring整合,通过spring管理mapper接口。

             使用mapper的扫描器自动扫描mapper接口在spring中进行注册。

    第二步:整合service层

             通过spring管理 service接口。

             使用配置方式将service接口配置在spring配置文件中。

             实现事务控制。

    第三步:整合springmvc

             由于springmvc是spring的模块,不需要整合。

     整合步骤:

    一、首先创建Mybatis自己的配置文件(例如: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>
        
        <!-- 全局setting配置,根据需要添加 -->
        
        <!-- 配置别名 -->
        <typeAliases>
            <!-- 批量扫描别名 -->
            <package name="cn.itcast.ssm.po"/>
        </typeAliases>
    
        <!-- 配置mapper
        由于使用spring和mybatis的整合包进行mapper扫描,这里不需要配置了。
        必须遵循:mapper.xml和mapper.java文件同名且在一个目录 
         -->
    
        <!-- <mappers>
        
        </mappers> -->
    </configuration>
    View Code

     tips:使用自动扫描器时,mapper.xml文件如果和mapper.java接口在一个目录则此处不用定义mappers.

    二、创建applicationContext-dao.xml文件,用以配置数据源、事务管理,配置SqlSessionFactory、mapper扫描器。

     1 <beans xmlns="http://www.springframework.org/schema/beans"
     2     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
     3     xmlns:context="http://www.springframework.org/schema/context"
     4     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
     5     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     6         http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
     7         http://www.springframework.org/schema/mvc 
     8         http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd 
     9         http://www.springframework.org/schema/context 
    10         http://www.springframework.org/schema/context/spring-context-3.2.xsd 
    11         http://www.springframework.org/schema/aop 
    12         http://www.springframework.org/schema/aop/spring-aop-3.2.xsd 
    13         http://www.springframework.org/schema/tx 
    14         http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
    15 
    16     <!-- 加载db.properties文件中的内容,db.properties文件中key命名要有一定的特殊规则 -->
    17     <context:property-placeholder location="classpath:db.properties" />
    18     <!-- 配置数据源 ,dbcp -->
    19 
    20     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
    21         destroy-method="close">
    22         <property name="driverClassName" value="${jdbc.driver}" />
    23         <property name="url" value="${jdbc.url}" />
    24         <property name="username" value="${jdbc.username}" />
    25         <property name="password" value="${jdbc.password}" />
    26         <property name="maxActive" value="30" />
    27         <property name="maxIdle" value="5" />
    28     </bean>
    29     <!-- sqlSessionFactory -->
    30     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    31         <!-- 数据库连接池 -->
    32         <property name="dataSource" ref="dataSource" />
    33         <!-- 加载mybatis的全局配置文件 -->
    34         <property name="configLocation" value="classpath:mybatis/sqlMapConfig.xml" />
    35     </bean>
    36     <!-- mapper扫描器 -->
    37     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    38         <!-- 扫描包路径,如果需要扫描多个包,中间使用半角逗号隔开 -->
    39         <property name="basePackage" value="cn.itcast.ssm.mapper"></property>
    40         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    41     </bean>
    42 
    43 </beans>
    View Code

     db.properties:

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/mybatis
    jdbc.username=root
    jdbc.password=mysql
    View Code

     tips:使用逆向工程生成po类及mapper(单表增删改查)

     三、手动定义商品查询mapper及商品查询dao接口

    ItemsMapperCustom.xml

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
     3 <mapper namespace="cn.itcast.ssm.mapper.ItemsMapperCustom" >
     4 
     5    <!-- 定义商品查询的sql片段,就是商品查询条件 -->
     6    <sql id="query_items_where">
     7        <!-- 使用动态sql,通过if判断,满足条件进行sql拼接 -->
     8        <!-- 商品查询条件通过ItemsQueryVo包装对象 中itemsCustom属性传递 -->
     9            <if test="itemsCustom!=null">
    10                <if test="itemsCustom.name!=null and itemsCustom.name!=''">
    11                    items.name LIKE '%${itemsCustom.name}%'
    12                </if>
    13            </if>
    14     
    15    </sql>
    16       
    17       <!-- 商品列表查询 -->
    18       <!-- parameterType传入包装对象(包装了查询条件)
    19           resultType建议使用扩展对象
    20        -->
    21       <select id="findItemsList" parameterType="cn.itcast.ssm.po.ItemsQueryVo"
    22            resultType="cn.itcast.ssm.po.ItemsCustom">
    23           SELECT items.* FROM items  
    24           <where>
    25               <include refid="query_items_where"></include>
    26           </where>
    27       </select>
    28       
    29 </mapper
    View Code

     ItemsMapperCustom.java

     1 package cn.itcast.ssm.mapper;
     2 
     3 import cn.itcast.ssm.po.Items;
     4 import cn.itcast.ssm.po.ItemsCustom;
     5 import cn.itcast.ssm.po.ItemsExample;
     6 import cn.itcast.ssm.po.ItemsQueryVo;
     7 
     8 import java.util.List;
     9 import org.apache.ibatis.annotations.Param;
    10 
    11 public interface ItemsMapperCustom {
    12     //商品查询列表
    13     public List<ItemsCustom> findItemsList(ItemsQueryVo itemsQueryVo)throws Exception;
    14 }
    View Code

    四、整合service,让spring管理service接口,进行事务管理配置。

    首先,定义Service接口和Service的实现类

     1 package cn.itcast.ssm.service;
     2 
     3 import java.util.List;
     4 
     5 import cn.itcast.ssm.po.ItemsCustom;
     6 import cn.itcast.ssm.po.ItemsQueryVo;
     7 
     8 /**
     9  * 
    10  * <p>Title: ItemsService</p>
    11  * <p>Description:商品管理service </p>
    12  * <p>Company: www.itcast.com</p> 
    13  * @author    传智.燕青
    14  * @date    2015-4-13下午3:48:09
    15  * @version 1.0
    16  */
    17 public interface ItemsService {
    18     
    19     //商品查询列表
    20     public List<ItemsCustom> findItemsList(ItemsQueryVo itemsQueryVo) throws Exception;
    21     
    22     //根据id查询商品信息
    23     /**
    24      * 
    25      * <p>Title: findItemsById</p>
    26      * <p>Description: </p>
    27      * @param id 查询商品的id
    28      * @return
    29      * @throws Exception
    30      */
    31     public ItemsCustom findItemsById(Integer id) throws Exception;
    32     
    33     //修改商品信息
    34     /**
    35      * 
    36      * <p>Title: updateItems</p>
    37      * <p>Description: </p>
    38      * @param id 修改商品的id
    39      * @param itemsCustom 修改的商品信息
    40      * @throws Exception
    41      */
    42     public void updateItems(Integer id,ItemsCustom itemsCustom) throws Exception;
    43     
    44 
    45 }
    View Code 
     1 package cn.itcast.ssm.service.impl;
     2 
     3 import java.util.List;
     4 
     5 import org.springframework.beans.BeanUtils;
     6 import org.springframework.beans.factory.annotation.Autowired;
     7 
     8 import cn.itcast.ssm.mapper.ItemsMapper;
     9 import cn.itcast.ssm.mapper.ItemsMapperCustom;
    10 import cn.itcast.ssm.po.Items;
    11 import cn.itcast.ssm.po.ItemsCustom;
    12 import cn.itcast.ssm.po.ItemsQueryVo;
    13 import cn.itcast.ssm.service.ItemsService;
    14 
    15 /**
    16  * 
    17  * <p>Title: ItemsServiceImpl</p>
    18  * <p>Description: 商品管理</p>
    19  * <p>Company: www.itcast.com</p> 
    20  * @author    传智.燕青
    21  * @date    2015-4-13下午3:49:54
    22  * @version 1.0
    23  */
    24 public class ItemsServiceImpl implements ItemsService{
    25     
    26     @Autowired
    27     private ItemsMapperCustom itemsMapperCustom;
    28     
    29     @Autowired
    30     private ItemsMapper itemsMapper;
    31 
    32     @Override
    33     public List<ItemsCustom> findItemsList(ItemsQueryVo itemsQueryVo)
    34             throws Exception {
    35         //通过ItemsMapperCustom查询数据库
    36         return itemsMapperCustom.findItemsList(itemsQueryVo);
    37     }
    38 
    39     @Override
    40     public ItemsCustom findItemsById(Integer id) throws Exception {
    41         
    42         Items items = itemsMapper.selectByPrimaryKey(id);
    43         //中间对商品信息进行业务处理
    44         //....
    45         //返回ItemsCustom
    46         ItemsCustom itemsCustom = new ItemsCustom();
    47         //将items的属性值拷贝到itemsCustom
    48         BeanUtils.copyProperties(items, itemsCustom);
    49         
    50         return itemsCustom;
    51         
    52     }
    53 
    54     @Override
    55     public void updateItems(Integer id, ItemsCustom itemsCustom) throws Exception {
    56         //添加业务校验,通常在service接口对关键参数进行校验
    57         //校验 id是否为空,如果为空抛出异常
    58         
    59         //更新商品信息使用updateByPrimaryKeyWithBLOBs根据id更新items表中所有字段,包括 大文本类型字段
    60         //updateByPrimaryKeyWithBLOBs要求必须转入id
    61         itemsCustom.setId(id);
    62         itemsMapper.updateByPrimaryKeyWithBLOBs(itemsCustom);
    63     }
    64 
    65 }
    View Code

    然后,在spring容器配置service(applicationContext-service.xml)

    1 <bean id="itemsService" class="cn.itcast.ssm.service.impl.ItemsServiceImpl"/>
    2 </beans>
    View Code

    配置事务控制,applicationContext-transcation.xml

     1 <beans xmlns="http://www.springframework.org/schema/beans"
     2     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
     3     xmlns:context="http://www.springframework.org/schema/context"
     4     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
     5     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     6         http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
     7         http://www.springframework.org/schema/mvc 
     8         http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd 
     9         http://www.springframework.org/schema/context 
    10         http://www.springframework.org/schema/context/spring-context-3.2.xsd 
    11         http://www.springframework.org/schema/aop 
    12         http://www.springframework.org/schema/aop/spring-aop-3.2.xsd 
    13         http://www.springframework.org/schema/tx 
    14         http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
    15 
    16 <!-- 事务管理器 
    17     对mybatis操作数据库事务控制,spring使用jdbc的事务控制类
    18 -->
    19 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    20     <!-- 数据源
    21     dataSource在applicationContext-dao.xml中配置了
    22      -->
    23     <property name="dataSource" ref="dataSource"/>
    24 </bean>
    25 
    26 <!-- 通知 -->
    27 <tx:advice id="txAdvice" transaction-manager="transactionManager">
    28     <tx:attributes>
    29         <!-- 传播行为 -->
    30         <tx:method name="save*" propagation="REQUIRED"/>
    31         <tx:method name="delete*" propagation="REQUIRED"/>
    32         <tx:method name="insert*" propagation="REQUIRED"/>
    33         <tx:method name="update*" propagation="REQUIRED"/>
    34         <tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
    35         <tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
    36         <tx:method name="select*" propagation="SUPPORTS" read-only="true"/>
    37     </tx:attributes>
    38 </tx:advice>
    39 <!-- aop -->
    40 <aop:config>
    41     <aop:advisor advice-ref="txAdvice" pointcut="execution(* cn.itcast.ssm.service.impl.*.*(..))"/>
    42 </aop:config>
    43 
    44 </beans>
    View Code 

    五、配置springmvc.xml文件

     1 <beans xmlns="http://www.springframework.org/schema/beans"
     2     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
     3     xmlns:context="http://www.springframework.org/schema/context"
     4     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
     5     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     6         http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
     7         http://www.springframework.org/schema/mvc 
     8         http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd 
     9         http://www.springframework.org/schema/context 
    10         http://www.springframework.org/schema/context/spring-context-3.2.xsd 
    11         http://www.springframework.org/schema/aop 
    12         http://www.springframework.org/schema/aop/spring-aop-3.2.xsd 
    13         http://www.springframework.org/schema/tx 
    14         http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
    15 
    16     <!-- 可以扫描controller、service、...
    17     这里让扫描controller,指定controller的包
    18      -->
    19     <context:component-scan base-package="cn.itcast.ssm.controller"></context:component-scan>
    20     
    21         
    22     <!--注解映射器 -->
    23     <!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> -->
    24     <!--注解适配器 -->
    25     <!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> -->
    26     
    27     <!-- 使用 mvc:annotation-driven代替上边注解映射器和注解适配器配置
    28     mvc:annotation-driven默认加载很多的参数绑定方法,
    29     比如json转换解析器就默认加载了,如果使用mvc:annotation-driven不用配置上边的RequestMappingHandlerMapping和RequestMappingHandlerAdapter
    30     实际开发时使用mvc:annotation-driven
    31      -->
    32     <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
    33     
    34 
    35     <!-- 视图解析器
    36     解析jsp解析,默认使用jstl标签,classpath下的得有jstl的包
    37      -->
    38     <bean
    39         class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    40         <!-- 配置jsp路径的前缀 -->
    41         <property name="prefix" value="/WEB-INF/jsp/"/>
    42         <!-- 配置jsp路径的后缀 -->
    43         <property name="suffix" value=".jsp"/>
    44     </bean>
    45     
    46     <!-- 自定义参数绑定 -->
    47     <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    48         <!-- 转换器 -->
    49         <property name="converters">
    50             <list>
    51                 <!-- 日期类型转换 -->
    52                 <bean class="cn.itcast.ssm.controller.converter.CustomDateConverter"/>
    53             </list>
    54         </property>
    55         
    56     
    57     </bean>
    58 </beans>
    View Code

    六、编写controller

     1 @RequestMapping("/items")
     2 public class ItemsController {
     3 
     4     @Autowired
     5     private ItemsService itemsService;
     6 
     7     // 商品查询
     8     @RequestMapping("/queryItems")
     9     public ModelAndView queryItems(HttpServletRequest request) throws Exception {
    10         //测试forward后request是否可以共享
    11         
    12         System.out.println(request.getParameter("id"));
    13 
    14         // 调用service查找 数据库,查询商品列表
    15         List<ItemsCustom> itemsList = itemsService.findItemsList(null);
    16         
    17         // 返回ModelAndView
    18         ModelAndView modelAndView = new ModelAndView();
    19         // 相当 于request的setAttribut,在jsp页面中通过itemsList取数据
    20         modelAndView.addObject("itemsList", itemsList);
    21 
    22         // 指定视图
    23         // 下边的路径,如果在视图解析器中配置jsp路径的前缀和jsp路径的后缀,修改为
    24         // modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");
    25         // 上边的路径配置可以不在程序中指定jsp路径的前缀和jsp路径的后缀
    26         modelAndView.setViewName("items/itemsList");
    27 
    28         return modelAndView;
    29 
    30     }
    31 }
    View Code

    七、编写JSP页面(省略...)

    八、加载spring容器

    在web.xml文件中进行如下配置

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     3     xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     4     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     5     id="WebApp_ID" version="2.5">
     6     <display-name>springmvc_mybatis1208</display-name>
     7 
     8     <!-- 加载spring容器 -->
     9     <context-param>
    10         <param-name>contextConfigLocation</param-name>
    11         <param-value>/WEB-INF/classes/spring/applicationContext-*.xml</param-value>
    12     </context-param>
    13     <listener>
    14         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    15     </listener>
    16 
    17 
    18     <!-- springmvc前端控制器 -->
    19     <servlet>
    20         <servlet-name>springmvc</servlet-name>
    21         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    22         <!-- contextConfigLocation配置springmvc加载的配置文件(配置处理器映射器、适配器等等) 如果不配置contextConfigLocation,默认加载的是/WEB-INF/servlet名称-serlvet.xml(springmvc-servlet.xml) -->
    23         <init-param>
    24             <param-name>contextConfigLocation</param-name>
    25             <param-value>classpath:spring/springmvc.xml</param-value>
    26         </init-param>
    27     </servlet>
    28 
    29     <servlet-mapping>
    30         <servlet-name>springmvc</servlet-name>
    31         <!-- 第一种:*.action,访问以.action结尾 由DispatcherServlet进行解析 第二种:/,所以访问的地址都由DispatcherServlet进行解析,对于静态文件的解析需要配置不让DispatcherServlet进行解析 
    32             使用此种方式可以实现 RESTful风格的url 第三种:/*,这样配置不对,使用这种配置,最终要转发到一个jsp页面时, 仍然会由DispatcherServlet解析jsp地址,不能根据jsp页面找到handler,会报错。 -->
    33         <url-pattern>*.action</url-pattern>
    34     </servlet-mapping>
    35 
    36     <!-- post乱码过虑器 -->
    37     <filter>
    38         <filter-name>CharacterEncodingFilter</filter-name>
    39         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    40         <init-param>
    41             <param-name>encoding</param-name>
    42             <param-value>utf-8</param-value>
    43         </init-param>
    44     </filter>
    45     <filter-mapping>
    46         <filter-name>CharacterEncodingFilter</filter-name>
    47         <url-pattern>/*</url-pattern>
    48     </filter-mapping>
    49 
    50     <welcome-file-list>
    51         <welcome-file>index.html</welcome-file>
    52         <welcome-file>index.htm</welcome-file>
    53         <welcome-file>index.jsp</welcome-file>
    54         <welcome-file>default.html</welcome-file>
    55         <welcome-file>default.htm</welcome-file>
    56         <welcome-file>default.jsp</welcome-file>
    57     </welcome-file-list>
    58 </web-app>
    View Code
  • 相关阅读:
    hibernate_0100_HelloWorld
    MYSQL子查询的五种形式
    JSF是什么?它与Struts是什么关系?
    nop指令的作用
    htmlparser实现从网页上抓取数据(收集)
    The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the
    FCKeditor 在JSP上的完全安装
    Java遍历文件夹的2种方法
    充电电池和充电时间说明
    吃知了有什么好处
  • 原文地址:https://www.cnblogs.com/ustc-anmin/p/10463025.html
Copyright © 2011-2022 走看看