02.Mybatis的xml映射配置文件

发布时间:2020-06-30 20:42:58 作者:IMUKL8
来源:网络 阅读:827

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

properties

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

例如:

    <properties resource="jdbc.properties"></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>

properties 将会从包含进来的 jdbc.properties 文件中的值来替换。
<br/>

Settings

下面这个表格描述了设置信息,它们的含义和默认值。

02.Mybatis的xml映射配置文件

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

<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="User" type="com.mu.mybatis.domain.User"/>
</typeAliases>

使用这个配置,“User”可以任意用来替代“com.mu.mybatis.domain.User”所使用的地方。

typeHandlers

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

02.Mybatis的xml映射配置文件

你可以重写类型处理器或创建你自己的类型处理器来处理不支持的或非标准的类型。要这样做的话,简单实现 TypeHandler 接口(org.mybatis.type),然后映射新的类型处理器类到Java 类型,还有可选的一个 JDBC 类型。例如:

// ExampleTypeHandler.java
public class ExampleTypeHandler implements TypeHandler {
    public void setParameter(PreparedStatement ps, int i, Object parameter,JdbcType jdbcType) throws SQLException {
        ps.setString(i, (String) parameter);
    }
    public Object getResult(ResultSet rs, String columnName)throws SQLException {
        return rs.getString(columnName);
    }
    public Object getResult(CallableStatement cs, int columnIndex)throws SQLException {
        return cs.getString(columnIndex);
    }
}

// MapperConfig.xml

<typeHandlers>
    <typeHandler javaType="String" jdbcType="VARCHAR"
    handler="org.mybatis.example.ExampleTypeHandler"/>
</typeHandlers>

使用这样的类型处理器将会覆盖已经存在的处理 Java 的 String 类型属性和 VARCHAR参数及结果的类型处理器。要注意 MyBatis 不会审视数据库元信息来决定使用哪种类型,所以你必须在参数和结果映射中指定那是 VARCHAR 类型的字段,来绑定到正确的类型处理器上。这是因为 MyBatis 直到语句被执行都不知道数据类型的这个现实导致的.

objectFactory

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

比如:

// ExampleObjectFactory.java
public class ExampleObjectFactory extends DefaultObjectFactory {
    public Object create(Class type) {
        return super.create(type);
    }
    public Object create(Class type,List<Class> constructorArgTypes,List<Object> constructorArgs) {
        return super.create(type, constructorArgTypes, constructorArgs);
    }
    public void setProperties(Properties properties) {
        super.setProperties(properties);
    }
}
// MapperConfig.xml
<objectFactory type="org.mybatis.example.ExampleObjectFactory">
    <property name="someProperty" value="100"/>
</objectFactory>

ObjectFactory 接口非常简单。它包含两个用于创建的方法,一个是默认构造方法,另外一个是处理带参数的构造方法。最终,setProperties 方法可以被用来配置 ObjectFactory。在初始化你的ObjectFactory实例后,objectFactory元素体中定义的属性会被传递给setProperties方法。

plugins

MyBatis 允许你在某一点拦截已映射语句执行的调用。

默认情况下,MyBatis 允许使用插件来拦截方法调用:

这些类中方法的详情可以通过查看每个方法的签名来发现,而且它们的源代码存在于MyBatis 的发行包中。你应该理解你所覆盖方法的行为,假设你所做的要比监视调用要多。

如果你尝试修改或覆盖一个给定的方法,你可能会打破 MyBatis 的核心。这是低层次的类和方法,要谨慎使用插件。

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

// ExamplePlugin.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

MyBatis 可以配置多种环境。这会帮助你将 SQL 映射应用于多种数据库之中。例如,你也许为开发要设置不同的配置,测试和生产环境。或者你可能有多种生产级数据库却共享相同的模式,所以你会想对不同数据库使用相同的 SQL 映射。这种用例是很多的。

要记得一个很重要的问题:你可以配置多种环境,但你只能为每个 SqlSessionFactory实例选择一个。

所以,如果你想连接两个数据库,你需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。而如果是三个数据库,你就需要三个实例,以此类推。记忆起来很简单:

每个数据库对应一个 SqlSessionFactory为了明确创建哪种环境,你可以将它作为可选的参数传递给 SqlSessionFactoryBuilder。
可以接受环境配置的两个方法签名是:

    SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, environment);
    SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, environment,properties);

如果环境被忽略,那么默认环境将会被加载,如下进行:

    SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader);
    SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader,properties);

环境元素定义了如何配置环境。

<environments default="development">
    <environment id="development">
        <transactionManager type="JDBC">
            <property name="..." value="..."/>
        </transactionManager>
        <dataSource type="POOLED">
            <property name="driver" value="${driver}"/>
            <property name="url" value="${url}"/>
            <property name="username" value="${username}"/>
            <property name="password" value="${password}"/>
        </dataSource>
    </environment>
</environments>

注意这里的关键部分:

<br/>

transactionManager

在 MyBatis 中有两种事务管理器类型(也就是 type=”[JDBC|MANAGED]”):

<br/>

dataSsource

dataSource 元素使用基本的 JDBC 数据源接口来配置 JDBC 连接对象的资源。许多 MyBatis 的应用程序将会按示例中的例子来配置数据源。然而它并不是必须的。

要知道为了方便使用延迟加载,数据源才是必须的。

有三种内建的数据源类型(也就是 type=”???”):

这 样 就 会 传 递 以 值 “ UTF8 ” 来 传 递 “ encoding ” 属 性 , 它 是 通 过DriverManager.getConnection(url,driverProperties)方法传递给数据库驱动。

除了上述(UNPOOLED)的属性之外,还有很多属性可以用来配置 POOLED 数据源:

<br/>

mappers

既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要定义 SQL 映射语句了。但是,首先我们需要告诉 MyBatis 到哪里去找到这些语句。Java 在这方面没有提供一个很好的方法,所以最佳的方式是告诉 MyBatis 到哪里去找映射文件。

    <mappers>
            <mapper resource="com/mu/mybatis/mapper/UserMapper.xml"/>
    </mappers>

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

推荐阅读:
  1. XML配置文件说明
  2. web.xml中配置applicationContext.xml 配置文件的存放位置

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mybatis 配置文

上一篇:JDK源码分析(11)之 BlockingQueue 相关

下一篇:[C语言]Unicode编码(二)-中文字符刷选

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》