MyBatis的组成中,主要的是SqlSessionFactory的类,这个类会动词调用SqlSession和执行SQL的声明映射。SqlSessionFactory的对象创建可以基于XML的配置或Java的API
笔者将向大家介绍MyBatis的配置文件中的配置参数,像dataSource、environment、gypeAlisea、typeHandler和SQL的映射。
从这一节开始,笔者所介绍的内容包含下面的:
1) 使用XML配置文件
2) 使用Java API的配置
3) MyBatis的日志加载
创建SqlSessionFactory常用的普遍的方法就是基于XML的配置。下面有一份mybatis-config的配置文件。
<?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> <properties resource="application.properties"> <property name="username" value="db_user"/> <property name="password" value="verysecurepwd"/> </properties> <settings> <setting name="cacheEnabled" value="true"/> </settings> <typeAliases> <typeAlias alias="Tutor" type="com.owen.mybatis.domain.Tutor"/> <package name="com.owen.mybatis.domain"/> </typeAliases> <typeHandlers> <typeHandler handler="com.owen.mybatis.typehandlers. PhoneTypeHandler"/> <package name="com.owen.mybatis.typehandlers"/> </typeHandlers> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driverClassName}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> <environment id="production"> <transactionManager type="MANAGED"/> <dataSource type="JNDI"> <property name="data_source" value="java:comp/jdbc/MyBatisDemoDS"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/owen/mybatis/mappers/StudentMapper.xml"/> <mapper url="file:///D:/mybatisdemo/mappers/TutorMapper.xml"/> <mapper class="com.owen.mybatis.mappers.TutorMapper"/> </mappers> </configuration>
下面我们将对这些配置的信息进行探讨。
MyBatis提供了多套数据源的环境配置,以至于将应用程序部署在多样的环境中,像DEV、TEST、QA、UAT和PRODUCTION.这样,我们可以更加容易去改变默认的环境,我们只需要改变enviroment的id的值就行了。一般的我们的默认的环境配置值是development。当我们的应用部署在生产的应用程序上时,我们不需要改变太多有配置文件,仅仅只需要改变一下默认的enviroment的id值就可以。
有时候,我们在一个同样的应用程序中,我们可能需要使用多套的数据库。例如,我们需要SHOPPINGCART的数据库来储蓄订单的详细信息和我们需要database去汇报我们的目的,通过储蓄订单的详细信息。
在你的应用程序中,需要去,连接多个不同的数据库,你需要分开去配置每套数据库,和分开去创建SqlSessionFactory对象对应不同的数据库。<environments default="shoppingcart"> <environment id="shoppingcart"> <transactionManager type="MANAGED"/> <dataSource type="JNDI"> <property name="data_source" value="java:comp/jdbc/ ShoppingcartDS"/> </dataSource> </environment> <environment id="reports"> <transactionManager type="MANAGED"/> <dataSource type="JNDI"> <property name="data_source" value="java:comp/jdbc/ReportsDS"/> </dataSource> </environment> </environments>
我们可以创建SqlSessionFactory给我们的环境,如下所示:
inputStream = Resources.getResourceAsStream("mybatis-config.xml"); defaultSqlSessionFactory = new SqlSessionFactoryBuilder(). build(inputStream); cartSqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStre am,"shoppingcart"); reportSqlSessionFactory = new SqlSessionFactoryBuilder(). build(inputStream,"reports");
当我们创建SqlSessionFactory没有明确定义environment的id时,SqlSessionFactory将会创建默认的环境。在上面的代码中,defaultSqlSessionFactory创建使用shoppingcart的环境配置。在每一个的环境中,我们需要去配置dataSource和transactionManager的参数。
dataSource的参数的配置,是数据库连接的属性需要的相应参数。
<dataSource type="POOLED"> <property name="driver" value="${jdbc.driverClassName}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource>
上面的代码中,我们看到了dataSource的type是“POOLED”,这个type可以是UNPOOLED、POOLED、或JNDI.
1) 如果你使用的type是UNPOOLED,MyBatis将会在第一次数据库操作的时候,开启数据库和关闭数据库。这个方法可以用于一些简单的数据库,和用户量不是很多的程序中。不过笔者不提倡使用这个方法。
2) 如果你使用的type是POOLED,MyBatis将会创建一个数据库的连接池,和数据库在操作时,只会连接数据库一次。一旦这个连接成功后,MyBatis将会返回,连接到连接池中,也就是说,以后所使用的数据是从连接池来获取的。这个方法适合使用于开发和测试的环境中。
3) 如果你使用的type是JNDI,MyBatis将会从JNDI获取连接,数据资源一般会配置在应用程序的服务上。这个方法一般会用于生产的环境中。