2017-10-6-MyBatis配置简述

MyBatis配置简述

MyBatis的配置元素如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--配置-->
	<properties/><!--属性-->
    <settings/><!--设置-->
	<typeAliases/><!--类型命名-->
    <typeHandlers/><!--类型处理器-->
    <objectFactory/><!--对象工厂-->
    <plugins/><!--插件-->
    <environments><!--配置环境-->
        <environment><!--环境变量-->
            <transactionManager/><!--事务管理器-->
            <dataSource /><!--数据源-->
        </environment>
    </environments>
	<databaseIdProvider/><!--数据库厂商提供者-->
    <mappers/><!--映射器-->
</configuration>

这些元素并不都是必须存在的,在需要时使用即可,在使用时,发现如果顺序出现颠倒会提示错误。

properties

<properties>属性可以在系统运行时配置一些运行参数,可以将配置文件写在xml文件或者.properties文件中。在MyBaits中可以有三种方式使用properties:

  • property子元素
  • .properties文件
  • Java程序传递

最普遍的用法就是使用.properties文件,可以把一些数据库连接有关的键值对如数据库驱动,连接URL,用户名和密码等放在配置文件中。
可以创建一个dataSource.properties文件:

database.driver = com.mysql.jdbc.Driver
database.url = jdbc:mysql://127.0.0.1:3306/dabase_name?useUnicode=true&characterEncoding=utf8
database.username = username
database.password = password

在MyBatis中通过<properties>属性resource就可以引入properties文件。如:

<properties resource = "dataSource.properties"/>

当然也可以直接使用<properties>中的property子元素引入。

  <properties>
        <property name="username" value="username"/>
        <property name="password" value="password"/>
    </properties>

settings

settings配置比较复杂,拥有很多配置规则,但是大部分情况下使用默认的配置就可以运行,只有一些常用的规则需要配置,如缓存cacheEnabled, 级联lazyLoadingEnabled和aggressiveLazyLoading,自动映射autoMappingBehavior和mapUnderscoreToCamelCase,执行器类型defaultExecutorType。

<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="autoMappingBehavior" value="PARTIAL" />  
		<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
        <setting name="defaultExecutorType" value="SIMPLE" />  
        <setting name="defaultStatementTimeout" value="25" />
		<setting name="defaultFetchSize" value ="100"/>
        <setting name="safeRowBoundsEnabled" value="false" />  
        <setting name="mapUnderscoreToCamelCase" value="false" />  
        <setting name="localCacheScope" value="SESSION" />  
        <setting name="jdbcTypeForNull" value="OTHER" />  
        <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString" />  
 </settings>

typeAliases

typeAliases用于提供别名,并且可以设置package,这样在mapper文件中可以直接使用别名,不用使用带上包路径的全限定名称。MyBatis中别名不区分大小写。

系统定义别名

MyBatis系统定义了一些常用的内置对象的别名,其别名和Java类型的对应规则可以大致表示为:

  • 如果是基本数组类型,别名是Java类型前面加上_,如:基本类型int对应的别名为_int;
  • 如果是引用数据类型,别名是将该类型的首写字母小写,如:Integer对应的别名为integer,由于不区分大小写,实际上写成Integer也可以。

自定义别名

自定义别名可以使用以下的方式:
通过扫描包的方式,可以用这个包下面的类名直接作为别名引入

 <typeAliases><!--别名-->
        <package name="cn.abelib.bean"/>
    </typeAliases>

使用配置文件的形式

 <typeAliases><!--别名-->
        <typeAliase alias="user"  type="cn.abelib.bean.User"/>
    </typeAliases>

typeHandler

typeHandler是类型转换器,用于在数据库类型jdbcType和Java类型javaType之间的转换。和typeAliases类似,系统自定义了常用的typeHandller用于系统指定的类型转换,如果在实际情况下需要也可以通过实现 TypeHandler<T>接口来自定义实现typeHandler。如:

// 自定义的typeHandler
public class MyTypeHandler implements TypeHandler<String> {
    Logger logger = Logger.getLogger(MyTypeHandler.class);
    public void setParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
        ps.setString(i, parameter);
    }

    public String getResult(ResultSet rs, String columnName) throws SQLException {
        String result = rs.getString(columnName);
        return result;
    }

    public String getResult(ResultSet rs, int columnIndex) throws SQLException {
        String result = rs.getString(columnIndex);
        return result;
    }

    public String getResult(CallableStatement cs, int columnIndex) throws SQLException {
        String result = cs.getString(columnIndex);
        return result;
    }
}

使用时:

 <typeHandlers><!--用于jdbc和Java之间的类型转换-->
        <typeHandler jdbcType="VARCHAR" javaType="string"
                handler="com.abel.mybatis.MyTypeHandler"/>
    </typeHandlers>

ObjectFactory

ObjectFactory被用来在创建结果集时生成结果集实例。默认情况下使用的是org.apache.ibatis.reflection.factory包下的DefaultObjectFactory,当然也可以根据需要自己继承DefaultObjectFactory实现自定义的对象工厂。

plugins

plugins可以算得上是MyBaits最复杂、最强大的组件,后面会单独来学习这部分内容。

posted @ 2017-10-16 01:37  寒来袖间  阅读(184)  评论(0编辑  收藏  举报