environments :
配置环境可以注册多个数据源( data Source),每一个数据源分为两大部分:一个是数据库源的配置,另外一个是数据库事务( transactionManager)的配置。
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
<property name="..." value="..."/>
</transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.jdbc.mysql.Driver"/>
<property name="url" value="jdbc:mysql://"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
environments中的属性 default,标明在缺省的情况下,我们将启用哪个数据源配置
environment元素是配置一个数据源的开始,属性id是设置这个数据源的标志,以便 MyBatis上下文使用它。
transactionManager配置的是数据库事务,其中type属性有3种配置方式。
(1)JDBC,采用JDBC方式管理事务,在独立编码中我们常常使用。
(2) MANAGED,采用容器方式管理事务,在JNDI数据源中常用
(3)自定义,由使用者自定义数据库事务管理办法,适用于特殊应用
property元素则是可以配置数据源的各类属性,我们这里配置了 auto Commit= false,则是要求数据源不自动提交。
data Source标签,是配置数据源连接的信息,type属性是提供我们对数据库连接方式的配置,同样 My Batis提供这么几种配置方式:
(1) UNPOOLED,非连接池数据库( UnpooledData Source)
(2) POOLED,连接池数据库( PooledData Source)。
(3)JNDI,JNDI数据源( JNDIDataSource)
(4)自定义数据源。
property配置是定义数据库的各类参数。
数据库事务 :
My Batis是交由 Sqlsession去控制的,我们可以通过 Sqlsession提交( commit)或者回滚( rollback)。我们插入一个角色对象,如果成功就提交,否则就回滚.
sqlSession.commit();
sqlSession.rollback();
databaseIdProvider:
<databaseIdProvider type="DB_VENDOR">
<property name="SQL Server" value="sqlserver"/>
<property name="DB2" value="db2"/>
<property name="Msql" value="msql"/>
<property name="Oracle" value="oracle" />
</databaseIdProvider>
type=" DB VENDOR"是启动 My Batis内部注册的策略器。首先 My Batis会将你的配置读入Configuration类里面,在连接数据库后调用 getDatabase ProductNameO方法去获取数据库的信息,然后用我们配置的name值去做匹配来得到 Databased。我们把这些配置到我们的例子里,而我们的例子使用的正是 MySQL数据库。这个时候,我们可以用下面的代码来获
得数据库的I,显然结果就是 MySQL。
sqlSessionFactory. getconfiguration(). getDatabaseId();
也可以在SQL在哪个数据库厂商执行。
<select parameterType=string"id="getRole" resultType="role" databaseId=“mysql">
在多了一个 databased属性的情况下, My Batis将提供如下规则
如果没有配置 databased Provider标签,那么 databased就会返回null
如果配置了 databased Provider标签, My Batis就会用配置的name值去匹配数据库信息,如果匹配得上就会设置 databased,否则依旧为null
如果 Configuration的 databased不为空,则它只会找到配置 databased的sQL语句。
My Batis会加载不带 databased属性和带有匹配当前数据库 databased属性的所有语句。如果同时找到带有 databased和不带 databased的相同语句,则后者会被舍弃。
自定义的商家标识:
需要实现databaseIdProvider 接口,并且配置
<databaseIdProvider type="com.xxx.xxxMydatabaseIdProvider">
<property name="SQL Server" value="sqlserver"/>
<property name="DB2" value="db2"/>
<property name="Msql" value="msql"/>
<property name="Oracle" value="oracle" />
</databaseIdProvider>