Mybatis配置文件详解

  1. Properties(属性)
    Java属性文件可以配置直观的。
    如:
<properties>
        <property name="jdbc.driver" value="com.mysql.jdbc.Driver"/>
        <property name="jdbc.url" value="jdbc:mysql:///mybatis"/>
        <property name="jdbc.username" value="root"/>
        <property name="jdbc.password" value="root"/>
</properties>

或者通过直接引入属性文件,例如:

<properties resource="db.properties"></properties>

然后db.properties文件中的配置就是:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///mybatis
jdbc.username=root
jdbc.password=root

值得一提的是:上面resource属性默认是加载类路径下的db.perperties属性文件
要用到这些属性的时候,就如下面一样:

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

如果一个属性在多个地方出现,那Mybatis将按一下的顺序加载:
(1)属性文件中的属性项首先被读取
(2)在类路径或URL资源中读取的属性项第二顺序加载,并且可以覆盖第一顺序加载的值
(3)在方法体中给定的参数值最好加载,但是以后覆盖上述两种加载的值。
也就是说,最高级别的属性值是方法体中设定的参数值,接下来是类路径和URL,最后才是 属性文件


2.settings(设置)
这里写图片描述

例如:

<settings>
        <setting name="cacheEnabled" value="true"/>
        <setting name="lazyLoadingEnabled" value="true"/>
        <setting name="aggressiveLazyLoading" value="true"/>
        <setting name="multipleResultSetsEnabled" value="true"/>
        <setting name="useColumnLabel" value="true"/>
        <setting name="useGeneratedKeys" value="false"/>
        <setting name="autoMappingBehavior" value="PARTIAL"/>
        <setting name="defaultExecutorType" value="SIMPLE"/>
        <setting name="defaultStatementTimeout" value="25000"/>
</settings>

3.typeAliases(类型别名)
类型别名是Java类型的简称。
逐个设置,例如:

<typeAliases>
        <typeAlias type="com.yan.po.User" alias="user"/>
</typeAliases>

整个包设置,例如:

<typeAliases>
        <package name="com.yan.po"/>
</typeAliases>

然后,咱们要注意的是,Mybatis已经给咱们默认设置好常用类型的别名,如下表:
这里写图片描述
这里写图片描述


4.typeHandlers(类型句柄)
当mybatis 对 PreparedStatement设入一个参数或者是从ResultSet 返回一个值的时候,类型句柄被用将值转为相匹配的JAVA类型。这下表格描述了默认的类型句柄。

这里写图片描述

你可以重写类型句柄或者是创建你自己的方式来处理不支持或者是非标准的类型。只需要简单地实现org.mybaits.type包里的TypeHandler,并且映射到一个JAVA类型,然后再选定一个JDBC类型。
例如:

<typeHandlers>
        <typeHandler handler="com.yan.typeHandler.TestTypeHandler"/>
</typeHandlers>

然后自己写了一个类型:

package com.yan.typeHandler;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;

public class TestTypeHandler<T> implements TypeHandler<T> {

    public void setParameter(PreparedStatement ps, int i, T parameter,
            JdbcType jdbcType) throws SQLException {
        // TODO Auto-generated method stub

        ps.setString(i, (String) parameter);
    }

    public T getResult(ResultSet rs, String columnName) throws SQLException {
        // TODO Auto-generated method stub
        return null;
    }

    public T getResult(ResultSet rs, int columnIndex) throws SQLException {
        // TODO Auto-generated method stub
        return null;
    }

    public T getResult(CallableStatement cs, int columnIndex)
            throws SQLException {
        // TODO Auto-generated method stub
        return null;
    }

}

然后,想怎么改类型,就怎么改,就是这么的任性。
比如,我想让某个返回值用到这个类型,例如:

<resultMap type="" id="" >
    <result column="" property="" typeHandler="com.yan.typeHandler.TestTypeHandler"/>
</resultMap>

现在,你们应该知道怎么用这玩意了吧 ,没错,其实这玩意儿就是这么的简单。


5.ObjectFactory(对象工厂)
每次Mybatis为结果对象创建一个新实例,都会用到ObjectFactory。默认的ObjectFactory与使用目标类的构造函数创建一个实例毫无区别,如果有已经映射的参数,那也可能使用带参数的构造函数。如果你重写ObjectFactory的默认操作,你就可以创建你自己的对象。例如:
SqlMapConfig.xml中配置是:

<ObjectFactory type="com.yan.objectFactory.TestObjectFactory">
        <property name=""  value=""/>
</ObjectFactory>

重写的ObjectFactory 代码:

package com.yan.objectFactory;

import java.util.List;
import java.util.Properties;

import org.apache.ibatis.reflection.factory.DefaultObjectFactory;

import com.yan.po.User;

public class TestObjectFactory extends DefaultObjectFactory {

    public Object create(Class type){
        return super.create(type);
    }

    public Object create(Class type,List<Class<T>> constructorArgTypes,List<Object> constructorArgs){
        return super.create(type, constructorArgTypes, constructorArgs);

    }

    public void setProperties(Properties properties){

        super.setProperties(properties);
    }

}

6.Plugins (插件)
啥都先别说,来个例子你就明白了:
sqlMapConfig.xml中配置:

<!-- 配置分页插件 -->
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageHelper">
    <!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库-->        
            <property name="dialect" value="mysql"/>
        </plugin>
    </plugins>

就是这么简单,这么好用。


7.Environment (环境)
MyBatis可以配置多个环境。这可以帮助你SQL映射对应多种数据库等。
比如说,你想为开发、测试、发布产品配置不同的环境。等等。
不过,值得咱们注意的是:虽然你可以配置多重环境,但是你只可以选择一对一的SqlsessionFactory实例。
例如: 用environment 的id属性来标识,然后environments 的default指定

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

8.Mappers (映射器)
用过Mabatis的朋友们都知道这个,这个标签有两个用法,都是用来映射代理mapper.xml文件使用的。
第一个用法:逐个映射,
例如:

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

第二个用法:包名映射,其包下的mapper.xml文件都被注册
例如:

<mappers>
        <package name="com.yan.mapper"/>
</mappers>

最后,在这里祝大家学习愉快,家庭幸福美满


版权声明:本文为weixin_40254133原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。