springmvc整合mybatis

整合springmvc和mybatis就相当于ssm整合。

整合思想:

          对于springmvc和mybatis整合项目的系统架构可以看作为:

 表现层(springmvc)------>业务层(service接口)-------->持久层(mybatis)------->数据库

        spring用来管理各层中所建立的类文件,以及类中的相互调用

   由于调用关系是从从左往右调用,所以整合的话从持久层开始整合。

一、整合dao层(mybatis和spring的整合)

           首先清楚配置mybatis需要哪些文件。

          两类: 1.配置mybatis环境的配置文件

                      2.dao层中生成的文件(类和xml文件)

            配置环境的配置文件:

                           1.sqlMapConfig.xml

                              配置nybatis运行的环境,总体属性。一般在这里配置dao层生成的文件,但是由于mybatis和spring的整合,在spring的配置扫描管理dao层生成的文件的时候会进行自动配置这里不用配置了。

                示例代码:

                      


                2.applicationContext-dao.xml

                 此为spring管理dao层的配置文件。

                 1.连接数据库。(配置数据源,建立sqlSessionFactory在建立sqlSessionFactory中将mybatis的全局配置文件sqlMapConfig.xml)引入进去。

                     2.进行dao的扫描。通过spring来管理mapper

示例代码:

<!-- 加载配置文件 -->
     <context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 配置数据源 ,使用dacp -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="maxActive" value="10" />
<property name="maxIdle" value="5" />
</bean>


<!-- sqlSessionFactory的配置 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 加载mybatis的配置文件 -->
<property name="configLocation" value="/WEB-INF/classes/mybatis/sqlMapConfig.xml"></property>
<!-- 数据源 -->
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- mapper批量扫描,从mapper包中扫描出mapper接口,自动创建代理对象并且在spring容器中注册
    遵循规范:将mapper.java和mapper.xml映射文件名称保持一致,且在一个目录 中
    自动扫描出来的mapper的bean的id为mapper类名(首字母小写)
    -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <!-- 指定扫描的包名
    如果扫描多个包,每个包中间使用半角逗号分隔
    -->
    <property name="basePackage" value="cn.mapper"/>
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>

</beans>

dao层文件生成:

              在一个包中生成mapper.java和mapper.xml文件

                

                可以通过逆向工程自动生成。

二、整合service

       1.定义service接口

            public interface ItemsService {
    //商品查询列表
public List<ItemsCustom>findItemsList(ItemsQueryVo itemsQueryVo)throws Exception;

}

  2.定义接口实现类

public class ItemsServiceImpl implements ItemsService {
      @Autowired
private ItemsMapperCustom itemsMapperCustom;
@Override
public List<ItemsCustom> findItemsList(ItemsQueryVo itemsQueryVo)
throws Exception {
// TODO Auto-generated method stub
return itemsMapperCustom.findItemsList(itemsQueryVo);
}
   }

  这里面要调用dao,即创建dao,即dao要自动注入。

3.在applicationContext-service.xml中管理service

                 <!-- 商品管理的service -->

 <bean id="itemsService" class="cn.service.impl.ItemsServiceImpl"></bean>

4.事务管理 在applicationContext-transation.xml中进行事务管理

<!-- 事务管理器 对mybatis操作数据库事务控制,spring使用jdbc的事务控制器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 数据源 dataSource在applicationContext-dao中配置了 -->
<property name="dataSource" ref="dataSource"></property>


</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="delete*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="find*" propagation="REQUIRED" read-only="true"/>
            <tx:method name="get*" propagation="REQUIRED" read-only="true"/>
            <tx:method name="select*" propagation="REQUIRED" read-only="true" />
</tx:attributes>
  </tx:advice>
  <!-- 切面 -->
              <aop:config>
                <aop:advisor advice-ref="txAdvice"
                 pointcut="execution(* cn.service.impl.*.*(..))"
                />
              
              </aop:config>

</beans>

三、整合springmvc

          由于springmvc就是在spring的一部分,所以直接配置好springmvc就行了

 配置springmvc就是配置前端控制器,处理映射器,适配器,视图解析器。

   1.配置前端控制器(在web.xml中配置)

           <!-- springMVC的前端控制器 -->
  <servlet>
     <servlet-name>springmvc</servlet-name>
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <!-- contextConfigLocation配置springmvc加载的配置文件(配置处理器映射器,适配器等)
              如果你不配置contextConfigLocation,则默认加载的是/WEB-INF/servlet名称-servlet.xml(springmvc-servlet.xml)
              
       -->
         <init-param>
           <param-name>contextConfigLocation</param-name>
           <param-value>classpath:spring/springmvc.xml</param-value>
         </init-param>
  </servlet>
    <servlet-mapping>
        <!-- 
           第一种:*.action.访问以.action结尾的由DispatcherServlet进行解析
         第二种:/,所有访问的地址都由DispatcherServlet进行解析,对于静态文件的解析需要配置不让DispatcherServlet进行解析
           使用这一种方法可以使用RESTful风格的url 
        第三种:/*,这样配置不对,使用这种配置,最终要 转发到一个jsp页面时,仍然由DispatcherServlet进行解析 ,根据jsp页面找不到handel,会报错
                 -->
            <servlet-name>springmvc</servlet-name>
       <url-pattern>*.action</url-pattern>

    </servlet-mapping>

2.配置处理映射器,适配器,视图解析器(springmvc.xml中配置)

 <!-- 注解handler的配置 -->
    <!-- 可单个配置也可扫描配置 
   <bean class="zhujieItemsController"/> -->
   <!-- 组建扫描  ,扫描组建可以扫描controller、service-->

    <context:component-scan base-package="cn.controller"></context:component-scan>


 
    <!-- 配置注解映射器和适配器 -->
    <!--    注解映射器
     <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
                注解适配器 
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>
              --> 
          <!-- 使用mvc:annotation-driver代替上面的配置,
                         同时mvc:annotataion-driver默认加载了很多参数绑定方法
                     比如:json转换加载器会默认加载。 推荐使用。
           -->
       <mvc:annotation-driven></mvc:annotation-driven>
 <!-- 配置视图解析器
  解析jsp默认使用jstl标签,calsspath下要有jstl的包
  -->
 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!-- 配置jsp路径的前缀 -->
    <property name="prefix" value="/WEB-INF/jsp/"></property>
    <!-- 配置jsp路径的后缀 -->
    <property name="suffix" value=".jsp"></property>
 </bean>

3.编写handler(controller)

          会用到service,要自动注入

@Autowired
  private ItemsService itemsService;
@RequestMapping("/queryItems")
public ModelAndView queryItems()throws Exception{
 //调用service查找商品库,查询商品列表io
ItemsQueryVo itemsQueryVo=new ItemsQueryVo();
List<ItemsCustom>itemsList=itemsService.findItemsList(null);
//返回ModelAndView
ModelAndView modelAndView=new ModelAndView();
//相当于request的setAtrribute,在jsp页面中通过itemsList中的数据
modelAndView.addObject("itemsList", itemsList);
//制定试图
//下边的路径,如果在视图解析器中配置jsp的前缀和jsp的后缀
//则路径原来为:“WEB-INF/jsp/items/itemsList.jsp”
modelAndView.setViewName("items/itemsList");
return modelAndView;

}

四、加载spring容器

将管理上面的applicationContext加入到spring容器中

<!-- 加载spring容器 -->
     <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/classes/spring/applicationContext-*.xml</param-value>
     </context-param>
      <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值