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

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactory">
<!-- 指定数据源 -->
<property name="dataSource" ref="dataSoucre" />
<!-- 指定 mybatis-config.xml 配置文件 -->
<property name="configLocation" value="classpath:mybatis-config.xml" />
<!-- 用来指定 MyBatis 的 XML 映射器文件的位置 -->
<property name="mapperLocations" value="classpath:com/shulipeng/mol/mapper/**/*Mapper.xml" />
</bean> <!-- sqlSessionFactory会扫描所有接口,然后创建各自接口的动态代理类 -->
<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)的代码,使用动态代理实现。

     官方的一个配置如下:

<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">

<property name="mapperInterface" value="org.mybatis.spring.sample.mapper.UserMapper" />

   <property name="sqlSessionFactory" ref="sqlSessionFactory" />

         </bean>

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>
<!-- 配置mybatis的缓存,延迟加载等等一系列属性 -->
<settings>
<!-- 全局映射器启用缓存 -->
<setting name="cacheEnabled" value="true" />
<!-- 查询时,关闭关联对象即时加载以提高性能 -->
<setting name="lazyLoadingEnabled" value="true" />
<!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指 定),不会加载关联表的所有字段,以提高性能 -->
<setting name="aggressiveLazyLoading" value="false" />
<!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 -->
<setting name="multipleResultSetsEnabled" value="true" />
<!-- 允许使用列标签代替列名 -->
<setting name="useColumnLabel" value="true" />
<!-- 允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值),数据表的PK生成策略将被覆盖 -->
<!-- <setting name="useGeneratedKeys" value="true" /> -->
<!-- 给予被嵌套的resultMap以字段-属性的映射支持 -->
<setting name="autoMappingBehavior" value="FULL" />
<!-- 配置和设定执行器,SIMPLE 执行器执行其它语句。REUSE 执行器可能重复使用prepared statements 语句,BATCH执行器可以重复执行语句和批量更新(有缺陷)。 -->
<setting name="defaultExecutorType" value="SIMPLE" />
<!-- 数据库超过25000秒仍未响应则超时 -->
<setting name="defaultStatementTimeout" value="25000" /> <setting name="logImpl" value="LOG4J" />
</settings> <!-- 全局别名设置,在映射文件中只需写别名,而不必写出整个类路径 -->
<typeAliases>
</typeAliases> <!-- 分页插件 -->
<plugins>
<!-- com.github.pagehelper为PageHelper类所在包名,详细配置使用方法 https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/en/HowToUse.md -->
<plugin interceptor="com.github.pagehelper.PageHelper">
<!-- 4.0.0以后版本可以不设置该参数 -->
<!-- 该参数默认为false -->
<!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
<!-- 和startPage中的pageNum效果一样 -->
<property name="offsetAsPageNum" value="true" />
<!-- 该参数默认为false -->
<!-- 设置为true时,使用RowBounds分页会进行count查询 -->
<property name="rowBoundsWithCount" value="true" />
<!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
<!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型) -->
<property name="pageSizeZero" value="true" />
<!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
<!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
<!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
<property name="reasonable" value="false" />
<!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->
<!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->
<!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值 -->
<!-- 不理解该含义的前提下,不要随便复制该配置 -->
<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<Country> 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());

  

                   

