经过上两篇博文的总结,对mybatis中的dao开发方法和流程基本掌握了,这一节主要来总结一下mybatis中的全局配置文件SqlMapConfig.xml在开发中的一些常用配置,首先看一下该全局配置文件中都有哪些可以配置的东西:

配置内容 作用
<properties> 用来加载属性文件
<settings> 用来设置全局参数
<typeAliases> 用来设置类型的别名
<typeHandlers> 用来设置类型处理器
<objectFactory> 用来设置对象工厂
<plugins> 用来设置插件
<environments> 用来设置mybatis的环境
<mappers> 用来配置映射文件

  从前面的博文中可以看出,<environments>是用来配置mybatis的环境的,在和spring整合前是由mybatis自己管理的,但是和Spring整合后,这些配置都将被废弃掉,<environments>部分在前面已经有提到过,这里就不再赘述了。然后objectFactory和plugins一般我们不用,所以在这里就不总结了,<typeHandlers>类型处理器是mybatis中用来完成jdbc类型和Java类型之间转换的,mybatis默认支持的类型处理器基本够我们使用了,一般不需要自定义。这篇博文主要来总结一下剩下的几个配置的用法。

1. properties加载属性文件

  我们之前连接数据库的一些配置都是在<environments>中写死的,在实际开发中肯定不是这样子的,我们需要将数据库连接参数单独配在db.properties文件中,然后在SqlMapConfig.xml中加载db.properties的属性值即可,这就用到了<properties>了。即:

<properties resource="db.properties">

