mybatis中<mappers> ,mapperLocations,和MapperScannerConfigurer 用法

1. mappers标签

在mybatis单独使用时,mybatis需要在mybatis-config.xml中配置mappers。mappers 标签下有许多 mapper 标签,每一个 mapper 标签中配置的都是一个独立的映射配置文件的路径,配置方式有以下几种:
1.1 第一种方式:mapper标签,通过resource属性引入classpath路径的相对资源

<!-- Using classpath relative resources -->
<mappers><mapper resource="org/mybatis/builder/AuthorMapper.xml"/><mapper resource="org/mybatis/builder/BlogMapper.xml"/><mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>

1.2mapper标签,通过url引入网络资源或者本地磁盘资源

<!-- Using url fully qualified paths -->
<mappers><mapper url="file:///var/mappers/AuthorMapper.xml"/><mapper url="file:///var/mappers/BlogMapper.xml"/><mapper url="file:///var/mappers/PostMapper.xml"/>
</mappers>

1.3 第三种方式:mapper标签,通过class属性指定mapper接口名称,此时对应的映射文件必须与接口位于同一路径下,并且名称相同

如mapper接口采用注解的方式,则无需映射文件
windows系统下,映射文件不区分大小写,linux系统没有验证

<!-- Using mapper interface classes -->
<mappers><mapper class="org.mybatis.builder.AuthorMapper"/><mapper class="org.mybatis.builder.BlogMapper"/><mapper class="org.mybatis.builder.PostMapper"/>
</mappers>

1.4第四种方式:package标签,通过name属性指定mapper接口所在的包名 ,此时对应的映射文件必须与接口位于同一路径下,并且名称相同

如mapper接口采用注解的方式,则无需映射文件
windows系统下,映射文件不区分大小写,linux系统没有验证

<!-- Register all interfaces in a package as mappers -->
<mappers><package name="org.mybatis.builder"/>
</mappers>

2. mapperLocation属性(位于SqlSessionFactoryBean中):mapperLocation属性,主要用于指定mapper.xml文件所处的位置。

2.1如果Mapper.xml与Mapper.class在同一个包下且同名,spring 中MapperScannerConfigurer 扫描Mapper.class的同时会自动扫描同名的Mapper.xml并装配到Mapper.class。
2.2如果Mapper.xml与Mapper.class不在同一个包下或者不同名,就必须使用配置mapperLocations指定mapper.xml的位置。(如idea中 maven 默认不打包java文件夹下的xml文件,未在pom.xml中配置resource的情况下)
此时spring是通过识别mapper.xml中的
namespace的值来确定对应的Mapper.class的。

<!--创建sqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!--关联到连接池--><property name="dataSource" ref="dataSource"/><!--加载mybatis 全局配置文件--><property name="configLocation" value="classpath:mybatis-config.xml"/><!--加载mapper的xml映射文件 ,配置该属性后全局配置文件可以不需要再配置<mappers>--><property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>

3. MapperScannerConfigurer:

自动扫描 将Mapper接口生成代理注入到Spring
3.1要创建 MapperScannerConfigurer,可以在 Spring 的配置中添加如下代码:

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="org.mybatis.spring.sample.mapper" />
</bean>

basePackage 属性是让你为映射器接口文件设置基本的包路径。 你可以使用分号或逗号 作为分隔符设置多于一个的包路径。每个映射器将会在指定的包路径中递归地被搜索到。

mybatis 整合spring之mapperLocations配置的问题

今天尝试spring整合mybatis时遇到这么一个问题,就是在配置sqlSessionFactory时是否要配置mapperLocations的问题。

<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="datasource"></property><property name="typeAliasesPackage" value="com.fan.entity"/><!-- 当mybatis的xml文件和mapper接口不在相同包下时,需要用mapperLocations属性指定xml文件的路径。  *是个通配符,代表所有的文件,**代表所有目录下 -->   <property name="mapperLocations" value="classpath:com/fan/mapper/*.xml" /> <!--也可以引入mybatis配置文件 <property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml"></property> -->
</bean>
<!-- 通过扫描的模式,扫描目录在com.lanyuan.mapper目录下的mapper-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.fan.mapper"></property>
</bean>

