properties:可以引用外部的配置文件(1)
settings:配置MyBaits运行时的行为(2)
typeAliases:定义别名(3)
typeHandlers:配置数据库类型和骄傲java类型转换,例如将varchar转换成string,但是这个是默认支持的,所以该信息主要用于配置非默认的类型转换器。(4)
objectFactory:配置自定义的objectFactory(5)
plugins:使用插件(6)
environments:可以配置多个environment,但是每个sqlSessionFactory只能对应一个。(7)
environment
transactionManager:事务管理。jdbc或者managed(8)
datasource:定义数据源(9)
mapper :引用定义sql语句的映射的xml文件(10)
上述是一个典型Mybaits的configuration.xml文件的结构,根据每个属性的的序号,我们给出具体的范例以便理解。
(1)properties属性:这个属性可以用于引用外部的配置文件
新建database.properties文件,为了方便,该文件与configuration.xml文件同目录。内容为:
username=root
在configuration.xml文件中引入该配置文件
<properties resource = "database.properties">
</properties>
这时候,在configuration.xml中使用${username},引用属性文件中的内容,例如
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="com.yihaomen.mybaits.datasource.C3P0DataSourceFactory">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/caojiantong" />
<property name="user" value="${username}" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
(2)settings:配置Mybaits的行为
设置参数 | 描述 | 有效值 | 默认值 |
cacheEnabled | 这个配置使全局的映射器启用或禁用缓存。 | true | false | true |
lazyLoadingEnabled | 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。 | true | false | true |
aggressiveLazyLoading | 当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。否则,每种属性将会按需要加载。 | true | false | true |
multipleResultSetsEnabled | 允许或不允许多种结果集从一个单独的语句中返回(需要适合的驱动)。 | true | false | true |
useColumnLabel | 使用列标签代替列名。不同的驱动在这方便表现不同。参考驱动文档或充分测试两种方法来决定所使用的驱动。 | true | false | true |
useGeneratedKeys | 允许JDBC支持生成的键。需要适合的驱动。如果设置为true则这个设置强制生成的键被使用,尽管一些驱动拒绝兼容但仍然有效(比如Derby)。 | true | false | false |
autoMappingBehavior | 指定MyBatis如何自动映射列到字段/属性。PARTIAL只会自动映射简单,没有嵌套的结果。FULL会自动映射任意复杂的结果(嵌套的或其他情况)。 | NONE, PARTIAL, FULL | PA |
- <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="enhancementEnabled" value="false"/>
- <setting name="defaultExecutorType" value="SIMPLE"/>
- <setting name="defaultStatementTimeout" value="25000"/>
- </settings>
在类的使用过程中,我们需要写一长串的包名+类名,我们可以使用typeAliases定义简称进行简化使用。例如
<typeAliases>
<typeAlias alias="User" type="com.yihaomen.mybatis.model.User" />
<typeAlias alias="Article" type="com.yihaomen.mybatis.model.Article" />
</typeAliases>
(4)typeHandlers:类型处理。
在Mybaits的使用过程中,会将数据库的类型和java的类型进行匹配转换。例如
- <typeHandlers>
- <typeHandler javaType="String" jdbcType="VARCHAR" handler="org.mybatis.example.ExampleTypeHandler"/>
- </typeHandlers>
型处理器 | Java类型 | JDBC类型 |
BooleanTypeHandler | Boolean,boolean | 任何兼容的布尔值 |
ByteTypeHandler | Byte,byte | 任何兼容的数字或字节类型 |
ShortTypeHandler | Short,short | 任何兼容的数字或短整型 |
IntegerTypeHandler | Integer,int | 任何兼容的数字和整型 |
LongTypeHandler | Long,long | 任何兼容的数字或长整型 |
FloatTypeHandler | Float,float | 任何兼容的数字或单精度浮点型 |
DoubleTypeHandler | Double,double | 任何兼容的数字或双精度浮点型 |
BigDecimalTypeHandler | BigDecimal | 任何兼容的数字或十进制小数类型 |
StringTypeHandler | String | CHAR和VARCHAR类型 |
ClobTypeHandler | String | CLOB和LONGVARCHAR类型 |
NStringTypeHandler | String | NVARCHAR和NCHAR类型 |
NClobTypeHandler | String | NCLOB类型 |
ByteArrayTypeHandler | byte[] | 任何兼容的字节流类型 |
BlobTypeHandler | byte[] | BLOB和LONGVARBINARY类型 |
DateTypeHandler | Date(java.util) | TIMESTAMP类型 |
DateOnlyTypeHandler | Date(java.util) | DATE类型 |
TimeOnlyTypeHandler | Date(java.util) | TIME类型 |
SqlTimestampTypeHandler | Timestamp(java.sql) | TIMESTAMP类型 |
SqlDateTypeHandler | Date(java.sql) | DATE类型 |
SqlTimeTypeHandler | Time(java.sql) | TIME类型 |
ObjectTypeHandler | Any | 其他或未指定类型 |
EnumTypeHandler | Enumeration类型 | VARCHAR-任何兼容的字符串类型,作为代码存储(而不是索引) |
(6)plugins:使用插件
插件可以改变MyBatis底层的行为,因此功能非常强大。但在对MyBatis深入理解前不要急着编写自己的插件,因为若插件编写不当,将导致整个MyBatis都不能正常工作。
MyBatis允许被插件来拦截的类有:
Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
ParameterHandler (getParameterObject, setParameters)
ResultSetHandler (handleResultSets, handleOutputParameters)
StatementHandler (prepare, parameterize, batch, update, query)
配置实例如下:
- <plugins>
- <plugin interceptor="org.mybatis.example.ExamplePlugin">
- <property name="someProperty" value="100"/>
- </plugin>
- </plugins>
environments里可以配置多个environment,每个environment对应一个数据库环境。一个完整的定义如下
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
</transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
environments里的default属性表示默认的数据库环境,与某个environment的id相对应。
(8)transactionManager:事务管理
在MyBatis中有两种事务管理器类型(也就是type=”[JDBC|MANAGED]”):
l JDBC–这个配置直接简单使用了JDBC的提交和回滚设置。它依赖于从数据源得到的连接来管理事务范围。
l MANAGED–这个配置几乎没做什么。它从来不提交或回滚一个连接。而它会让容器来管理事务的整个生命周期(比如Spring或JEE应用服务器的上下文)
(9)dataSource:数据源
在MyBatis中有三种数据源类型(也就是type=”[UNPOOLED | POOLED| JNDI]”):
l UNPOOLED –这个数据源的实现是每次被请求时简单打开和关闭连接,需要配置的属性:
driver – 这是JDBC驱动的Java类的完全限定名
url – 这是数据库的JDBC URL地址。
username – 登录数据库的用户名。
password – 登录数据库的密码。
defaultTransactionIsolationLevel – 默认的连接事务隔离级别。
l POOLED –mybatis实现的简单的数据库连接池类型,它使得数据库连接可被复用,不必在每次请求时都去创建一个物理的连接。
l JNDI – 通过jndi从tomcat之类的容器里获取数据源。
当然可以引用第三方的数据源,例如C3P0的连接池。
首先,实现UnpooledDataSourceFactory接口
public class C3P0DataSourceFactory extends UnpooledDataSourceFactory{
public C3P0DataSourceFactory() {
this.dataSource = new ComboPooledDataSource();
}
}
然后type就可以配置为自定义的值,例如type=com.yihaomen.mybaits.datasource.C3P0DataSourceFactory
(10)Mappers:引入映射器文件
<mappers>
<mapper resource="com/yihaomen/mybatis/model/User.xml" />
<mapper resource="com/yihaomen/mybatis/inter/User.xml" />
</mappers>