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. 【转】C# 中Linq查询所有上级节点或所有下级节点
  3. 【原创】一种维护型项目升级打包的解决方案
  4. 购买流程图java_Java实现基于控制台的购书系统基本操作
  5. python中index函数_python中index函数的用法
  6. STS安装lombok
  7. jetty for linux 启用日志
  8. SAP Spartacus Accessibility E2E 端到端测试
  9. 2、Sprite,SpriteBatch,Texture,TextureRegion的初步认识
  10. U盘的用法用途与维护
  11. 虚拟化文件服务器,vmware服务器虚拟化项目实施文档(1)
  12. 大型网站架构演变和知识体系(转)
  13. orangepi获取cpu温度
  14. php实现新闻管理系统,PHP基础示范:用PHP+Mysql编写简易新闻管理系统_mysql
  15. android系统 限制应用安装程序,安卓手机不能安装软件是什么原因 安卓手机不能安装软件解决方法...
  16. 自然语言处理中的中英文分词工具
  17. 诚信可靠的深圳python_ai人工智能哪家正规诚信经营
  18. tlc2543 多通道选择 错误
  19. 线程的启动暂停和终止
  20. 从程序员的角度设计一个Java的神经网络

热门文章

  1. firewall-cmd设置NAT转换
  2. 入门篇笔记二(字迹潦草也请莫见怪)
  3. generator代码生成器
  4. Android内存优化(一)之FinalizerDaemon和FinalizerWatchDog多线程内存泄露案例
  5. 【高效办公】四、主机与虚拟机之间共享文件
  6. 高中人教版地理教案四-Leo老师
  7. mate30pro鸿蒙系统安装教程,华为mate30pro升级鸿蒙系统步骤 教程如下
  8. 社群运营的意义和价值
  9. mysql econnreset_MySQL在node.js服务器上的空闲时间后给出“ read ECONNRESET”错误
  10. 典型问题分析(1)---- 腾讯视频播放《长津湖之水门桥》视频花屏