日期:2014-05-16  浏览次数:20411 次

基于注解的mybatis

首先当然得下载mybatis-3.0.5.jar和mybatis-spring-1.0.1.jar两个JAR包,并放在WEB-INF的lib目录下(如果你使用maven,则jar会根据你的pom配置的依赖自动下载,并存放在你指定的maven本地库中,默认是~/.m2/repository),前一个是mybatis核心包,后一个是和spring整合的包。

使用mybatis,必须有个全局配置文件configuration.xml,来配置mybatis的缓存,延迟加载等等一系列属性,该配置文件示例如下:

Java代码 复制代码
<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE configuration      
    PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"      
    "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
	<settings>
                <!-- 全局映射器启用缓存 -->
		<setting name="cacheEnabled" value="true" />
                <!-- 查询时,关闭关联对象即时加载以提高性能 -->
		<setting name="lazyLoadingEnabled" value="true" />
                <!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指              定),不会加载关联表的所有字段,以提高性能 -->
		<setting name="aggressiveLazyLoading" value="false" />
                <!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 -->
		<setting name="multipleResultSetsEnabled" value="true" />
                <!-- 允许使用列标签代替列名 -->
		<setting name="useColumnLabel" value="true" />
                <!-- 允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值),数据表的PK生成策略将被覆盖 -->
		<setting name="useGeneratedKeys" value="true" />
                <!-- 给予被嵌套的resultMap以字段-属性的映射支持 -->
		<setting name="autoMappingBehavior" value="FULL" />
                <!-- 对于批量更新操作缓存SQL以提高性能  -->
		<setting name="defaultExecutorType" value="BATCH" />
                <!-- 数据库超过25000秒仍未响应则超时 -->
		<setting name="defaultStatementTimeout" value="25000" />
	</settings>
        <!-- 全局别名设置,在映射文件中只需写别名,而不必写出整个类路径  -->
	<typeAliases>
	     <typeAlias alias="TestBean"
		type="com.wotao.taotao.persist.test.dataobject.TestBean" />
	</typeAliases>
        <!-- 非注解的sql映射文件配置,如果使用mybatis注解,该mapper无需配置,但是如果mybatis注解中包含@resultMap注解,则mapper必须配置,给resultMap注解使用 -->
	<mappers>
		<mapper resource="persist/test/orm/test.xml" />
	</mappers>
</configuration>


该文件放在资源文件的任意classpath目录下,假设这里就直接放在资源根目录,等会spring需要引用该文件。

查看ibatis-3-config.dtd发现除了settings和typeAliases还有其他众多元素,比如properties,objectFactory,environments等等,这些元素基本上都包含着一些环境配置,数据源定义,数据库事务等等,在单独使用mybatis的时候非常重要,比如通过以构造参数的形式去实例化一个sqlsessionFactory,就像这样:

Java代码 复制代码

?

SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader);
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, properties);
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, environment, properties);


而typeHandlers则用来自定义映射规则,如你可以自定义将Character映射为varchar,plugins元素则放了一些拦截器接口,你可以继承他们并做一些切面的事情,至于每个元素的细节和使用,你参考mybatis用户指南即可。

现在我们用的是spring,因此除settings和typeAliases元素之外,其他元素将会失效,故不在此配置,spring会覆盖这些元素的配置,比如在spring配置文件中指定c3p0数据源定义如下:

Java代码 复制代码
<!-- c3p0 connection pool configuration -->
	<bean id="testDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
		destroy-method="close">
                <!-- 数据库驱动 -->
		<property name="driverClass" value="${db.driver.class}" />