mybatis-config.xml
<databaseIdProvider type="DB_VENDOR">
<property name="Oracle" value="oracle"/>
<property name="MySQL" value="mysql"/>
</databaseIdProvider>
value的值可以改动。(type、name都是对应的别名,别改动)
usersMapper.xml
<select id="getUser" parameterType="int" resultMap="usersMapper" databaseId="mysql">
select id, username, password, hireDate, sex FROM users where id = #{id}
</select>
databaseId的值对应上面的值(oracle、mysql......)。
下面介绍自定义系统规则:
<typeAliases>
<typeAlias type="com.mzs.databaseIdProvider.MyDatabaseIdProvider" alias="myDatabaseIdProvider"/>
</typeAliases>
<databaseIdProvider type="myDatabaseIdProvider">
</databaseIdProvider>
自定义的DatabaseIdProvider
package com.mzs.databaseIdProvider;
import org.apache.ibatis.mapping.DatabaseIdProvider;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import java.util.logging.Logger;
public class MyDatabaseIdProvider implements DatabaseIdProvider {
private static String DATABASE_TYPE_MYSQL = "MySQL";
private static String DATABASE_TYPE_ORACLE = "Oracle";
private static Logger logger = Logger.getLogger("com.mzs.databaseIdProvider.MyDatabaseIdProvider");
@Override
public void setProperties(Properties properties) {
logger.info(properties.toString());
}
@Override
public String getDatabaseId(DataSource dataSource) throws SQLException {
Connection connection = dataSource.getConnection();
String databaseProductName = connection.getMetaData().getDatabaseProductName();
if (DATABASE_TYPE_MYSQL.equals(databaseProductName)) {
return "mysql";
} else if (DATABASE_TYPE_ORACLE.equals(databaseProductName)) {
return "oracle";
} else {
return null;
}
}
}
UsersMapper.xml
<select id="getUser" parameterType="int" resultMap="usersMapper" databaseId="mysql">
select id, username, password, hireDate, sex FROM users where id = #{id}
</select>