08、Mybatis进阶:全局配置文件_databaseIdProvider_多数据库支持

本文详细解析MyBatis中databaseIdProvider的配置与使用,教你如何根据MySQL、Oracle、SQL Server等不同数据库厂商执行特定的SQL语句,实现数据库无关的持久层设计,提升代码的兼容性和可维护性。

databaseIdProvider:使得MyBatis 可以根据不同的数据库厂商执行不同的语句。

在mybatis配置文件中进行如下配置

	<!-- 5databaseIdProvider支持多数据库厂商的
		 type="DB_VENDOR"VendorDatabaseIdProvider
		 	作用就是得到数据库厂商的标识(驱动getDatabaseProductName())mybatis就能根据数据库厂商标识来执行不同的sql;
		 	MySQLOracleSQL Server,xxxx
	  -->
	<databaseIdProvider type="DB_VENDOR">
		<!-- 为不同的数据库厂商起别名 -->
		<property name="MySQL" value="mysql"/>
		<property name="Oracle" value="oracle"/>
		<property name="SQL Server" value="sqlserver"/>
	</databaseIdProvider>

在映射文件中进行如下配置

下面三条语句中两条设置了databaseId值,一条并未设置值。而databaseId的值与上面property配置的value值要一样。

<select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee">
		select * from tbl_employee where id = #{id}
	</select>
	<select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee"
		databaseId="mysql">
		select * from tbl_employee where id = #{id}
	</select>
	<select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee"
		databaseId="oracle">
		select EMPLOYEE_ID id,LAST_NAME	lastName,EMAIL email 
		from employees where EMPLOYEE_ID=#{id}
	</select>

说明:

databaseId值为mysql表示当数据库连接为mysql数据库时该语句才会被执行如果此时项目使用的是orcle数据则该条语句不会被执行
没有设置databaseId表示无论当前连接的什么数据库该条语句都能被使用但是如上面这种情况如果使用的mysql数据库则databaseId=mysql且id为getEmpById的语句可以执行而同时id也是getEmpById且没指定的databaseId的语句也可以被执行这时系统将执行指定更加精确的databaseId=mysql且id为getEmpById的语句

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: