mybatis全局配置文件mybatis-config.xml常用参数配置解析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lycyl/article/details/88547632

前言:

首先我们可以明确的一点是,mybatis的核心是sqlSession,所有对数据库的操作都封装在其中(这个跟hibernate是一样的)。所以如果要使用mybatis第一步是获得sqlSession,mybatis提供了sqlSessionFactory工厂方法来构建sqlSession,一般情况我们都是通过配置文件来构建sqlSessionFactory的。看下面代码:

String resource = "../mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

我们可以看到sqlSessionFactory是通过sqlSessionFactoryBuilder来创建的,而通过源码我们清楚地看到,mybatis通过

XMLConfigBuilder解析配置文件构建配置对象Configuration,生成sqlSessionFactory。如果说sqlSession是mybatis的核心,那么全局配置文件就是其基础。它包含了框架所有的配置。

public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
    try {
        XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
        Configuration config = parser.parse(); //Mybatis框架配置对象
        return new DefaultSqlSessionFactory(config);
    } catch (Exception e) {
        throw ExceptionFactory.wrapException("Error building SqlSession.", e);
    } finally {
        try {
            inputStream.close();
        } catch (IOException e) {}
    }
}

 1.typeAliases属性

别名,就是用来简化配置的。

 <typeAliases>
        <typeAlias type="com.huatech.iaudit.audit.entity.LogLogin" alias="LogLogin"/>
        <typeAlias type="com.huatech.iaudit.audit.entity.LogAction" alias="LogAction"/>
 </typeAliases>

2.plugins属性

提供一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能。

<plugins>
        <!-- com.github.pagehelper为PageHelper类所在包名 -->
        <plugin interceptor="com.github.pagehelper.PageHelper">
            <!-- 4.0.0以后版本可以不设置该参数 -->
            <!-- property name="dialect" value="postgresql"/ -->

            <!-- 该参数默认为false -->
            <!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
            <!-- 和startPage中的pageNum效果一样-->
            <property name="offsetAsPageNum" value="true"/>

            <!-- 该参数默认为false -->
            <!-- 设置为true时,使用RowBounds分页会进行count查询 -->
            <property name="rowBoundsWithCount" value="true"/>

            <!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
            <!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)-->
            <property name="pageSizeZero" value="false"/>

            <!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
            <!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
            <!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
            <property name="reasonable" value="false"/>

            <!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->
            <!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->
            <!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默认值 -->
            <!-- 不理解该含义的前提下,不要随便复制该配置 -->
            <!-- property name="params" value="pageNum=pageHelperStart;pageSize=pageHelperRows;"/ -->
            <!-- 支持通过Mapper接口参数来传递分页参数 -->
            <property name="supportMethodsArguments" value="false"/>

            <!-- always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page -->
            <property name="returnPageInfo" value="none"/>
        </plugin>
</plugins>

3.settings属性

setting属性和properties属性一样,也是配置参数名和参数值。但到底和properteis有什么区别呢?我们知道properties的配置参数是为其他的配置服务的,配置项不是不定的。而settings的配置项是配置Configuration对象的属性的,配置项定死就那么几个,不配的话框架有默认值。 

<settings>
        <setting name="cacheEnabled" value="true"/>
        <!-- 全局映射器启用缓存 -->
        <setting name="useGeneratedKeys" value="false"/>
        <setting name="defaultExecutorType" value="REUSE"/>
 </settings>

 4.environments属性

要是Mybatis和Spring整合的话,那environments的配置是省略的。此配置项是配置数据库连接池和事物管理的。若何Spring配合使用,则事务的管理和数据库连接池一般都是交给Spring控制。

<environments default="development">
    <environment id="development">
        <transactionManager type="JDBC"/> <!--事物的配置, 可以是:JDBC, MANAGED-->
        <dataSource type="POOLED"> <!--数据源配置,可以是: JNDI, POOLED, UNPOOLED -->
            <property name="driver" value="${driver}"/>
            <property name="url" value="${url}"/>
            <property name="username" value="${user}"/>
            <property name="password" value="${passwd}"/>
        </dataSource>
    </environment>
    <environment id="product">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <property name="driver" value="${product.driver}"/>
            <property name="url" value="${product.url}"/>
            <property name="username" value="${product.user}"/>
            <property name="password" value="${product.passwd}"/>
        </dataSource>
    </environment>
</environments>

5.mapper属性

对应实体的映射文件,在此不赘述。

猜你喜欢

转载自blog.csdn.net/lycyl/article/details/88547632
今日推荐