问题:由于需要跨数据库查询,sql中需要使用,数据库名.表名,但是如果写死,测试库和生成库切换不方便
解决方法如下:
1、dataSource.properties文件
内容如下:
#产品库
#测试库
#product_db=productdb_test
#生产库
product_db=productdb
#订单库
#测试库
#order_db=orderdb_test
#生产库
order_db=orderdb
2、DataSourceConfig.java文件
内容如下:
package com.upincar.common.datasource;
import com.upincar.util.PropertiesUtils;
public class DataSourceConfig {
public final static String product_dbname = PropertiesUtils.getPropertie("dataSource.properties","product_db");
public final static String order_dbname = PropertiesUtils.getPropertie("dataSource.properties","order_db");
}
3、PropertiesUtils.java文件
内容如下:
package com.upincar.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class PropertiesUtils {
/**
* 读取配置文件的方法
*
* @param fileName
* 配置文件名称
* @param key
* 读取配置文件中的key
* @return
*/
public static String getPropertie(String fileName,String key) {
String PROPERTY_FILE = fileName;
Properties prop = new Properties();
String str = null;
try {
String path = Thread.currentThread().getContextClassLoader().getResource("/").getPath();
File file = new File(path + PROPERTY_FILE);
if (!file.exists())
file.createNewFile();
InputStream fis = new FileInputStream(file);
prop.load(fis);
fis.close();
str = new String(prop.getProperty(key).getBytes("ISO-8859-1"), "UTF-8");
} catch (IOException e) {
LogUtil.error(e);
e.printStackTrace();
}
return str;
}
}
4、mybaits的xml文件
内容如下:
<select id="querySPProvince" parameterType="java.lang.String" resultType="java.lang.String">
SELECT province_name
FROM ${@com.upincar.common.datasource.DataSourceConfig@product_dbname}.dealer_list
WHERE id = #{id}
</select>
注释:xml文件通过 ${@com.upincar.common.datasource.DataSourceConfig@product_dbname}来动态配置数据库名
原sql写法如下,可以进行对比
<select id="querySPProvince" parameterType="java.lang.String" resultType="java.lang.String">
SELECT province_name
FROM product_db.dealer_list
WHERE id = #{id}
</select>