spring 和 mybatis 整合过程 (包含分页)

1.spring-mybatis.xml  : 配置 SqlSessionFactory 和  MapperScannerConfigurer 

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactory">
  
  <property name="dataSource" ref="dataSoucre" />
  
  <property name="configLocation" value="classpath:mybatis-config.xml" />
  
  <property name="mapperLocations" value="classpath:com/shulipeng/mol/mapper/**/*Mapper.xml" />
bean>


<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  <property name="basePackage" value="com.shulipeng.mol.dao" />
  <property name="sqlSessionFactory" ref="sqlSessionFactory" />
bean>

扩展: MapperScannerConfigurer 介绍(摘选自 : https://www.2cto.com/kf/201409/331321.html)

         MapperScannerConfigurer 是 spring 和 mybatis 整合的 mybatis-spring.jar 包中提供的一个类

         首先,要了解该类的作用,就得先了解 MapperFactoryBean , MapperFactoryBean 的出现是为了代替手工使用 SqlSessionDaoSupport

         或 SqlSessionTemplate 编写数据访问对象(DAO)的代码,使用动态代理实现。

     官方的一个配置如下:

               

                   

            

         

          org.mybatis.spring.sample.mapper.UserMapper 是一个接口,我们创建一个 MapperFactoryBean 实例,

           然后注入这个接口和 sqlSessionFactory(mybatis 中提供的sqlSessionFactory 接口,MapperFactoryBean 会使用 SqlSessionFactory 创建

           SqlSession)这两个属性, 之后想使用这个 UserMapper 接口的话,直接通过 spring 注入这个 bean,然后就可以直接使用了,spring 内部

           会创建一个这个接口的动态代理。

      当发现要使用多个 MapperFactoryBean 的时候,一个一个定义肯定非常麻烦,于是 mybatis-spring 提供了 MapperScannerConfigurer 这个

           类,它将会查找类路径的映射器并且自动将它们创建成 MapperFactoryBean。


 2.mybatis-config.xml  : 配置 mybatis 参数,加入分页插件

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>
    
    <settings>
        
        <setting name="cacheEnabled" value="true" />
        
        <setting name="lazyLoadingEnabled" value="true" />
        
        <setting name="aggressiveLazyLoading" value="false" />
        
        <setting name="multipleResultSetsEnabled" value="true" />
        
        <setting name="useColumnLabel" value="true" />
        
        
        
        <setting name="autoMappingBehavior" value="FULL" />
        
        <setting name="defaultExecutorType" value="SIMPLE" />
        
        <setting name="defaultStatementTimeout" value="25000" />

        <setting name="logImpl" value="LOG4J" />
    settings>
  
   
   <typeAliases>
   typeAliases>
   
   
   <plugins>
       
       <plugin interceptor="com.github.pagehelper.PageHelper">
           
           
           
           
           <property name="offsetAsPageNum" value="true" />
           
           
           <property name="rowBoundsWithCount" value="true" />
           
           
           <property name="pageSizeZero" value="true" />
           
           
           
           <property name="reasonable" value="false" />
           
           
           
           
           <property name="params" value="pageNum=start;pageSize=limit;" />
       plugin>
    plugins>
  
configuration>

扩展:1. mybatis-config.xml 如何使用本地的 mybatis-3-config.dtd ?

           答:添加 mybatis-3-config.dtd 置 WebRoot 目录下,

         并且更改 mybatis-config.xml 的  "http://mybatis.org/dtd/mybatis-3-config.dtd" 为 “mybatis-3-config.dtd”;

          2. mybatis 执行 update/delete 语句返回行数是负值?

          答 :是由于在配置文件中为了提高批量操作的性能,设置 defaultExecutorType 为 BATCH,

         缺陷就是无法获取update、delete返回的行数,修改为 SIMPLE 即可

          3. 分页插件的使用方法?

          答:最为常见的使用方式是 PageHelper.startPage 静态方法调用,

        在你需要进行分页的 MyBatis 查询方法前调用 PageHelper.startPage 静态方法即可,

                紧跟在这个方法后的第一个MyBatis 查询方法会被进行分页。代码如下, 更多方式点击此链接 

//获取第1页,10条内容,默认查询总数count
PageHelper.startPage(1, 10);
//紧跟着的第一个select方法会被分页
List list = countryMapper.selectAll();
//用PageInfo对结果进行包装
PageInfo page = new PageInfo(list);
//测试PageInfo全部属性
//PageInfo包含了非常全面的分页属性
assertEquals(1, page.getPageNum());
assertEquals(10, page.getPageSize());
assertEquals(1, page.getStartRow());
assertEquals(10, page.getEndRow());
assertEquals(183, page.getTotal());
assertEquals(19, page.getPages());
assertEquals(1, page.getFirstPage());
assertEquals(8, page.getLastPage());
assertEquals(true, page.isFirstPage());
assertEquals(false, page.isLastPage());
assertEquals(false, page.isHasPreviousPage());
assertEquals(true, page.isHasNextPage());
View Code

 

  

                   

转载于:https://www.cnblogs.com/shulipeng/p/7507520.html

你可能感兴趣的:(java,数据库)