然后environment中做一下对应的修改即可: 
 
  在<properties>内部还可以定义属性值:<property name="" value=""/>,在property中定义的属性也可以被<evironments>中来加载,这就涉及到了mybatis加载属性的顺序了:

  1. <properties>元素体内定义的首先被读取
  2. 然后读取<properties>元素中resource或者url加载的属性,它会覆盖已读取的同名属性
  3. 最后读取parameterType传递的属性(使用${}这种方式,不是#{}这种方式),它会覆盖已读的同名属性

 建议:从上面可以看出来,如果在<properties>中定义属性的话,有点乱,搞不好就会出错,所以开发中不要在<properties>元素体内添加任何属性值,只将属性值定义在properties文件中。另外在properties文件中定义的属性名要有一定的特殊性,如xxx.xxx,这样不容易和其他的一些属性值起冲突。

2. settings全局参数配置

mybatis框架在运行时可以调整一些运行参数,比如:开启二级缓存、开启延迟加载等,有个settings全局参数配置文档: 

  这些全局参数的配置会影响mybatis的运行行为,需要的时候再设置,不需要的时候不能乱设置,这里就不做详细介绍了,等后面用到的时候我再针对相应的做一下介绍。说实在的,这么多我也懒得去看……

3. typeAliases类型别名

  这是配置中的一个重点,我们知道,在mapper.xml中定义了很多的statement,statement需要parameterType来指定输入参数的类型、需要resultType来指定输出结果的类型。如果在指定类型时输入类型全路径,有时候会很长,不方便进行开发,那么我们就可以可以针对parameterType或resultType指定的类型定义一些别名,在mapper.xml中通过别名<typeAliases>来定义,方便开发。 
mybatis有默认支持的一些别名,一般基本类型都有别名,如下: 
 
  但是针对pojo的需要我们自定义别名了,比如我们将自己定义的User对象取个别名为user,如下:

<!-- 别名的定义 -->
<typeAliases>
<!-- 针对单个别名的定义。type:类型的路径; alias:别名 -->
<typeAlias type="mybatis.po.User" alias="user"/>
</typeAliases>

  然后输入参数或者输出结果为mybatis.po.User时,就可以用user来代替了,如下:

 
  但是问题来了,如果工程中有很多pojo,那岂不是完蛋……这得定义多少个啊,所以mybatis帮我们解决了这个问题,它提供了批量别名的定义,如下:

<!-- 批量别名定义(这个常用)
指定一个包名,mybatis会自动的扫描包中po类,自动定义别名,别名就是类名(首字母大写或小写都可以) -->
<package name="mybatis.po"/>

这就爽了,如果进行了上面这样设置,那么所有放在mybatis.po包下的pojo都可以不用定义了,直接使用类名就可以了,所以我们直接使用user即可。毫无疑问,开发中肯定使用这个批量的别名定义。

3. mappers映射配置

  在前面的几篇博文中可以看到,<mappers>标签是通过resource方法加载单个映射文件的,即:

<mappers>
<mapper resource="sqlmap/User.xml" />
<mapper resource="mapper/UserMapper.xml" />
</mappers>

当然咯,除了resource外,也可以用url来加载,只不过url指定的是绝对路径,硬盘中的路径。这里就不举例了,这里介绍另一种加载映射文件的方式:通过mapper接口来加载。通过mapper接口来加载的话要遵循一个规范:

规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录中 
这个规范的前提是:使用的是mapper代理的方法

所以上面的配置就可以改成

<mappers>
<mapper resource="sqlmap/User.xml" />
<mapper class="mybatis.mapper.UserMapper"/>
</mappers>

所以要把原来的UserMapper.xml从config/mapper中的拖到和UserMapper.java一个目录下且同名,如下: 
 
  但是还是有个弊端,就跟上面那个别名的配置一样,如果现在有好多个mapper咋整,所以mybatis也给我们提供了批量加载方法:我们只要指定mapper接口的包名,mybatis自动扫描包下面所有的mapper接口进行加载。当然,还是要遵循上面的那个规范。所以我们可以修改上面的配置:

<mappers>
<mapper resource="sqlmap/User.xml" />
<mapper class="mybatis.mapper"/>
</mappers>

这样mybatis.mapper包下的所有mapper.xml映射文件都可以加载了,这就更加简洁了。在开发中推荐使用这种批量加载映射文件的方法。 
  关于SqlMapConfig.xml文件中的配置就总结这么多吧~

【MyBatis学习05】SqlMapConfig.xml文件中的配置总结的更多相关文章

  1. 读取xml文件中的配置参数实例_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 paras.xml文件 <?xml version="1.0" encoding=" ...

  2. maven的setting.xml文件中只配置本地仓库路径的方法

    maven的setting.xml文件中只配置本地仓库路径的方法 即:settings标签下只有一个 localRepository标签,其他全部注释掉即可 <?xml version=&quo ...

  3. (转)MyBatis框架的学习(四)——Mapper.xml文件中的输入和输出映射以及动态sql

    http://blog.csdn.net/yerenyuan_pku/article/details/71893689 前面对MyBatis框架的学习中,我们对Mapper.xml映射文件多少有些了解 ...

  4. mybatis在Mapper的xml文件中的转义字符的处理

    XML转义字符 < < 小于号 > > 大于号 & & 和 &apos; ’ 单引号 " " 双引号 用转义字符进行替换 例如 SE ...

  5. Spring MVC静态资源处理(在applicationContex.xml文件中进行配置)

    优雅REST风格的资源URL不希望带 .html 或 .do 等后缀.由于早期的Spring MVC不能很好地处理静态资源,所以在web.xml中配置DispatcherServlet的请求映射,往往 ...

  6. Java - web.xml文件中可以配置哪些内容?

    web.xml用于配置Web应用的相关信息,如:监听器(listener).过滤器(filter).Servlet.相关参数.会话超时时间.安全验证方式.错误页面等,下面是一些开发中常见的配置: ①配 ...

  7. web.xml文件中各个配置的说明

    <?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://w ...

  8. SqlMapConfig.xml配置文件中的properties属性

    1.原始的SqlMapConfig.xml配置文件的内容为: <?xml version="1.0" encoding="UTF-8" ?> < ...

  9. web.xml文件中配置ShallowEtagHeaderFilter需注意的问题

    问题现象及解决方法 今天在Spring MVC应用中加入ShallowEtagHeaderFilter时,发现返回的响应中没有etag头,上网查了很多相关资料,也试了很多方法依然不起作用.在查看web ...

随机推荐

  1. HDU 3516 Tree Construction

    区间$dp$,四边形优化. #pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio&g ...

  2. Java中byte与(16进制)字符串的互相转换

    java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示,所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的高4位和低4位分别转换成相应的16 ...

  3. Codeforces Round #404 (Div. 2) E. Anton and Permutation(树状数组套主席树 求出指定数的排名)

    E. Anton and Permutation time limit per test 4 seconds memory limit per test 512 megabytes input sta ...

  4. RPD Volume 172 Issue 1-3 December 2016 评论04 end

    这一篇作为本期的结束是因为发现后面的一些基本上也是EPR有关的会议内容, Contribution of Harold M. Swartz to In VivoEPR and EPR Dosimetr ...

  5. Codechef ForbiddenSum

    Mike likes to invent new functions. The latest one he has invented is called ForbiddenSum. Let's con ...

  6. POJ 1981 Circle and Points (扫描线)

    [题目链接] http://poj.org/problem?id=1981 [题目大意] 给出平面上一些点,问一个半径为1的圆最多可以覆盖几个点 [题解] 我们对于每个点画半径为1的圆,那么在两圆交弧 ...

  7. 网络编程-tcp

    一.简单的demo (1)客户端 package com.songyan.tcp; import java.io.IOException; import java.io.InputStream; im ...

  8. Inno Setup入门(十二)——Pascal脚本(1)

    事件函数(1) Inno Setup支持以下函数和过程. function InitializeSetup(): Boolean; 该函数在安装程序初始化时调用,返回False 将中断安装,True则 ...

  9. Java 图片添加水印效果

    package com.xiaowu.drawwater.demo; import java.awt.AlphaComposite; import java.awt.Graphics2D; impor ...

  10. 本地DNS如何解析公网域名

    DNS服务器图解: 为了服务于公司内部局域网应用,如域.本地网站.论坛.OA.ERP系统等,我们通常搭建本地DNS服务器. 将本地DNS服务器设置为首选DNS,本地系统解析访问是快了. 但内部DNS怎 ...