MyBatis 配置文件

MyBatis 的持久化离不开 SqlSessionFactory 对象,这个对象是整个数据库映射关系经过编译后的内存镜像。SqlSessionFactory 能够打开 SqlSession 对象,而 SqlSessionFactory 由 SqlSessionFactoryBuilder 加载 MyBatis 的配置文件产生。

我们先来看一下上篇笔记中我们配置文件 mybatis.cfg.xml 中的内容:

<?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>    
	<!-- 为JavaBean起类别名 -->
	<typeAliases>
		<!-- 指定一个包名起别名,将包内的 Java 类的类名作为类的类别名 -->
		<package name="com.gler.mybatis.model" />
	</typeAliases>   

   	<!-- 配置mybatis运行环境 -->
    <environments default="development">
    	<environment id="development">
           <!-- type="JDBC" 代表直接使用 JDBC 的提交和回滚设置 -->
            <transactionManager type="JDBC" />
            
            <!-- POOLED 表示支持JDBC数据源连接池 -->
			<!-- 数据库连接池,由 Mybatis 管理,数据库名是 mybatis,MySQL 用户名 root,密码 root -->
            <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="root" />
            </dataSource>
        </environment>
	</environments> 

	<mappers>
		<!-- 通过 mapper 接口包加载整个包的映射文件 -->
		<package name="com/gler/mybatis/mapper" />
	</mappers>
</configuration>

MyBatis 配置文件的 configuration 标签主要包括:

  • configuration 配置
  • properties 属性
  • settings 设置
  • typeAliases 类型命名
  • typeHandlers 类型处理器
  • objectFactory 对象工厂
  • plugins 插件
  • environments 环境
    • environment 环境变量
    • transactionManager 事务管理器
  • databaseIdProvider 数据库厂商标识
  • mappers 映射器

在上面的示例配置文件中,值包含了最基本的 typeAliases 类型命名、 environments 环境和 mappers 映射器。

1.properties 属性

这些属性是可外部配置且动态替换的,例如在上篇笔记的基础上在目录 /Java Resources/src 下建立了 Java 属性文件 config.properties ,用于配置一些数据库的信息,内容如下:

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

在配置文件中配置 <properties…/> 属性:

<properties resource="config.properties"/>

同样可以通过 properties 元素的子元素来传递值,如在这里设置 usernamepassword 的值:

<properties resource="config.properties">
  	<property name="username" value="root"/>
  	<property name="password" value="123"/>
</properties>

在配置文件中使用这些属性值:

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

注:MyBatis 加载属性的顺序如下(引用自MyBatis中文文档——properties):

  • 首先读取 properties 元素体内指定的属性
  • 然后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性
  • 最后读取作为方法参数传递的属性,并覆盖已读取的同名属性
2.settings 设置

settings 是 MyBatis 极为重要的设置,它们会改变 MyBatis 的运行时行为,如开启二级缓存、开启延迟加载等。

settings 设置的详细情况可参考MyBatis中文文档——settings

3. typeAliases 类型命名

同样来看上篇笔记的 mybatis.cfg.xml ,可以看到我们为 Java 类型设置了一个短的名字取代了类型的全路径。

同时在映射文件 UserMapper.xml 中存在类似如下的语句:

<update id="updateUser"  parameterType="User">
	update user set
	address=#{address} where
	id=#{id}
</update>
<select id="selectUserById" parameterType="int" resultType="User">
	select * from user where id=#{id}
</select>

typeAliases 只和 XML 配置有关,用来减少类完全限定名的冗余,如:

<typeAliases>  
      <typeAliase alias="User" type="com.gler.mybatis.model.User"/>
</typeAliases>

这里将全路径的 com.gler.mybatis.model.User 起一个别名 User 。在映射文件中 parameterTyperesultType 就可以直接使用别名 User ,无需使用全路径。

除了上述方法,还可以指定一个包名起别名, MyBatis 会在包名下面搜索需要的 JavaBean,将 Java 类的类名作为类的类别名,如:

<typeAliases>  
      <package name="com.gler.mybatis.model" />
</typeAliases>

MyBatis 中内建的别名,来自MyBatis中文文档——typeAliases

别名映射的类型
_bytebyte
_longlong
_shortshort
_intint
_integerint
_doubledouble
_floatfloat
_booleanboolean
stringString
byteByte
longLong
shortShort
intInteger
integerInteger
doubleDouble
floatFloat
booleanBoolean
dateDate
decimalBigDecimal
bigdecimalBigDecimal
objectObject
mapMap
hashmapHashMap
listList
arraylistArrayList
collectionCollection
iteratorIterator
4.typeHandlers 类型处理器

typeHandlers 的作用是实现 JDBC 类型和 Java 类型的之间的转换,MyBatis 中默认的类型处理器基本能满足日常需求。

