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

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

  • configuration配置

    • properties属性
    • settings设置
    • typeAliases类型命名
    • typeHandlers类型处理器
    • objectFactory对象工厂
    • plugins插件
    • environments环境
      • environment环境变量

        • transactionManager事务管理器
        • dataSource数据源
    • 映射器

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

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

例如:

   <properties resource="jdbc_mysql.properties" />
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>

这个例子中的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   设置超时时间,它决定驱动等待一个数据库响应的时间。

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

<settings>

<setting name="cacheEnabled" value="true"/>

<setting name="lazyLoadingEnabled" value="true"/>

<setting name="multipleResultSetsEnabled" value="true"/>

<setting name="useColumnLabel" value="true"/>

<setting name="useGeneratedKeys" value="false"/>

<setting name="enhancementEnabled" value="false"/>

<setting name="defaultExecutorType" value="SIMPLE"/>

<setting name="defaultStatementTimeout" value="25000"/>

</settings>

typeAliases

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

<typeAliases>
<typeAlias alias="Author" type="domain.blog.Author"/>
<typeAlias alias="Blog" type="domain.blog.Blog"/>
<typeAlias alias="Comment" type="domain.blog.Comment"/>
<typeAlias alias="Post" type="domain.blog.Post"/>
<typeAlias alias="Section" type="domain.blog.Section"/>
<typeAlias alias="Tag" type="domain.blog.Tag"/>
</typeAliases>

使用这个配置,“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代码:

@Intercepts({@Signature(type= Executor.class,method = "update",
args = {MappedStatement.class,Object.class})})
public class ExamplePlugin implements Interceptor {
public Object intercept(Invocation invocation) throws Throwable
{
return invocation.proceed();
}
public Object plugin(Object target) {
return Plugin.wrap(target, this);
}
public void setProperties(Properties properties) {
}
MapperConfig.xml
<plugins>
<plugin interceptor="org.mybatis.example.ExamplePlugin">
<property name="someProperty" value="100"/>
</plugin>
</plugins>

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

environments

<environments default="development"><environment id="development"><transactionManager type="JDBC" /><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.user}" /><property name="password" value="${jdbc.password}" /><property name="poolPingEnabled" value="true"/><property name="poolPingQuery" value="SELECT * FROM app_setup_setting WHERE name='allow_setup_unknown_app'" /><property name="poolPingConnectionsNotUsedFor" value="7200000"/> </dataSource></environment></environments>

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

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

<transactionManager type="MANAGED">
<property name="closeConnection" value="false"/>
</transactionManager>

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

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)。例如:

// 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>
// Using url fully qualified paths
<mappers>
<mapper url="file:///var/sqlmaps/AuthorMapper.xml"/>
<mapper url="file:///var/sqlmaps/BlogMapper.xml"/>
<mapper url="file:///var/sqlmaps/PostMapper.xml"/>
</mappers>

这些语句简单告诉了MyBatis去哪里找映射文件。

My Batis 的XML 映射配置文件详解相关推荐

  1. Hibernate学习笔记--映射配置文件详解

    参考资料: http://blog.163.com/hzd_love/blog/static/13199988120108265317988/ http://www.cnblogs.com/often ...

  2. sqlMapConfig.xml配置文件详解

    sqlMapConfig.xml配置文件详解:  Xml代码 Xml代码   <? xml version="1.0" encoding="UTF-8"  ...

  3. ibatis之——sqlMapConfig.xml配置文件详解

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47104893 sqlMapConfig.xml配置文件详解: <?xml v ...

  4. Maven学习—setting.xml pom.xml 配置文件详解

    一.Maven最重要的两个配置文件 Maven 仓库及相关设置配置文件 setting.xml配置文件可以设置本地仓库目录.远程仓库地址.JDK版本等等 Maven构建Java工程的pom配置文件 p ...

  5. Hibernate配置文件与映射文件详解

    Hibernate是一个彻底的ORM(Object Relational Mapping,对象关系映射)开源框架. 我们先看一下官方文档所给出的,Hibernate 体系结构的高层视图: 其中PO=P ...

  6. AndroidManifest.xml配置文件详解

    AndroidManifest.xml配置文件详解 . AndroidManifest.xml配置文件对于Android应用开发来说是非常重要的基础知识,本文旨在总结该配置文件中重点的用法,以便日后查 ...

  7. mysql在xml中jdbctype,MyBatis中的JdbcType映射使用详解

    Java项目涉及到数据库交互,以往常用的是JDBC,现在则有Hibernate.Mybatis等这些持久化支持. 项目中用到了MyBatis,和JDBC最显著的区别,就是SQL语句配置化,通过xml文 ...

  8. hbase-site.xml 配置文件详解

    目录 1 版本信息 2 hbase-site.xml 配置文件详解 1 版本信息 2 hbase-site.xml 配置文件详解 <configuration  xmlns:xi="h ...

  9. Spring XML配置文件详解

    ​ spring配置文件是用于指导Spring工厂进行Bean生产.依赖关系注入(装配)及Bean实例分发的"图纸".Spring框架的配置文件是基于xml的,Spring强大的功 ...

最新文章

  1. 在多变环境中长期定位和建图的通用框架
  2. 【学习笔记】树上启发式合并
  3. 不“刷脸”回不了家?郑州业主拒绝录入人脸信息回家如做贼,物业:少数服从多数...
  4. 关于面象接口编程的理解
  5. 2008下php上传文件崩溃,php – 当用户反复尝试上传无效文件类型时,网站崩溃
  6. mysql 触发器不能同时 insert or update or delete_MySQL6:触发器
  7. 【Python】mayavi小结
  8. Codeforces 827D Best Edge Weight 倍增 + 并查集 || 倍增 + 压倍增标记 (看题解)
  9. [2013.8.16]小议innerText/HTML以及outerText/HTML
  10. oracle异机复制,oracle冷备份恢复和oracle异机恢复使用方法
  11. 尾纤SC、ST、FC、LC区分
  12. 服务器安装系统h730,戴尔H330_H730阵列卡驱动
  13. 微信群二维码活码生成系统 生成微信活码
  14. 那些通宵加班的年轻人
  15. 购买服务器 架设代理服务器 Android studio设置代理
  16. 【DVB】【Cert】DVD相关认证简介
  17. 最值得看的文章之一:林锐《大学十年》
  18. 关于 SwiperJS 的初次使用
  19. 2015年11月小结
  20. 电动汽车充电桩管理平台

热门文章

  1. vc2008 使用mysql_real_connect_VC远程连接MYSQL失败原因收集:mysql_real_connect()
  2. 柯里化函数(Currying),什么是柯里化,为什么要进行柯里化,高级柯里化函数的实现
  3. 线上展会之桥批与金融历史文化3D线上展厅
  4. 卷积的本质及物理意义(深度简要理解)
  5. WSL2安装Xfce4可视化GUI界面
  6. 出栈顺序问题讲解 蓝桥杯
  7. 社群运营的本质是什么?
  8. 是做拓荒者还是传道士?
  9. 《7 days to die》7日杀网站
  10. Android 仿微信朋友圈拍照原理解读,技术分析