设为首页 加入收藏

TOP

mybatis配置使用多个数据源(一)
2015-07-24 10:24:28 来源: 作者: 【 】 浏览:1
Tags:mybatis 配置 使用 多个 数据源
mybatis如何配置使用多个数据源?

一、数据库连接properties配置文件,两个数据源的地址: Java代码
hd.jdbc.driverClassName=com.mysql.jdbc.Driver  
hd.jdbc.url=jdbc:mysql://127.0.0.1::3306/hd?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true  
hd.jdbc.username=root  
hd.jdbc.password=root  
  
ho.jdbc.driverClassName=com.mysql.jdbc.Driver  
ho.jdbc.url=jdbc:mysql://127.0.0.1:3306/ho?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true  
ho.jdbc.username=root  
ho.jdbc.password=root  

二、mybatis配置文件,配置两个environment:
Xml代码
   
  
  
      
      
          
              
              
                  
                  
                  
                  
              
          
          
              
              
                  
                  
                  
                  
              
          
      
  


三、获取SqlSessionFactory,获取Mapper代理,便于在执行完Mapper方法后关闭SqlSession。
SqlSessionFactory的获取:
Java代码
/** 
 * 根据mybatis.xml中配置的不同的environment创建对应的SqlSessionFactory 
 * @author boyce 
 * @version 2014-3-27 
 */  
public final class DataSourceSqlSessionFactory {  
    private static final String CONFIGURATION_PATH = "mybatis/mybatis.xml";  
      
    private static final Map SQLSESSIONFACTORYS   
        = new HashMap();  
      
    /** 
     * 根据指定的DataSourceEnvironment获取对应的SqlSessionFactory 
     * @param environment 数据源environment 
     * @return SqlSessionFactory 
     */  
    public static SqlSessionFactory getSqlSessionFactory(DataSourceEnvironment environment) {  
          
        SqlSessionFactory sqlSessionFactory = SQLSESSIONFACTORYS.get(environment);  
        if (ObjectUtils.isNotNull(sqlSessionFactory))  
            return sqlSessionFactory;  
        else {  
            InputStream inputStream = null;  
            try {  
                inputStream = Resources.getResourceAsStream(CONFIGURATION_PATH);  
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream, environment.name());  
                  
                logger.info("Get {} SqlSessionFactory successfully.", environment.name());  
            } catch (IOException e) {  
                logger.warn("Get {} SqlSessionFactory error.", environment.name());  
                logger.error(e.getMessage(), e);  
            }  
            finally {  
                IOUtils.closeQuietly(inputStream);  
            }  
              
            SQLSESSIONFACTORYS.put(environment, sqlSessionFactory);  
            return sqlSessionFactory;  
        }  
    }  
      
    /** 
     * 配置到Configuration.xml文件中的数据源的environment的枚举描述 
     * @author boyce 
     * @version 2014-3-27 
     */  
    public static enum DataSourceEnvironment {  
        HD,  
        HO;  
    }  
}  


定义一个统一的Mapper标识接口,每一个具体的Mapper接口继承该接口:
Java代码
/** 
 * Mapper Interface 
 * @author boyce 
 * @version 2014-3-28 
 */  
public interface Mapper {  
}  

定义一个Mapper代理工厂:
Java代码
/** 
 * Mapper Factory 
 * @author boyce 
 * @version 2014-3-28 
 */  
public final class MapperFactory {  
    private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(MapperFactory.class);  
    /** 
     * Create a mapper of environment by Mapper class 
     * @param clazz Mapper class  
     * @param environment A datasource environment 
     * @return a Mapper instance 
     */  
    @SuppressWarnings("unchecked")  
    public static  T createMapper(Class clazz, DataSourceEnvironment environment) {  
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(environment);  
        SqlSession sqlSession = sqlSessionFactory.openSession();  
        Mapper mapper = sqlSession.getMapper(clazz);  
        return (T)MapperProxy.bind(mapper, sqlSession);  
    }  
      
    /** 
     * Mapper Proxy  
     * executing mapper method and close sqlsession 
     * @author boyce 
     * @version 2014-4-9 
     */  
    private static class MapperProxy implements InvocationHandler {  
        private Mapper mapper;  
        private SqlSession sqlSession;  
          
        private Mapper
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Delete删除表数据时对性能的影响.. 下一篇Redis的持久化-AOF

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·微服务 Spring Boot (2025-12-26 18:20:10)
·如何调整 Redis 内存 (2025-12-26 18:20:07)
·MySQL 数据类型:从 (2025-12-26 18:20:03)
·Linux Shell脚本教程 (2025-12-26 17:51:10)
·Qt教程,Qt5编程入门 (2025-12-26 17:51:07)