欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MyBatis(三):MyBatis配置详解(一)

程序员文章站 2022-03-10 22:43:20
...

         在MyBatis(一)和MyBatis(二)中,只是对MyBatis的组成和用法做了简单描述,本次将对MyBatis的配置进行详细的讲解。MyBatis的配置文件在整个MyBatis体系中起到至关重要的作用,所以想利用好MyBatis,首先要学习好配置文件的层次结构,这些层次是不能颠倒顺序的,如果颠倒,将会出现异常。

          先来了解一下配置XML文件的层次结构:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<properties/> <!--配置 -->
	<settings/><!--设置-->
    	<typeAliases/><!--类型命名  -->
        	<typeAlias/>
    	</typeAliases> 
   	 <typeHandlers/><!--类型处理器 -->  
    	<objectFactory/><!--对象工厂  -->
   	 <plugins/><!--插件  -->
    	<environments><!--环境配置  -->
    		<environment><!--环境变量  -->
    			<transactionManager/><!--事务管理器  -->
    			<datasSource/><!--数据源  -->
    		</environment>
    	</environments>
    	<databaseIdProvider/><!--数据库厂商标示  -->
    	<mappers/><!--映射器 -->
</configuration>

        我们需要想了解具体的配置方法和使用方法,才能知道MyBatis有什么功能和作用,在之后谈到MyBatis运行原理的时候我们将会知道在整个运行过程中是怎么调度的。关于Plugin元素的用法这次不做谈论,在学习原理之前,是没有办法清晰理解插件的。

一、properties元素

         它是一个配置属性的元素,可以在配置文件的上下文汇总使用。MyBatis提供了3种配置方式:

          1、property子元素

<properties> <!--配置 -->
		<properties name="dirver" value="com.mysql.jdbc.Driver"/>
		<properties name="url" value="jdbc:mysql://192.168.15.173:3306/mybatis"/>
		<properties name="username" value="root"/>
		<properties name="password" value="123456"/>
</properties>

          上述代码段,相当是在配置文件中声明了4个属性,在同一配置文件上下文中可以随意使用。

           例如在<dataSource>中直接使用:

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

            2、properties配置文件

                      由于子元素不能重复使用,多个文件需要多个配置,为了方便维护以及随时修改,我们通常会一处声明多次使用,

            因此会单独创建一个datasource.properties的文件,来配置一些共用的参数

            如下:

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.15.173:3306/mybatis
username=root
password=123456

             然后可以在mybatis-config.xml中利用<properties resource="datasource.properties"/>引入properties文件,即可使用。

            3、程序参数传递

                 在实际工作中,系统是由运维人员配置,生产环境数据库的用户密码对开发人员应当是保密的,而且为了安全,运维

         人员要求对配置文件中的数据库用户名和密码进行加密,因此配置文件中往往配置的是加密后的数据库信息。无法通过

         加密的字符串去链接数据库,这时候需要编码来满足此场景。假设jdbc.properties文件中的username和password两个属性

         使用了加密的字符串,因此在生成SqlSessionFactory之前将它转化为明文,系统已经提供了解密的方法decode(str)。

          代码如下:

InputStream cfgStream = null;
Reader cgfReader = null;
InputStream proStream = null;
Reader proReader = null;
properties properties = null;
try{
    //读入配置文件流
    cfgStream = Resources.getResourceAsStream("mybatis-config.xml");
    cfgReader = new InputStreamReader(cfgStream);
    //读入属性文件
    proStream = Resources.getResourceAsStream("jdbc.properties");
    proReader = new InputStamReader(proStream);
    properties = new Properties();
    properties.load(proReader);
    //解密为明文
    properties.setProperty("username",docode(properties.getProperty("username")));
    properties.setProperty("password",docode(properties.getProperty("password")));
   }catch(IOException ex){
    Logger.getLogger(SqlSessionFactoryUtil.class.getName()).log(Level.SEVERE,null,ex);
}

synchronized(CLASS_LOCK){
    if(sqlSessionFactory == null){
        //使用属性来创建SqlSessionFactory
        SqlSessionFactory = 
            newSqlSessionFactoryBuilder().build(cfgReader,properties);
    }
}

             这样完成可以在jdbc.properties配置密文,满足对系统安全的要求。   

二、优先级        

            上文中的3中配置方式可能同时出现,并且属相还会重复配置,这3种配置存在优先级,MyBatis将按照下面的顺序来加

       载。

           1、在properties元素体内指定的属性首先被读取。

           2、根据properties元素中的resource属性读取类路径下属文件。或者根据url属性指定的路径读取属性文件,并覆盖已读

           取的同名属性。

           3、读取作为方法参数传递的属性,并覆盖已读取的同名属性。

                 因此,通过方法参数传递的属性具有最高优先级,resource/url属性中指定的配置文件次之,最低优先级的是

          properties属 性中指定的属性,因此,在使用配置时应当 注意3点:

                     1、不要使用混合的方式,这样会使得管理混乱。

                     2、首选的方式是使用properties文件。

                     3、如果需要对其进行加密或者其他加工以满足特殊的要求,可以按照示例的方法处理,这样做的好处是使得配置

                          都来自于同一个配置文件,就不容易产生没必要的歧义,也为日后统一管理提供方便。

三、设置

         settings在MyBatis中是最复杂的配置,也是最重要的配置内容之一,它会改变MyBatis运行时的行为,即使不配置

 settings,MyBatis也可以正常的工作,但了解settings的配置内容却十分重要。

MyBatis(三):MyBatis配置详解(一)

MyBatis(三):MyBatis配置详解(一)

下面是一个完整的配置:
配置不需要修改太多,这里只需了解就好,一般来说只需要修改少量的配置即可,后面会详细谈论一些常用功能

<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="defaultExecutorType" value="SIMPLE"/>
    <setting name="defaultStatementTimeout" value="25"/>
    <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>

        在大部分时候不需要去配置它,或者秩序配置少数几项即可。