在上一篇博文的示例中,我们在beans.xml中配置了studentMapper和teacherMapper,供我们需要时使用。但如果需要用到的映射器较多的话,采用这种配置方式就显得很低效。为了解决这个问题,我们可以使用MapperScannerConfigurer,让它扫描特定的包,自动帮我们成批地创建映射器。这样一来,就能大大减少配置的工作量。如下所示(点击此处进入本示例源程序下载页面):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?xml version="1.0" encoding="utf8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"
default-autowire="byName" default-lazy-init="false">
<!--本示例采用DBCP连接池,应预先把DBCP的jar包复制到工程的lib目录下。
连接池配置如下-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost/courseman"/>
<property name="username" value="courseman"/>
<property name="password" value="abc123"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--dataSource属性指定要用到的连接池-->
<property name="dataSource" ref="dataSource"/>
<!--configLocation属性指定mybatis的核心配置文件-->
<property name="configLocation" value="resources/configuration.xml"/>
</bean>
<!--MapperScannerConfigurer配置-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--basePackage指定要扫描的包,在此包之下的映射器都会被
搜索到。可指定多个包,包与包之间用逗号或分号分隔-->
<property name="basePackage" value="com.abc.mapper"/>
</bean>
</beans>

这里需要注意三点:

第一,无需指定引用SqlSessionFactory,因为MapperScannerConfigurer在创建映射器时会通过自动装配的方式来引用。

第二,创建的映射器的命名问题。从beans.xml文件中我们可以看出,我们没有办法给MapperScannerConfigurer创建的这些映射器指定id或name属性,它们对我们似乎是不可见的。这个问题的解决之道在于采用了Spring针对自动侦测到的组件的默认命名策略,亦即把类/接口名字的首字母小写,其他不变,作为映射器的名字。例如,映射器接口TeacherMapper被扫描后创建的映射器bean名为teacherMapper。因此,我们可以像以前一样使用这样的代码来得到TeacherMapper实例:

1
TeacherMapper mapper  =  (TeacherMapper)ctx.getBean("teacherMapper");

第三,可以使用@Component注解给映射器指定名称(本示例的源程序即是采用这种方法)。这里以TeacherMapper为例,若想指定生成的映射器bean名称为“myTeacherMapper”,步骤如下:

1、在TeacherMapper接口中增加如下声明:“import org.springframework.stereotype.Component;”;

2、在接口声明前添加@Component("myTeacherMapper")注解,即指定生成的映射器名称为myTeacherMapper。

源码(TeacherMapper.java)如下:

1
2
3
4
5
6
7
package com.abc.mapper;
import com.abc.domain.Teacher;
import org.springframework.stereotype.Component;
@Component("myTeacherMapper")
public interface TeacherMapper {
public Teacher getById(int id);
}

相应地,在程序中访问此映射器的代码应改为:

1
TeacherMapper mapper = (TeacherMapper)ctx.getBean("myTeacherMapper");

运行结果如下:

还有一点顺便提及,若映射器接口(如TeacherMapper接口)与相应的映射配置文件(如TeacherMapper.xml)同名且在同一目录下,就无需在核心配置文件configuration.xml中使用mappers元素来指定映射配置文件了。读者可自行实验。

参考资料:

1、http://www.mybatis.org/spring/zh/mappers.html#MapperScannerConfigurer(中文)

2、http://www.mybatis.org/spring/mappers.html#MapperScannerConfigurer(英文)

本文转自 NashMaster2011 51CTO博客,原文链接:http://blog.51cto.com/legend2011/980150,如需转载请自行联系原作者

