mybatis框架(三)——配置文件信息

引言

            上一篇博客总结了mybatis框架的核心组件,本篇博客总结的内容是mybatis核心配置文件的元素信息以及配置元素的作用等。

概述

            mybatis是通过核心配置文件实现ORM映射,一般起名为mybatis-config.xml。该配置文件中包含很多的元素,我们先通过一个mybatis核心配置文件的层次结构来简单认识一下这些元素。

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

内容

           了解了概述中的目录结构中的元素,接下来我们就需要一一分析并理解各个元素的用法。

        一 properties

             1  作用:配置属性

             2 配置方式:

                (1)property子元素,配置代码示例如下          

<properties>
	<properties name="driver" value="com.mysql.jdbc.Driver"/>
	<properties name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
	<properties name="username" value="root"/>
	<properties name="password" value="****"/>
</properties>
                          配置参数在配置文件中怎么使用?                    
<dataSource type="POOLED">
	<properties name="driver" value="${driver}"/>
	<properties name="url" value="{url}"/>
	<properties name="username" value="${username}"/>
	<properties name="password" value="${password}"/>
</dataSource>
                (2)properties配置文件:方便在多个配置文件中重复使用,便于修改和维护

                         properties文件代码示例:            

#数据库配置文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
username=root
password=****
                        如何使用?将该文件放到源包下,引入即可:<properties resource="jdbc.properties"/>   

             3 程序参数传递:有的时候为了数据的安全,在jdbc.properties配置密文,通过程序明文解密,保证系统的安全。

             4 三种配置方式的优先级:第三种通过程序方法参数传递的属性具有最高优先级,resource/url属性中指定的配置文件次之,最低优先级是properties元素中指定的属性。            

        二 settings

             settings是mybatis最复杂的配置,也是最重要的配置,配置内容繁多,这里不予总结,配置内容项自行了解,那么如何配置哪? 完整的配置示例如下              

<settings>
	<settings name="cacheEnable" value="true"/>
	<settings name="lazyLoadingEnabled" value="true"/>
	<settings name="multipleResultSetsEnabled" value="true"/>
	<settings name="useColumnLabel" value="true"/>
	<settings name="useGeneratedKeys" value="false"/>
	<settings name="autoMappingBehavior" value="PARTIAL"/>
	<settings name="defaultExecutorType" value="SIMPLE"/>
	<settings name="defaultStatementTimeout" value="25"/>
	<settings name="safeRowBoundsEnabled" value="false"/>
	<settings name="mapUnderscoreToCamelCase" value="false"/>
	<settings name="localCacheScope" value="SESSION"/>
	<settings name="jdbcTypeForNull" value="OTHER"/>
	<settings name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>

        三 typeAliases

             1 作用:别名可以代替过长类全限定名,在mybatis上下文中使用。

             2 分类(1)系统自定义别名:如下表

               

                      (2)自定义别名:示例代码如下,使用role代替其类的全路径,减少配置的复杂度              

<!--定义别名--!>
<typeAliases>
	<typeAlias alias="role" type="com.liming.domain.po.Role"/>
</typeAlias>

        四 typeHandler

             1  作用:预处理语句(PreparedStatemen)中设置参数或者从结果集(ResultSet)中取值,都需要注册了的typeHandler进行类型转换。

             2 分类:(1)系统定义

                                    1)系统注册的TypeHandler

                                   

                                    2)代码示例                                       

public TypeHandlerRegistry(){
	register(Boolean.class, new BooleanTypeHandler());
	register(boolean.class, new BooleanTypeHandler());
	register(JdbcType.BOOLEAN, new BooleanTypeHandler());
	register(JdbcType.BIT, new BooleanTypeHandler());
	......
	register(Character.class, new CharacterTypeHandler());
	register(char.class, new CharacterTypeHandler());
}

                                    3)常用配置:java类型(javaType)、JDBC类型(jdbcType)。TypeHandler将参数从javaType转换为jdbcType,或者从数据库取出结果时把jdbcType转换为javaType。

                           (2)自定义

                                     1)注册自定义typeHandler,重新覆盖字符串参数的typeHandler                                

<typeHandlers>
	<typeHandler jdbc="VARCHAR" javaType="string" 
handler="com.liming.domain.typeHandler.myStringTypeHandler"/>
</typeHandlers>
                                     2)通过扫描注册typeHandle

<typeHandlers>
	<package name="com.liming.domain.typeHandler"/>