结论是:如果Mapper.xml与Mapper.class在同一个包下且同名,spring扫描Mapper.class的同时会自动扫描同名的Mapper.xml并装配到Mapper.class。

如果Mapper.xml与Mapper.class不在同一个包下或者不同名,就必须使用配置mapperLocations指定mapper.xml的位置。

此时spring是通过识别mapper.xml中的 namespace的值来确定对应的Mapper.class的。

mybatis中<mappers> ,mapperLocations,和MapperScannerConfigurer 用法相关推荐

  1. Mybatis中的 ${} 和 #{}区别与用法

    Mybatis 的Mapper.xml语句中parameterType向SQL语句传参有两种方式:#{}和${} 我们经常使用的是#{},一般解说是因为这种方式可以防止SQL注入,简单的说#{}这种方 ...

  2. Mybatis中foreach的三种用法

    foreach一共有List,array,Map三种类型的使用场景. foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. item表示集合中每一个元素进行迭代时的别名, i ...

  3. mybatis中prefix,suffix,prefixOverrides,suffixOverrides用法解释

    <trim prefix="" suffix="" suffixOverrides="" prefixOverrides=" ...

  4. Mybatis中<trim>标签用法

    trim标签的属性: prefix: 拼接sql需要加上的前缀. prefixOverrides:前缀需要覆盖消除的内容. suffix:拼接sql需要加上的后缀 suffixOverrides:后缀 ...

  5. mybatis 中#与$的区别

    2019独角兽企业重金招聘Python工程师标准>>> MyBatis中#和$的区别 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #u ...

  6. Mybatis中的foreach用法

    Mybatis中的foreach用法 目录 Mybatis中的foreach用法 元素属性 List对象集合查询 根据数组中的Id删除 update修改 元素属性 item: 集合中元素迭代时的别名, ...

  7. MyBatis中foreach元素用法解析

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/70946761冷血之心的博客)          动态SQL是MyB ...

  8. 关于mybatis中selectKey的用法

    在使用MyBatis插入数据进入数据库的时候会用到sequence序列来生成自增的id 这时可以使用selectKey就可以得到sequence的值,同时也会将值返回.不过对于不同的数据库有不同的操作 ...

  9. Mybatis中limit用法与分页查询

    数据库使用的是mysql 要想在Mybatis中使用分页查询,首先要清楚mysql中limit的用法. limit a,b a是从第a+1条数据开始,b是指读取几条数据 例如:select * fro ...

最新文章

  1. 【NOIP2007】第三题·守望者的逃离
  2. Java异常处理和设计
  3. 中邮消费金融签约神策数据 致力最优产品与服务模式
  4. 查看约束信息_【华智产品汇】育种信息安全的守护者——华智育种管家
  5. web业务系统权限控制
  6. 开源项目GoodView点赞效果
  7. java jsp ajax_ajax的json传值方式在jsp页面中的应用
  8. SQLServer日期格式化
  9. javascript 西瓜一期 02 编程语言与标记语言的区别
  10. python读取yaml文件
  11. python批量转换数据类型_玩转python 各种数据类型的转换
  12. VS2012写的程序在VS2010打开时显示当前版本不兼容
  13. ElementUI:tree给节点添加icon图标
  14. 【Retinex】【Frankle-McCann Retinex】matlab代码注释
  15. paip.输入法编程----二级汉字2350个常用汉字2350个
  16. [RubyOnRails]一些网址
  17. 动态壁纸安卓_高清无水印!这4款壁纸软件,让你的手机好看又独特
  18. Android系统编译aosp
  19. 解决方案:集团型施工企业安全生产数字化管理系统
  20. html datatable修改行,DataTable根据条件修改行颜色和特定格颜色

热门文章

  1. 计算机模拟蛋白,酶的计算机模拟和蛋白质组分析
  2. mysql 吧库下的表名都加_mysql数据库表名大小写问题
  3. tcp 发送 最大数据量_网络基础知识夯实总结(三):TCP协议
  4. ruby hash方法_Ruby中带有示例的Hash.values方法
  5. InnoDB的内存结构和特性
  6. 2018年终总结—努力做一个有趣的人
  7. linux下boost库链接动态库失败
  8. 细分shared_ptr智能指针在各个版本的使用情况
  9. c++实现二叉树操作
  10. python二维表转一维表_二维表格转换成一维表格