MyBatis MapperScannerConfigurer配置——MyBatis学习笔记之八相关推荐

  1. linux系统管理学习笔记之八---进程与作业的管理

    linux系统管理学习笔记之八---进程与作业的管理 2010-01-05 13:00:42 标签:linux 进程 [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 ...

  2. linux系统管理学习笔记之八---linux文件与目录的管理及权限

    linux系统管理学习笔记之八---linux文件与目录的管理及权限 2010-01-05 09:00:49 标签:权限 管理 文件目录 linx [推送到技术圈] 版权声明:原创作品,允许转载,转载 ...

  3. 携程 Apollo 配置中心 | 学习笔记(七) | 如何将配置文件敏感信息加密?

    携程 Apollo 配置中心 | 学习笔记(一) Apollo配置中心简单介绍 携程 Apollo 配置中心 | 学习笔记(二) Windows 系统搭建基于携程Apollo配置中心单机模式 携程 A ...

  4. OPENGL学习笔记之八

    OPENGL学习笔记之八 2017/11/15 阅读材料来自learnopengl.com以及learnopengl-cn.github.io 我们通常会自己设定一个坐标的范围,之后再在顶点着色器中将 ...

  5. MSP432安装与环境配置(ccs) 学习笔记

    MSP432安装与环境配置(ccs) 学习笔记   关闭电脑病毒防护 继续 选择ccs的安装文件路径 选择要安装的类型 选择使用工作区目录存储其首选项和开发文件路径 使用usb接入432 关闭安装ms ...

  6. mybatis trim标签_MyBatis学习笔记

    MyBatis开发文档: mybatis - MyBatis 3​mybatis.org mapper接口开发的四个规范: XxxMapper.xml配置文件的名称命名空间值必须是mapper接口的全 ...

  7. 多路径配置udev_学习笔记:Linux多路径配置 multipath实现设备用户组绑定详细设置...

    天萃荷净 Linux多路径软件配置,通过multipath实现设备用户组绑定详细设置 现在的Linux系统中,很多都会使用系统自带的multipath多路径软件,在以前的版本中,我们一般通过multi ...

  8. Oracle 加密配置,【学习笔记】Oracle sqlnet设置网络传输加密案例

    天萃荷净 Database Advanced Security,Oracle研究中心学习笔记:分享一篇关于Oracle数据库网络传输加密笔记,通过配置SQLNET.ora文件使网络传输加密即将客户端也 ...

  9. Unity3D学习笔记之八为场景添加细节(一)

         这一系列教程以及素材均参考自人人素材翻译组出品的翻译教程<Unity游戏引擎的基础入门视频教程>,下载链接附在第二篇学习笔记中.      我花了30分钟做了一个中等大小的迷宫场 ...

最新文章

  1. 数通手稿留档——BGP
  2. iphone8p百度云认证_探秘百度数据工厂Pingo的多存储后端数据联合查询技术
  3. 想快速入门NLP?我们测评了15门最火课程,帮你找到最适合的
  4. python 数据分析学什么-数据分析培训学习多久?都学什么?
  5. 那些年,程序员读错的英语
  6. 为什么要避免不可重复读_脏读、幻读和不可重复读?为啥?
  7. 到国外使用wifi悠着点防止天价帐单
  8. Leedcode4-sort listnode 归并排序
  9. git clone 报错:error: RPC failed; curl 18 transfer closed with outstanding read
  10. NYOJ-57 6174问题
  11. 天梯—输出GPLT(C语言)
  12. android 获取sim卡信息list_提醒:手机要设置SIM卡密码!如何设置?有何用处?攻略来了...
  13. Linux命令:修改文件权限命令chmod、chgrp、chown详解
  14. mysql随机姓名_mysql 随机生成姓名函数,及模拟大量测试数据
  15. Java开发自学教程!java从入门到精通txt下载
  16. unity中使用C#语言判断斗地主出牌牌型
  17. cad的计算机功能,CAD的基本功能有哪些
  18. hdu4939思维DP
  19. Geometric deep learning: going beyond Euclidean data译文
  20. java八大数据类型详解及其变量详解

热门文章

  1. python和java一样吗-python 和 java 的区别
  2. python课程是学什么的-机器学习最好的课程是什么?
  3. python处理数据的优势-选择python进行数据分析的理由和优势
  4. linux中使用apt-get安装软件包的时候报错:E: Could not get lock /var/lib/dpkg/lock-frontend
  5. GitHub:人群密度估计最全资料集锦
  6. 华为鸿蒙系统新机发布时间,华为鸿蒙OS发布会定档,或将有多款新机亮相
  7. boost库在window下的编译
  8. LVS (一) 原理
  9. python多线程之threading
  10. AngularJS API