0

0

My Batis 的XML 映射配置文件的实例详解

Y2J

Y2J

发布时间:2017-04-24 09:33:29

|

2386人浏览过

|

来源于php中文网

原创

[java] view plain copy

  My Batis 支持SQL查询,是一些高级映射在持久层的完美展示。他更多的使用简单的XML或注解用于配置和原始映射,摒除了大量的JDBC代码、手工设置参数和结果集封装,提高了开发效率。

MyBatis的XML配置文件包含了影响MyBatis行为甚深的设置和属性信息。XML文档的高层级结构如下:

configuration配置

environment环境变量

 transactionManager事务管理器

dataSource数据源

 properties属性

  settings设置

 typeAliases类型命名

typeHandlers类型处理器

objectFactory对象工厂

 plugins插件

 environments环境

 映射器

 下面就对各个属性配置做出详细介绍

    properties
       这些是外部化的,可替代的属性,这些属性也可以配置在典型的Java属性配置文件中,或者通过properties元素的子元素来传递。

                     例如:

[html] view plain copy
  
[html] view plain copy
  
[html] view plain copy
  
[html] view plain copy
  
[html] view plain copy
  
[html] view plain copy
  
[html] view plain copy

              这个例子中的username和password将会由properties元素中设置的值来替换。driver和url属性将会从包含进来的jdbc_mysql.properties文件中的值来替换。

   Settings
       这些是极其重要的调整,它们会修改MyBatis在运行时的行为方式。下面这个表格描述了设置信息,它们的含义和默认值。

 设置参数                                               描述                                               

cacheEnabled       这个配置使全局的映射器启用或禁用缓存。

lazyLoadingEnabled  全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。

aggressiveLazyLoading     当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。否则,每种属性将会按需要加载。

multipleResultSetsEnabled       允许或不允许多种结果集从一个单独的语句中返回(需要适合的驱动)。

useColumnLabel      使用列标签代替列名。不同的驱动在这方便表现不同。参考驱动文档或充分测试两种方法来决定所使用的驱动。

useGeneratedKeys     允许JDBC支持生成的键。需要适合的驱动。如果设置为true则这个设置强制生成的键被使用,尽管一些驱动拒绝兼容但仍然有效(比如Derby)。

autoMappingBehavior       指定MyBatis如何自动映射列到字段/属性。PARTIAL只会自动映射简单,没有嵌套的结果。FULL会自动映射任意复杂的结果(嵌套的或其他情况)。

defaultExecutorType   配置默认的执行器。SIMPLE执行器没有什么特别之处。REUSE执行器重用预处理语句。BATCH执行器重用语句和批量更新

defaultStatementTimeout   设置超时时间,它决定驱动等待一个数据库响应的时间。

一个设置信息元素的示例,完全的配置如下所示:










typeAliases

      类型别名是为Java类型命名一个短的名字。它只和XML配置有关,只用来减少类完全限定名的多余部分。例如:

[html] view plain copy
  
[html] view plain copy
  
[html] view plain copy
  
[html] view plain copy
  
[html] view plain copy
  
[html] view plain copy
  
[html] view plain copy
  
[html] view plain copy

使用这个配置,“Blog”可以任意用来替代“domain.blog.Blog”所使用的地方。

typeHandlers
           无论是MyBatis在预处理语句中设置一个参数,还是从结果集中取出一个值时,类型处理器被用来将获取的值以合适的方式转换成Java类型。下面这个列表描述了默认的类型处理器。 依次是  类型处理器 Java类型 JDBC类型

 BooleanTypeHandler           Boolean,boolean       任何兼容的布尔值

 ByteTypeHandler                  Byte,byte           任何兼容的数字或字节类型

学习导航
学习导航

学习者优质的学习网址导航网站

下载

ShortTypeHandler                 Short,short           任何兼容的数字或短整型

IntegerTypeHandler             Integer,int           任何兼容的数字和整型

LongTypeHandler                Long,long            任何兼容的数字或长整型

FloatTypeHandler                 Float,float             任何兼容的数字或单精度浮点型

DoubleTypeHandler            Double,double     任何兼容的数字或双精度浮点型

BigDecimalTypeHandler    BigDecimal            任何兼容的数字或十进制小数类型

StringTypeHandler               String             CHAR和VARCHAR类型

ClobTypeHandler                String               CLOB和LONGVARCHAR类型

NStringTypeHandler           String        NVARCHAR和NCHAR类型

NClobTypeHandler              String          NCLOB类型

ByteArrayTypeHandler        byte[]          任何兼容的字节流类型

BlobTypeHandler                byte[]          BLOB和LONGVARBINARY类型

DateTypeHandler                Date(java.util)     TIMESTAMP类型

DateOnlyTypeHandler       Date(java.util)        DATE类型

TimeOnlyTypeHandler      Date(java.util)       TIME类型

SqlTimestampTypeHandler   Timestamp(java.sql)  TIMESTAMP类型

SqlDateTypeHandler         Date(java.sql)      DATE类型

SqlTimeTypeHandler        Time(java.sql)    TIME类型

ObjectTypeHandler          Any             其他或未指定类型