类型处理器Java 类型JDBC 类型
BooleanTypeHandlerjava.lang.Boolean, boolean数据库兼容的 BOOLEAN
ByteTypeHandlerjava.lang.Byte, byte数据库兼容的 NUMERIC 或 BYTE
ShortTypeHandlerjava.lang.Short, short数据库兼容的 NUMERIC 或 SHORT INTEGER
IntegerTypeHandlerjava.lang.Integer, int数据库兼容的 NUMERIC 或 INTEGER
LongTypeHandlerjava.lang.Long, long数据库兼容的 NUMERIC 或 LONG INTEGER
FloatTypeHandlerjava.lang.Float, float数据库兼容的 NUMERIC 或 FLOAT
DoubleTypeHandlerjava.lang.Double, double数据库兼容的 NUMERIC 或 DOUBLE
BigDecimalTypeHandlerjava.math.BigDecimal数据库兼容的 NUMERIC 或 DECIMAL
StringTypeHandlerjava.lang.StringCHAR, VARCHAR
ClobReaderTypeHandlerjava.io.Reader-
ClobTypeHandlerjava.lang.StringCLOB, LONGVARCHAR
NStringTypeHandlerjava.lang.StringNVARCHAR, NCHAR
NClobTypeHandlerjava.lang.StringNCLOB
BlobInputStreamTypeHandlerjava.io.InputStream-
ByteArrayTypeHandlerbyte[]数据库兼容的字节流类型
BlobTypeHandlerbyte[]BLOB, LONGVARBINARY
DateTypeHandlerjava.util.DateTIMESTAMP
DateOnlyTypeHandlerjava.util.DateDATE
TimeOnlyTypeHandlerjava.util.DateTIME
SqlTimestampTypeHandlerjava.sql.TimestampTIMESTAMP
SqlDateTypeHandlerjava.sql.Date DATE
SqlTimeTypeHandlerjava.sql.Time TIME
ObjectTypeHandlerAnyOTHER 或未指定类型
EnumTypeHandlerEnumeration TypeVARCHAR-任何兼容的字符串类型,存储枚举的名称(而不是索引)
EnumOrdinalTypeHandlerEnumeration Type任何兼容的 NUMERIC 或 DOUBLE 类型,存储枚举的索引(而不是名称)
5. environments 环境

MyBatis 的环境配置实际是数据源的配置。MyBatis 可以配置多个环境,帮助你将 SQL 映射对应到多种数据库。

注:尽管可以配置多个环境,每个 SqlSessionFactory 实例只能对应一个数据库,有几个数据库就需要创建几个 SqlSessionFactory 实例。

接受环境配置的两个方法:

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader, environment);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader, environment,properties);

如果忽略了环境参数,默认环境将会被加载:

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader,properties);

(1) transactionManager 事务管理器

MyBatis 中的两种事务管理器,即 type="[JDBC|MANAGED]":

  • JDBC:直接使用 JDBC 的提交和回滚设置
  • MANAGED:让容器来管理事务的整个生命周期

(2)dataSource 数据源

dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。MyBatis 三种內建的数据源类型,即 type="[UNPOOLED|POOLED|JNDI]",这里只详细介绍 UNPOOLED

1> UNPOOLED

UNPOOLED 不支持 JDBC 数据源连接池,实现的只是每次被请求时打开和关闭连接。其包含的属性:

  • driver:JDBC 驱动的 Java 类的完全限定名,如 MySQL 的 com.mysql.jdbc.Driver
  • url:数据库的 JDBC URL 地址
  • username:数据库的用户名
  • password:数据库的密码
  • defaultTransactionIsolationLevel:默认的连接事务隔离级别。

2> POOLED

POOLED 支持 JDBC 数据源连接池,利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。除了有 UNPOOLED 的属性外还有包括 poolMaximumActiveConnections 、 poolMaximumIdleConnections 等属性。

3> JNDI

JNDI 支持外部数据源连接池,它的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。其包含的属性:

  • initial_context:用来在 InitialContext 中寻找上下文
  • data_source:引用数据源实例位置的上下文的路径
6. mappers 映射器

mappers 用于引用已经定义好的映射文件,告诉 MyBatis 去哪寻找映射 SQL 的语句。常见的方法:

(1)通过 resource 加载单个映射文件

<mappers>
  	<mapper resource="com/gler/mybatis/mapper/UserMapper.xml"/> 
</mappers>

(2)通过完全限定资源定位符(绝对路径前加上"file:///")加载单个映射文件

<mappers>
  	<mapper url="file:///home/gler/workspace/MyBatisTest/src/com/gler/mybatis/mapper/UserMapper.xml"/> 
</mappers>

(3)通过 mapper 接口对象加载单个映射文件

<mappers>
  	<mapper class="com.gler.mybatis.mapper.UserMapper"/>
</mappers>

(4)通过 mapper 接口包加载整个包的映射文件

<mappers>
 	<package name="com/gler/mybatis/mapper" />
</mappers>

注:(3)和(4)中需要将 mapper 接口类名和 mapper.xml 映射文件名称保持一致,且在一个目录中。

参考链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值