mybatis学习笔记2 -- springboot 多数据源

springboot 目前已经是spring 世界的新宠儿,由于其简单的配置和启动方式,受到了越来越多的关注,在学习mybatis之前, lz先搭建boot的多数据源,springboot崇尚去xml化,意思就是尽量的springboot 的config 来取代xml, 个人觉得, 无论是config 还是xml都是一个表现形式而已,各有千秋。

废话少说,下面将进行springboot 对多数据源的配置
定义两个数据库 order , shop 下面针对两个数据库进行 数据源配置

package smaug.service.provider.dbConfig;

import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import smaug.service.config.dbConfig.DBConfig;

import javax.sql.DataSource;

/**
 * Created by naonao on 17/7/16.
 */
@Configuration
@MapperScan(basePackages = OrderDBConfig.MAPPER_PACKAGE, sqlSessionFactoryRef = "")
public class OrderDBConfig {
    /**
     * mybatis 实体类
     */
    public static final String MAPPER_PACKAGE = "smaug.service.provider.mapper.orders";

    /**
     * sql xml
     */
    public static final String MAPPER_LOCATION = "classpath:mybatis/orders/*.xml";

    @Autowired
    private DBConfig dbConfig;

    @Bean(name = "queuesDBSource")
    public DataSource queuesDBSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(dbConfig.getDriverClassName());
        dataSource.setUrl(dbConfig.getQueuesUrl());
        dataSource.setUsername(dbConfig.getQueuesUserName());
        dataSource.setPassword(dbConfig.getQueuesPassword());
        dataSource.setEnable(true);
        dataSource.setMaxActive(1000);
        return dataSource;
    }

    @Bean(name = "queuesTransactionManager")
    public DataSourceTransactionManager queuesTransactionManager() {
        return new DataSourceTransactionManager(queuesDBSource());
    }

    @Bean(name = "queuesSqlSessionFactory")
    public SqlSessionFactory queuesSqlSessionFactory(@Qualifier("queuesDBSource") DataSource queuesDBSource)
            throws Exception {
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(queuesDBSource);
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources(OrderDBConfig.MAPPER_LOCATION));
        return sessionFactory.getObject();
    }
}
package smaug.service.provider.dbConfig;

import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import smaug.service.config.dbConfig.DBConfig;

import javax.sql.DataSource;

/**
 * Created by naonao on 17/8/5.
 */
@Configuration
public class ShopDBConfig {

    /**
     * mapper 地址
     */
    public static final String MAPPER_PACKAGE = "smaug.service.provider.mapper.shops";

    public static final String XML_PACKAGE = "classpath:mybatis/shops/*.xml";

    @Autowired
    private DBConfig dbConfig;

    @Bean(name = "shopsDBSource")
    @Primary
    public DataSource shopsDBSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(dbConfig.getDriverClassName());
        dataSource.setUrl(dbConfig.getShopUrl());
        dataSource.setUsername(dbConfig.getShopUserName());
        dataSource.setPassword(dbConfig.getShopPassword());
        dataSource.setEnable(true);
        dataSource.setMaxActive(1000);
        return dataSource;
    }

    @Bean(name = "shopsTransactionManager")
    @Primary
    public DataSourceTransactionManager shopsTransactionManager() {
        return new DataSourceTransactionManager(shopsDBSource());
    }

    @Bean(name = "shopsSqlSessionFactory")
    @Primary
    public SqlSessionFactory shopsSqlSessionFactory(@Qualifier("shopsDBSource") DataSource shopsDBSource)
            throws Exception {
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(shopsDBSource);
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources(ShopDBConfig.XML_PACKAGE));
        return sessionFactory.getObject();
    }
}

然后我们看一下 mapper 和 sql
mapper

package smaug.service.provider.mapper.orders;

import smaug.service.dataEntity.entity.orders.SmaugOrderEntity;

import java.util.List;
import java.util.Map;

public interface SuamgOrderEntityMapper {
    List<SmaugOrderEntity> selectOrderList(Map<String, Object> map);

}

原谅我为了简洁将数据库实体类没有帖进来

<select id="selectOrderList" resultMap="BaseResultMap" parameterType="map">
        SELECT * FROM QueuingTable WHERE 1=1
        <if test="userId!=null">
            AND UserID = #{userId}
        </if>
    </select>

嗯嗯呃,到了这里 写个demo测试一下吧

编写一个 impl

@Override
    public DataResult<OrderListResponse> orderList(OrderListRequest request) {
        DataResult<OrderListResponse> result = new DataResult<>();
        List<OrderListItem> items = orderListHandler.orderList(request.getParams());
        OrderListResponse response = new OrderListResponse();
        response.setData(items);
        response.setMsg("请求成功");
        result.setData(response);
        return result;
    }

启动springBoot 类 或者直接写个test

猜你喜欢

转载自blog.csdn.net/weixin_39526391/article/details/77142009