EnumTypeHandler           Enumeration类型         VARCHAR-任何兼容的字符串类型,作为代码存储(而不是索引)。

objectFactory
MyBatis每次创建结果对象新的实例时,它使用一个ObjectFactory实例来完成。如果参数映射存在,默认的ObjectFactory不比使用默认构造方法或带参数的构造方法实例化目标类做的工作多。

plugins
MyBatis允许你在某一点拦截已映射语句执行的调用。默认情况下,MyBatis允许使用插件来拦截方法调用:

Executor
            (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
 ParameterHandler
            (getParameterObject, setParameters)
 ResultSetHandler
          (handleResultSets, handleOutputParameters)
 StatementHandler

          (prepare, parameterize, batch, update, query)
             这些类中方法的详情可以通过查看每个方法的签名来发现,而且它们的源代码在MyBatis的发行包中有。你应该理解你覆盖方法的行为,假设你所做的要比监视调用要多。如果你尝试修改或覆盖一个给定的方法,你可能会打破MyBatis的核心。这是低层次的类和方法,要谨慎使用插件。

使用插件是它们提供的非常简单的力量。简单实现拦截器接口,要确定你想拦截的指定签名。

     java代码:

[javascript] view plain copy
@Intercepts({@Signature(type= Executor.class,method = "update",  
[javascript] view plain copy
args = {MappedStatement.class,Object.class})})  
[javascript] view plain copy
public class ExamplePlugin implements Interceptor {  
[javascript] view plain copy
public Object intercept(Invocation invocation) throws Throwable  
[javascript] view plain copy
{  
[javascript] view plain copy
return invocation.proceed();  
[javascript] view plain copy
}  
[javascript] view plain copy
public Object plugin(Object target) {  
[javascript] view plain copy
return Plugin.wrap(target, this);  
[javascript] view plain copy
}  
[javascript] view plain copy
public void setProperties(Properties properties) {  
[javascript] view plain copy
}  
[html] view plain copy
MapperConfig.xml  
[html] view plain copy
  
[html] view plain copy
  
[html] view plain copy
  
[html] view plain copy
  
[html] view plain copy
  
[html] view plain copy

上面的插件将会拦截在Executor实例中所有的“update”方法调用,它也是负责低层次映射语句执行的内部对象。

environments

[html] view plain copy
  
          
              
              
                  
                  
                  
                  
                                  
                  
                           
              
          
      
dataSsource

        dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源。见上
transactionManager

在MyBatis中有两种事务管理器类型(也就是type=”[JDBC|MANAGED]”):
1.JDBC – 这个配置直接简单使用了JDBC的提交和回滚设置。它依赖于从数据源得到的连接来管理事务范围。
2.MANAGED – 这个配置几乎没做什么。它从来不提交或回滚一个连接。而它会让容器来管理事务的整个生命周期(比如Spring或JEE应用服务器的上下文)。默认情况下它会关闭连接。然而一些容器并不希望这样,因此如果你需要从连接中停止它,将closeConnection属性设置为false。例如:

[html] view plain copy
  
  

这两种事务管理器都不需要任何属性。然而它们都是类型别名,要替换使用它们,你需要放置将你自己的类的完全限定名或类型别名,它们引用了你对TransacFactory接口的实现类。
public interface TransactionFactory {
void setProperties(Properties props);
Transaction newTransaction(Connection conn, boolean autoCommit);
}
任何在XML中配置的属性在实例化之后将会被传递给setProperties()方法。你的实现类需要创建一个事务接口的实现,这个接口也很简单:

[html] view plain copy
public interface Transaction {  
Connection getConnection();  
void commit() throws SQLException;  
void rollback() throws SQLException;  
void close() throws SQLException;  
}

            使用这两个接口,你可以完全自定义MyBatis对事务的处理。

 mappers

既然MyBatis的行为已经由上述元素配置完了,我们现在就要定义SQL映射语句了。但是,首先我们需要告诉MyBatis到哪里去找到这些语句。Java在这方面没有提供一个很好的方法,所以最佳的方式是告诉MyBatis到哪里去找映射文件。你可以使用相对于类路径的资源引用,或者字符表示,或url引用的完全限定名(包括file:///URLs)。例如:

[html] view plain copy
// Using classpath relative resources(首选)  
  
  
  
  
  
// Using url fully qualified paths  
  
  
  
  

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

0

2026.01.30

c++ 字符串格式化
c++ 字符串格式化

本专题整合了c++字符串格式化用法、输出技巧、实践等等内容,阅读专题下面的文章了解更多详细内容。

0

2026.01.30

java 字符串格式化
java 字符串格式化

本专题整合了java如何进行字符串格式化相关教程、使用解析、方法详解等等内容。阅读专题下面的文章了解更多详细教程。

0

2026.01.30

python 字符串格式化
python 字符串格式化

本专题整合了python字符串格式化教程、实践、方法、进阶等等相关内容,阅读专题下面的文章了解更多详细操作。

1

2026.01.30

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

19

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

16

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

17

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

2

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
XML教程
XML教程

共142课时 | 6万人学习

XQuery 教程
XQuery 教程

共12课时 | 3.8万人学习

XLink  教程
XLink 教程

共7课时 | 1.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号