spring 和 mybatis 整合过程 (包含分页)的更多相关文章

  1. Spring和Mybatis整合过程中遇到的一个找不到sqlSessionFactory或sqlSessionTemplate的异常

    先看启动web项目时IDEA控制台抛出的异常(红色部分): D:\tomcat-kafka-\bin\catalina.bat run [-- ::,] Artifact Gradle : com.x ...

  2. Spring boot Mybatis 整合(完整版)

    个人开源项目 springboot+mybatis+thymeleaf+docker构建的个人站点开源项目(集成了个人主页.个人作品.个人博客) 朋友自制的springboot接口文档组件swagge ...

  3. Spring boot Mybatis 整合

    PS: 参考博客 PS: spring boot配置mybatis和事务管理 PS: Spring boot Mybatis 整合(完整版)   这篇博客里用到了怎样 生成 mybatis 插件来写程 ...

  4. Java基础-SSM之Spring和Mybatis整合案例

    Java基础-SSM之Spring和Mybatis整合案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   在之前我分享过mybatis和Spring的配置案例,想必大家对它们的 ...

  5. Spring boot Mybatis 整合(注解版)

    之前写过一篇关于springboot 与 mybatis整合的博文,使用了一段时间spring-data-jpa,发现那种方式真的是太爽了,mybatis的xml的映射配置总觉得有点麻烦.接口定义和映 ...

  6. spring, spring mvc, mybatis整合文件配置详解

    转自:http://www.cnblogs.com/wxisme/p/4924561.html 使用SSM框架做了几个小项目了,感觉还不错是时候总结一下了.先总结一下SSM整合的文件配置.其实具体的用 ...

  7. Spring+springmvc+Mybatis整合案例 annotation版(myeclipse)详细版

    Spring+springmvc+Mybatis整合案例 Version:annotation版 文档结构图: 从底层开始做起: 01.配置web.xml文件 <?xml version=&qu ...

  8. Spring+springmvc+Mybatis整合案例 xml配置版(myeclipse)详细版

    Spring+springmvc+Mybatis整合案例 Version:xml版(myeclipse) 文档结构图: 从底层开始做起: 01.配置web.xml文件 <?xml version ...

  9. Spring与Mybatis整合的MapperScannerConfigurer处理过程源码分析

    前言 本文将分析mybatis与spring整合的MapperScannerConfigurer的底层原理,之前已经分析过java中实现动态,可以使用jdk自带api和cglib第三方库生成动态代理. ...

随机推荐

  1. Java-API:java.util.UUID

    ylbtech-Java-API:java.util.UUID 1.返回顶部   2.返回顶部   3.返回顶部   4. 百科返回顶部   5.返回顶部 0. https://docs.oracle ...

  2. 开发环境无错,部署至测试环境报错“NoSuchMethodError”OR"NoSuchClassError"

    背景: 实现一个简单的功能,需要用到jedis的jar包连接Redis.在之前便已经有使用jedis,它的版本比较旧,是2.1的.而新实现的功能,在编码的时候使用的是2.8的.在开发环境完成单元测试后 ...

  3. ios下编译opencv

    如果想要在ios下编译opencv 需要安装Cmake 这里通过homebrew 来安装cmake ios下打开终端然后先安装 homebrew :(mac 下自带ruby) ruby -e &quo ...

  4. appium如何连接模拟器代码实例

    from appium import webdriver def connect(self): self.desired_caps = {} self.desired_caps['platformNa ...

  5. PL/SQL批处理语句(二)FORALL

    PL/SQL批处理语句(二)FORALL 我们知道PL/SQL程序中运行SQL语句是存在开销的,因为SQL语句是要提交给SQL引擎处理,这种在PL/SQL引擎和SQL引擎之间的控制转移叫做上下文却换, ...

  6. opencv3.2加载图片

    #include <opencv2/opencv.hpp>#include <iostream> using namespace cv;using namespace std; ...

  7. Windows中lib和DLL区别和使用

    本文转载自:http://www.cppblog.com/amazon/archive/2009/09/04/95318.html 共有两种库:一种是LIB包含了函数所在的DLL文件和文件中函数位置的 ...

  8. CMake 默认编译、链接选项

    查看cmake默认编译和链接的参数设置 CMakeLists.txt 文件内容: cmake_minimum_required(VERSION 3.2) message(STATUS "CM ...

  9. latex公式怎么变成图片格式

    由于这几天正在复习高中的数学,想写一些博客记录一下,发现数学公式的输入是一个问题,后来知道了latex,去youtube学习了一点入门教程发现挺简单的,不过有一个问题,latex生成的是pdf格式啊, ...

  10. p2197 nim游戏

    传送门 分析 我们知道最后取完的情况就是所有的a[i]异或和为0 所以只要开始的异或和不为0则先手一定可以将它转化为0 否则不行 所以如果异或和非0则先手胜 代码 #include<bits/s ...