</typeHandlers>                                     

                           (3)枚举:mybatis提供了俩个转化枚举类型的typeHandle:org.apache.ibatis.type.EnumTypeHandler和org.apache.ibatis.type.EnumOrdinalTypeHandler。

        五 ObjectFactory

             1 作用:mybatis构建结果返回的时候,会使用ObjectFactory(对象工厂)构建POJO。

             2 分类 :(1)默认的,mybatis中默认的ObjectFactory是由org.apache.ibatis.reflection.factory.DefaultObjectFactory来提供服务的。

                            (2)自定义 ,定义新的ObjectFactory代码示例如下,实现代码的时候,我们新的ObjectFactory类直接继承DefaultObjectFactory来实现ObjectFactory的接口。

<objectFactory type="com.liming.domain.objectFactory.MyObjectFactory">
	<property name="name" value="MyObjectFactory"/>
</objectFactory>

        六 plugins

        七 environments

             1 作用:主要是用来配置连接池的数据源。

             2 数据源俩大部分:

                            (1)数据库源的配置,通过dataSource标签来配置数据源连接信息,通过子标签property来定义数据库的各类参数,type属性代表数据库连接方式的配置,提供如下四种:

                                     1)UNPOOLED,非连接池数据库(UnpooledDataSource);

                                     2)POOLED,连接池数据库(PooledDataSource);

                                     3)JNDI,JNDI数据源(JNDIDataSource);

                                     4)自定义数据源,必须实现org.apache.ibatis.datasource.DataSourceFactory接口

                            (2)数据库事务的配置,通过transactionManager标签来配置,通过子标签property来配置数据源的各类属性,type属性包含如下三种配置方式

                                     1)JDBC,采用JDBC方式管理事务,在独立编码中常用;

                                     2)MANAGED,采用容器方式管理事务,在JNDI数据源中常用;

                                     3)自定义,由开发者自定义数据库事务管理方法,适用于特殊应用;

                             (3)一个数据源完整配置的代码示例

<environments default="development">
	<environment id="development">
		<transactionManager type="JDBC">
			<property name="autoCommit" value="false">
		</transactionManager>
		<dataSource type="POOLED">
			<property name="driver" value="com.mysql.jdbc.Driver"/>
			<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
			<property name="username" value="root"/>
			<property name="password" value="****"/>
		</dataSource>
	</environment>
</environments>
                                备注:environment中的属性default,表明缺省情况下,我们启动哪个数据源配置。

        八 databaseIdProvider:它的作用在于指定SQL到对应的数据库厂商提供的数据库中运行,一般应用较少,使用不同厂商数据库的情况较少。mybatis也为数据库厂商标识提供系统默认规则和自定义规则俩种方式,有兴趣自行了解即可。

        九 mappers

             1 概述:映射器是mybatis最复杂最核心的组件

             2 引入映射器的方法:

                         (1)用文件路径引入映射器

		<mappers>
			<mapper resource="对应mapper接口全路径的配置文件">
		</mappers>
                         (2)用包名引入映射器

		<mappers>
			<mapper resource="对应mapper接口包的全路基">
		</mappers>
                         (3)用类注册引入映射器

		<mappers>
			<mapper resource="对应mapper接口类的路径">
		</mappers>
                         (4)用xml配置文件引入映射器

		<mappers>
			<mapper url="file:///var/mappers+文件路径">
		</mappers>
            3 引入映射器步骤  
                          (1)定义映射器接口

package com.liming.domain.mapper;
import java.util.List;
import com.liming.domain.po.User;
public interface UserMapper{
	public User getUser(Int id);
}

                          (2)对应映射器接口的配置文件:定义mapper映射规则和SQL语句

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.liming.domain.mapper.UserMapper">
	<select id="getUser" parameterType="int"
		resultType="com.liming.domain.po.User">
			select id, role_name as roleName, note from t_role where id=#{id}
	</select>
</mapper>

                          (3)在核心配置文件SqlMapConfig.xml中引入映射器

		<mappers>
	        <mapper resource="com/liming/domain/mapper/userMapper.xml"/>
	  </mappers>

总结

            mybatis的配置文件是学习mybatis必须要掌握的,核心是配置文件的编写过程与执行原理,前提需要我们了解配置文件的构成,以及配置文件的元素与内容。这些知识我们可以多多积累,不断丰富自己的经验。

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值